请选择 进入手机版 | 继续访问电脑版

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

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

[复制链接]
  • TA的每日心情
    奋斗
    2023-12-6 15:33
  • 签到天数: 2 天

    [LV.1]初来乍到

    20

    主题

    98

    回帖

    954

    积分

    荣誉版主

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

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

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 08:28
  • 签到天数: 135 天

    [LV.7]常住居民III

    12

    主题

    98

    回帖

    1390

    积分

    金牌会员

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

    代码补全的吐槽+1
  • TA的每日心情
    奋斗
    昨天 08:28
  • 签到天数: 135 天

    [LV.7]常住居民III

    12

    主题

    98

    回帖

    1390

    积分

    金牌会员

    积分
    1390
    发表于 2022-12-15 20:41:01 | 显示全部楼层
    定时器0的使用,顺着代码看是能看出来的,当然对于新手,知道是这么一回事,但是要读懂代码是有点费力
  • TA的每日心情
    奋斗
    2023-12-6 15:33
  • 签到天数: 2 天

    [LV.1]初来乍到

    20

    主题

    98

    回帖

    954

    积分

    荣誉版主

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

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

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

    该用户从未签到

    2

    主题

    2

    回帖

    29

    积分

    新手上路

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

    本版积分规则

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

    GMT+8, 2024-4-19 07:40 , Processed in 0.057320 second(s), 44 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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