你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于FreeRTOS的任务划分及comsis_os的函数使用的请教!

[复制链接]
modu8888 提问时间:2017-4-13 09:06 /
      我的项目大致是这样:系统有按键、与串口的输入,有12864点阵液晶屏、蜂鸣器及串口输出。围绕点阵液晶屏的显示,我想根据“界面“划分多个任务。比如初始化任务、首页、通信出错任务、系统设置(其实根据设置子菜单分为n个)、机器行程选择、行程执行等来分为若干任务。
      又因为这些任务不会同时被执行,所以我想上面这些”界面“有关任务只让一个存在于调度表中,其他的都被挂起。当需要切换到另一个任务以后,就将当前任务挂起并唤醒下一个任务。比如在首页,接受到设置按键以后,就将当前任务——首页任务挂起,resume设置首页任务。
       请问这样划分行吗?
       同时,我在用st工程师封装好的cmsis_os里的函数osThreadResume(..)和osThreadSuspend(..)并不灵验。
      请有经验的朋友赐教!
收藏 1 评论4 发布时间:2017-4-13 09:06

举报

4个回答
斜阳 回答时间:2017-4-13 09:15:10
使用rtos的目的就是让任务同时执行。这样设计没发挥出rtos的作用
modu8888 回答时间:2017-4-13 15:25:37
谢谢。
提起来,其他朋友也指教下~
黑皮男 回答时间:2017-4-13 21:18:44
说一说我的一些拙见。一楼说的没错,直接控制任务的挂起和唤醒体现不了实时内核的特性,而且不利于控制代码的结构。
首先,实时内核提供了很多同步机制,比如队列,信号量,这俩也是我用的最多的。任务之间的同步和通信应该尽可能的使用这些现有的工具来完成。队列和信号量等都能够使任务处于阻塞状态,只要条件满足,任务就会被唤醒。
其次,虽然内核提供了这些工具,但是在设计的时候,各功能模块应该提供结构函数以供其他模块调用,而模块内的具体实现就比较灵活了,同时,信号量和队列也建议封装到对应的功能模块中,只好给出功能结构就好。举个例子,向串口打印信息可以封装成一个功能模块,只要提供打印接口函数UartPrint即可,只要其他任务想要向串口打印信息,调用UartPrint即可,至于串口打印功能模块的具体实现可以用一个任务和队列来实现,串口任务查询这个队列,只要队列非空,就取出数据并输出到串口,否则这个任务就会一直处于阻塞状态。UartPrint的功能就是把数据发送到这个串口队列中。这样使的各个模块之间的具体实现就更加灵活。
modu8888 回答时间:2017-4-14 08:09:36
黑皮男 发表于 2017-4-13 21:18
说一说我的一些拙见。一楼说的没错,直接控制任务的挂起和唤醒体现不了实时内核的特性,而且不利于控制代码 ...

谢谢两位!
有点明白了~

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版