完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我的项目大致是这样:系统有按键、与串口的输入,有12864点阵液晶屏、蜂鸣器及串口输出。围绕点阵液晶屏的显示,我想根据“界面“划分多个任务。比如初始化任务、首页、通信出错任务、系统设置(其实根据设置子菜单分为n个)、机器行程选择、行程执行等来分为若干任务。
又因为这些任务不会同时被执行,所以我想上面这些”界面“有关任务只让一个存在于调度表中,其他的都被挂起。当需要切换到另一个任务以后,就将当前任务挂起并唤醒下一个任务。比如在首页,接受到设置按键以后,就将当前任务——首页任务挂起,resume设置首页任务。 请问这样划分行吗? 同时,我在用st工程师封装好的cmsis_os里的函数osThreadResume(..)和osThreadSuspend(..)并不灵验。 请有经验的朋友赐教! |
|
相关推荐
1个回答
|
|
在FreeRTOS中,任务划分和使用CMSIS-RTOS API是一个常见的做法。根据您的项目需求,我将为您提供一些建议来实现您的想法。
1. 首先,您需要为每个界面创建一个任务。这些任务可以是无限循环的任务,也可以是有限循环的任务,具体取决于您的应用需求。例如: ```c void vInitializeTask(void *pvParameters) { // 初始化任务代码 for (;;) { // ... } } void vHomeTask(void *pvParameters) { // 首页任务代码 for (;;) { // ... } } // ... 其他任务 ``` 2. 使用`osThreadCreate`函数创建任务,并将其添加到调度表中。例如: ```c osThreadId_t xInitializeTaskHandle; osThreadId_t xHomeTaskHandle; int main(void) { // 创建初始化任务 xInitializeTaskHandle = osThreadCreate(osThread(vInitializeTask), NULL); // 创建首页任务 xHomeTaskHandle = osThreadCreate(osThread(vHomeTask), NULL); // ... 创建其他任务 // 启动调度器 osKernelStart(); return 0; } ``` 3. 当需要在任务之间切换时,您可以使用`osThreadSuspend`和`osThreadResume`函数来挂起当前任务并唤醒另一个任务。例如,在首页任务中,当接收到设置按键时,挂起首页任务并唤醒系统设置任务: ```c void vHomeTask(void *pvParameters) { for (;;) { // ... 首页任务代码 if (接收到设置按键) { // 挂起当前任务 osThreadSuspend(xHomeTaskHandle); // 唤醒系统设置任务 osThreadResume(xSystemSettingTaskHandle); } } } ``` 4. 在系统设置任务中,当完成设置后,您可以使用类似的方法返回到首页任务: ```c void vSystemSettingTask(void *pvParameters) { for (;;) { // ... 系统设置任务代码 if (完成设置) { // 挂起当前任务 osThreadSuspend(xSystemSettingTaskHandle); // 唤醒首页任务 osThreadResume(xHomeTaskHandle); } } } ``` 通过这种方式,您可以根据需要在不同任务之间进行切换,而无需让所有任务同时存在于调度表中。这有助于降低资源消耗并提高系统响应速度。 请注意,这里提供的代码示例仅供参考,您需要根据您的具体需求进行调整。在使用FreeRTOS时,请确保您熟悉其API和任务调度机制。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1804 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1629 浏览 1 评论
1097 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
736 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1686 浏览 2 评论
1944浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
747浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
580浏览 3评论
602浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
565浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 10:37 , Processed in 0.834210 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号