初学freertos。用的cube生成的freertos工程,单片机型号位stm32f103vbt6。 建了三个人物,一个是串口任务,一个是LED每秒翻转一次,一个是空任务。 串口接收用的是DMA+空闲中断,将接收数组的指针,通过邮箱发送给任务。 任务通过邮箱得到接收数组的指针,然后逐个复制到任务里建立的数组,再通过串口发送出去。 现在结果是上位机发送数据大概七八秒后才收到返回来的数据。太慢了。 用stlink调试,断点设在发送邮箱处,很快就能停到断点处。 然后将断点改在接收邮箱处和串口发送处,结果没有在接收邮箱的断点停,而是过了七八秒后停在了串口发送处。 |
点评
评分
查看全部评分
评分
查看全部评分
任务延时设的时间太长了。
额,那么我这里如果改成消息队列的话,需要将队列数改为1吗?如果需要改为1,那和现在的情况有什么区别?
评分
查看全部评分
我的做法是这样的:我用邮箱和内存池结合的方法。邮箱传送的是地址和长度,消息池是储存的数据。然后有消息就等待的线程就工作。
评分
查看全部评分
CUBE支持生成ECLISPE+AC6的工程了,那个配色可以修改的更好看,但对ECLIPSE不熟悉,不知道该如何用STLINK调试,现在暂时放弃了。
我现在是中断接收数据后放到数组里,数组的第一位放数据的长度。
然后通过消息邮箱发送给任务。
任务通过消息邮箱后,先读出长度,然后依此复制过来存放到任务的数组里。再调用发送函数。
现在担心复制的过程中,中断又收到新的数据将原数组更新。
我还不懂内存池,现在中断接收存放在了个全局变量里。