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

关于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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版