上面的代码有两个问题1.既然使用的了信号量为何还需要sendFlag,是否二者取其一就可实现SINT_STAT_SENBUF_FREE中断发生后才可以后续发送数据; 2.CH395第一次发送数据不需要SINT_STAT_SENBUF_FREE中断,发送完数据才会产生SINT_STAT_SENBUF_FREE中断。请根据以上两个问题修改上面的代码程序
时间: 2023-10-07 16:14:17 浏览: 88
STM32的CH395
3星 · 编辑精心推荐
针您提出的两个问题,我给出以下修改建议:
1. 考虑使用信号量来实现SINT_STAT_SENBUF_FREE中断发生后才可以后续发送数据的功能,因此可以将sendFlag变量删除,使用一个名为sendSem的信号量来实现。主程序中发送数据前申请sendSem信号量,发送数据完成后释放sendSem信号量,而在SINT_STAT_SENBUF_FREE中断处理函数中释放sendSem信号量。修改后的部分代码如下:
```c
//定义sendSem信号量
sem_t sendSem;
//主程序中发送数据
void sendData(void *data, uint16_t len) {
//申请sendSem信号量
sem_wait(&sendSem);
//发送数据
//...
//发送完成后释放sendSem信号量
sem_post(&sendSem);
}
//SINT_STAT_SENBUF_FREE中断处理函数
void SINT_STAT_SENBUF_FREE_ISR() {
//释放sendSem信号量
sem_post(&sendSem);
}
```
2. 针对第二个问题,可以在主程序中第一次发送数据时,先发送数据,然后等待SINT_STAT_SENBUF_FREE中断的发生再进行下一次发送。修改后的部分代码如下:
```c
//主程序中第一次发送数据
void sendFirstData(void *data, uint16_t len) {
//发送数据
//...
//等待SINT_STAT_SENBUF_FREE中断发生
sem_wait(&sendSem);
//发送下一次数据
//...
}
```
以上是我的修改建议,您可以参考并根据实际情况进行修改。
阅读全文