找回密码
 立即注册
查看: 1943|回复: 4

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

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2023-12-06 15:33:02

20

主题

110

回帖

771

积分

荣誉版主

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:449
  • 最近打卡:2025-05-01 08:38:15

12

主题

110

回帖

1072

积分

金牌会员

积分
1072
发表于 2022-12-15 20:38:33 | 显示全部楼层
发送的数据先复制进发送缓存,然后让串口中断自己一个个发送,也是可以的吧

代码补全的吐槽+1
  • 打卡等级:以坛为家II
  • 打卡总天数:449
  • 最近打卡:2025-05-01 08:38:15

12

主题

110

回帖

1072

积分

金牌会员

积分
1072
发表于 2022-12-15 20:41:01 | 显示全部楼层
定时器0的使用,顺着代码看是能看出来的,当然对于新手,知道是这么一回事,但是要读懂代码是有点费力
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2023-12-06 15:33:02

20

主题

110

回帖

771

积分

荣誉版主

积分
771
发表于 2022-12-16 11:26:04 | 显示全部楼层
gzl*** 发表于 2022-12-15 20:38
发送的数据先复制进发送缓存,然后让串口中断自己一个个发送,也是可以的吧

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

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

2

主题

2

回帖

37

积分

新手上路

积分
37
发表于 2023-1-6 10:23:04 | 显示全部楼层
对于2:串口应用的问题,我是把串口函数库改了,发送改成阻塞的发送  接收改成循环队列的接收(有头尾指针的那种)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:41 , Processed in 0.108569 second(s), 75 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表