freertos操作系统注意事项

1.如果想用消息队列替代全局变量,在多个地方使用这个全局变量时,等待消息队列不能用xQueueReceive,这个函数会在使用后将消息队列中的数据删除,使用xQueuePeek,这个函数只会复制消息队列中的消息并不会删除消息队列中的参数,所以如果在接收完这个队列的时候如果要再次向这个队列发消息的情况下不建议使用这种方式

在一个函数中出现Peek和Send,如果send等待时间是永久等待会造成一些不可预估的现象

同样的,只有只是想将数据复制出来使用有两种方式,一种是Receive+Send适用于更改数据,但是也可以保证不会影响数据,还有一种是Peek,如果是这种适用于这个队列等于全局变量的情况,要么每一次send之前,自己来销毁数据而不是接收方销毁数据。

2.采取消息队列的方式需要注意在函数中还需要声明一个局部变量,如果被外部的任务调用这个函数,使用直接声明局部变量的方式在外部任务堆栈空间不够大的情况下会导致任务死机,这种情况出现取决于局部变量占据的空间,所以在操作系统中最好使用指针,pvPortMalloc+free的方式

3.操作系统的vportfree和pvportmalloc一定要对应起来,切记不要使用成free,否则会造成严重的内存泄漏问题,如果这个函数一直运行的话甚至会导致死机。虽然不当使用会造成内存泄漏,但是这个是比较容易发现的,最好在任务中定时打印获取可用空间大小,方便及时发现问题。

最容易出现问题的地方在于返回值,任何一个分支的返回值之前都要进行一个释放的操作,否则一旦进入异常分支造成的内存泄漏可能容易被忽略。有些异常现象可能是由于内存泄漏造成的。

另:在操作系统中就不要使用malloc和free了

4.高优先级任务后面需要加个延时把时间让给低优先级任务执行,但是这个延时需要注意如果在任务有固定频率的时候不可以设置的比应该有的频率还要低,否则会影响到原先的频率,比如说像有1Hz频率接收的情况下任务延时就不能超过1000ms

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值