完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
实验中定义LED灯任务的优先级高于KEY的优先级,灯就会闪烁 。
如果KEY的优先级高于LED灯的优先级,灯就不闪烁,求解答。 以下优先级设置可以实现灯闪烁 /////////////////led1_configure/////////////////// #define led1_Stack 25 //设置堆栈大小 #define led1_Pro 8 //设置优先级 TaskHandle_t led1_Handle; //设置句柄 void led1_task(void *pvParameters); //初始化函数 /////////////////KEY1_configure/////////////////// #define key1_Stack 25 //设置堆栈大小 #define key1_Pro 7 //设置优先级 TaskHandle_t key1_Handle; //设置句柄 void key1_task(void *pvParameters); //初始化函数 以下优先级设置灯就不亮 /////////////////led1_configure/////////////////// #define led1_Stack 25 //设置堆栈大小 #define led1_Pro 7 //设置优先级 TaskHandle_t led1_Handle; //设置句柄 void led1_task(void *pvParameters); //初始化函数 /////////////////KEY1_configure/////////////////// #define key1_Stack 25 //设置堆栈大小 #define key1_Pro 8 //设置优先级 TaskHandle_t key1_Handle; //设置句柄 void key1_task(void *pvParameters); //初始化函数 求解答 谢谢 |
|
相关推荐
10个回答
|
|
代码问题.
|
|
|
|
请问一下 哪个地方的问题 能描述下吗 谢谢
|
|
|
|
你的代码呢.在哪里?
|
|
|
|
谢谢了 代码如下
#include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "FreeRTOS.h" #include "task.h" #include "timer.h" #include "key.h" #include "queue.h" /************************************************ ALIENTEK 精英STM32F103开发板 FreeRTOS实验2-1 FreeRTOS移植实验-库函数版本 技术支持:www.openedv.com 淘宝店铺:http://eboard.taobao.com 关注微信公众平台微信号:"发烧友",免费获取STM32资料。 广州市星翼电子科技有限公司 作者:发烧友 @ALIENTEK ************************************************/ /////////////////start_configure/////////////////// #define start_Stack 150 //设置堆栈大小 #define start_Pro 1 //设置优先级 TaskHandle_t start_Handle; //设置句柄 void start_task(void *pvParameters); //初始化函数 /////////////////led1_configure/////////////////// #define led1_Stack 25 //设置堆栈大小 #define led1_Pro 8 //设置优先级 TaskHandle_t led1_Handle; //设置句柄 void led1_task(void *pvParameters); //初始化函数 /////////////////LED2_configure/////////////////// #define led2_Stack 25 //设置堆栈大小 #define led2_Pro 7 //设置优先级 TaskHandle_t led2_Handle; //设置句柄 void led2_task(void *pvParameters); //初始化函数 /////////////////KEY1_configure/////////////////// #define key1_Stack 25 //设置堆栈大小 #define key1_Pro 6 //设置优先级 TaskHandle_t key1_Handle; //设置句柄 void key1_task(void *pvParameters); //初始化函数 /////////////////KEY0_configure/////////////////// #define key0_Stack 25 //设置堆栈大小 #define key0_Pro 5 //设置优先级 TaskHandle_t key0_Handle; //设置句柄 void key0_task(void *pvParameters); //初始化函数 int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4 delay_init(); //延时函数初始化 uart_init(115200); //初始化串口 LED_Init(); key_init(); //任务句柄 xTaskCreate( (TaskFunction_t) start_task, (const char * ) "start_task", (uint16_t ) start_Stack, (void * ) NULL, (UBaseType_t ) start_Pro, (TaskHandle_t *) &start_Handle ); vTaskStartScheduler(); //开启任务调度 } void start_task(void *pvParameters) { taskENTER_CRITICAL(); xTaskCreate((TaskFunction_t) led1_task, (const char * ) "led1_task", (uint16_t ) led1_Stack, (void * ) NULL, (UBaseType_t ) led1_Pro, (TaskHandle_t *) &led1_Handle ); xTaskCreate((TaskFunction_t) led2_task, (const char * ) "led2_task", (uint16_t ) led2_Stack, (void * ) NULL, (UBaseType_t ) led2_Pro, (TaskHandle_t *) &led2_Handle ); xTaskCreate((TaskFunction_t) key1_task, (const char * ) "key1_task", (uint16_t ) key1_Stack, (void * ) NULL, (UBaseType_t ) key1_Pro, (TaskHandle_t *) &key1_Handle ); xTaskCreate((TaskFunction_t) key0_task, (const char * ) "key0_task", (uint16_t ) key0_Stack, (void * ) NULL, (UBaseType_t ) key0_Pro, (TaskHandle_t *) &key0_Handle ); vTaskDelete( start_Handle ); taskEXIT_CRITICAL(); } void led1_task(void *pvParameters) { while(1) { LED0=~LED0; vTaskDelay(1000); } } void led2_task(void *pvParameters) { while(1) { LED1=~LED1; vTaskDelay(500); } } void key1_task(void *pvParameters) { u8 key; while(1) { key=PressKey(0); if(key==Key1OK) { vTaskSuspend(led1_Handle); } } } void key0_task(void *pvParameters) { u8 key; while(1) { key=PressKey(0); if(key==Key0OK) { vTaskResume(led1_Handle); } } } |
|
|
|
当按键的优先级大于LED闪烁的优先级时,灯不会闪烁。当LED灯闪烁的优先级大于按键的优先级时,才可以实现LED灯闪烁
|
|
|
|
Hi llache,你程序一直在检查按键,当然不会去点灯了。你可以将按键写成定时扫描。或调整优先级。
|
|
|
|
多谢多谢。我还想问下 如果KEY的优先级比较高,调用KEY任务后 while(1)就会一直循环 就不会跳出这个这个任务去执行其他任务了 对吗?如果在KEY 里面加入vTaskDelay(),就可以去调用到其他任务了吗?
|
|
|
|
正解 vTaskDelay() 可以启用任务调度;
|
|
|
|
|
|
按键的优先级高先执行按键任务挂起了led1任务 所以不会亮 如果没有挂起 led任务 加个延时vTaskDelay() 会在延时的时候切换任务
|
|
|
|
只有小组成员才能发言,加入小组>>
809 浏览 0 评论
1161 浏览 1 评论
2535 浏览 5 评论
2871 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2719 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1107浏览 3评论
198浏览 2评论
464浏览 2评论
378浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
459浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 16:29 , Processed in 1.423523 second(s), Total 99, Slave 79 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号