FreeRTOS 应用注意事项(已发现的,欢迎补充,让后人少踩...
1:堆栈问题FreeRTOSConfig.h文件里面,configDEFAULT_STACK_SIZE参数定义了每个任务使用的堆栈大小,如果出现莫名其妙的问题,不妨把他设置大一点。我当时遇到的问题是系统自己复位重启
2:串口应用:
对于某些外设而言,串口期望收到的是一个连续的一组数据,而在操作系统里面,是以时间片运行各个以启动的任务,这就导致发出的串口数据不连续。我的解决办法是使用vTaskSuspendAll()函数和xTaskResumeAll()函数,前者关闭任务调度器,发送完串口了再打开。当然把数据放到数组里面中断发送也许也能解决问题,大家可以测试下。
3:定时器
STC单片机没有嘀嗒定时器,所以FreeRTOS使用了定时器0生成节拍,软件中不可以使用定时器0(官方例程的使用说明竟然没有提)
顺便吐槽一下keil C251,没有代码自动补全简直是煎熬。。。 发送的数据先复制进发送缓存,然后让串口中断自己一个个发送,也是可以的吧
代码补全的吐槽+1 定时器0的使用,顺着代码看是能看出来的,当然对于新手,知道是这么一回事,但是要读懂代码是有点费力 gzlai 发表于 2022-12-15 20:38
发送的数据先复制进发送缓存,然后让串口中断自己一个个发送,也是可以的吧
代码补全的吐槽+1 ...
理论上是可以的,我是用的485通讯,需要控制发送接收脚,所以简单粗暴的直接把任务调度给关了:lol 对于2:串口应用的问题,我是把串口函数库改了,发送改成阻塞的发送接收改成循环队列的接收(有头尾指针的那种)
页:
[1]