chen 发表于 2022-12-10 09:44:20

FreeRTOS 应用注意事项(已发现的,欢迎补充,让后人少踩...

1:堆栈问题
      FreeRTOSConfig.h文件里面,configDEFAULT_STACK_SIZE参数定义了每个任务使用的堆栈大小,如果出现莫名其妙的问题,不妨把他设置大一点。我当时遇到的问题是系统自己复位重启
2:串口应用:
      对于某些外设而言,串口期望收到的是一个连续的一组数据,而在操作系统里面,是以时间片运行各个以启动的任务,这就导致发出的串口数据不连续。我的解决办法是使用vTaskSuspendAll()函数和xTaskResumeAll()函数,前者关闭任务调度器,发送完串口了再打开。当然把数据放到数组里面中断发送也许也能解决问题,大家可以测试下。
3:定时器
      STC单片机没有嘀嗒定时器,所以FreeRTOS使用了定时器0生成节拍,软件中不可以使用定时器0(官方例程的使用说明竟然没有提)

顺便吐槽一下keil C251,没有代码自动补全简直是煎熬。。。

gzlai 发表于 2022-12-15 20:38:33

发送的数据先复制进发送缓存,然后让串口中断自己一个个发送,也是可以的吧

代码补全的吐槽+1

gzlai 发表于 2022-12-15 20:41:01

定时器0的使用,顺着代码看是能看出来的,当然对于新手,知道是这么一回事,但是要读懂代码是有点费力

chen 发表于 2022-12-16 11:26:04

gzlai 发表于 2022-12-15 20:38
发送的数据先复制进发送缓存,然后让串口中断自己一个个发送,也是可以的吧

代码补全的吐槽+1 ...

理论上是可以的,我是用的485通讯,需要控制发送接收脚,所以简单粗暴的直接把任务调度给关了:lol

cocoguojia 发表于 2023-1-6 10:23:04

对于2:串口应用的问题,我是把串口函数库改了,发送改成阻塞的发送接收改成循环队列的接收(有头尾指针的那种)
页: [1]
查看完整版本: FreeRTOS 应用注意事项(已发现的,欢迎补充,让后人少踩...