完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
左哥:我按照第13.2讲的视频手把手跟着你的讲解在我的F1开发板(不是正点的板子)写了这个函数的实验“void vTaskGetRuntimeStats( char *pcWriteBuffer )”;是手把手跟你做的。Main函数如下所示。串口显示出了各个任务的执行时间计数以及所占CPU的百分比;但是板子上的LED1(相当于正点板子的LED0)一直常亮,不闪烁;LED2(相当于正点的LED1)我看到应该是按照1s 在闪烁。我的问题是LED1为什么不按照程序要求的每1s闪烁呢?难道是这个任务没有得到执行?
#include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "key.h" #include "FreeRTOS.h" #include "task.h" /************************************************ ALIENTEK 战舰STM32F103开发板 FreeRTOS实验2-1 FreeRTOS任务状态与信息查询实验13.1视频-库函数版本 技术支持:www.openedv.com 淘宝店铺:http://eboard.taobao.com 关注微信公众平台微信号:"发烧友",免费获取STM32资料。 广州市星翼电子科技有限公司 作者:发烧友 @ALIENTEK ************************************************/ //任务优先级 #define START_TASK_PRIO 1 //任务堆栈大小 #define START_STK_SIZE 128 //任务句柄 TaskHandle_t StartTask_Handler; //任务函数 void start_task(void *pvParameters); //任务优先级 #define LED1_TASK_PRIO 2 //任务堆栈大小 #define LED1_STK_SIZE 50 //任务句柄 TaskHandle_t LED1Task_Handler; //任务函数 void led1_task(void *pvParameters); //任务优先级 #define RUNTIMESTATS_TASK_PRIO 3 //任务堆栈大小 #define RUNTIMESTATS_STK_SIZE 256 //任务句柄 TaskHandle_t RunTimeStats_Handler; //任务函数 void RunTimeStats_task(void *pvParameters); char InfoBuffer[1000]; int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4 delay_init(); //延时函数初始化 uart_init(115200); //初始化串口 LED_Init(); //初始化LED KEY_Init(); //初始化KEY //创建开始任务 xTaskCreate((TaskFunction_t )start_task, //任务函数 (const char* )"start_task", //任务名称 (uint16_t )START_STK_SIZE, //任务堆栈大小 (void* )NULL, //传递给任务函数的参数 (UBaseType_t )START_TASK_PRIO, //任务优先级 (TaskHandle_t* )&StartTask_Handler); //任务句柄 vTaskStartScheduler(); //开启任务调度 } //开始任务任务函数 void start_task(void *pvParameters) { taskENTER_CRITICAL(); //进入临界区 //创建LED1任务 xTaskCreate((TaskFunction_t )led1_task, (const char* )"led1_task", (uint16_t )LED1_STK_SIZE, (void* )NULL, (UBaseType_t )LED1_TASK_PRIO, (TaskHandle_t* )&LED1Task_Handler); //创建QUERY任务 xTaskCreate((TaskFunction_t )RunTimeStats_task, (const char* )"RunTimeStats_task", (uint16_t )RUNTIMESTATS_STK_SIZE, (void* )NULL, (UBaseType_t )RUNTIMESTATS_TASK_PRIO, (TaskHandle_t* )&RunTimeStats_Handler); vTaskDelete(StartTask_Handler); //删除开始任务 taskEXIT_CRITICAL(); //退出临界区 } //LED1任务函数 void led1_task(void *pvParameters) { while(1) { LED1=!LED1; vTaskDelay(1000); } } //RunTimeStats任务函数 void RunTimeStats_task(void *pvParameters) { u8 key,i; while(1) { key=KEY_Scan(0); if(key==WKUP_PRES) { vTaskGetRunTimeStats(InfoBuffer); printf("%srn",InfoBuffer); } i++; if(i==100) { i=0; LED2=!LED2; } vTaskDelay(10); } } |
|
相关推荐
10个回答
|
|
定时器器里面的 函数还有 配置那几个宏的都是手把手跟你写的,应该没有问题,现在感觉点亮LED1的那个任务执行有问题!?左兄
|
|
|
|
左兄:我注意到了在LED1的任务里添加打印后,LED1这个任务的执行时间是比之前增加了。但是LED1怎么不和LED2一样的闪呢?
|
|
|
|
vTaskDelay(1000) 就是延时1s
|
|
|
|
要么你把代码加附件,要么你去仿真看
|
|
|
|
左老师:你用战舰试过视频中手把手的代码吗?难道战舰上跑这个程序的时候点灯任务里的那个灯可以正常闪烁吗?我觉得可能是某些宏的修改或者执行vTaskGetRunTimeStats时会影响点灯任务!!!!!?????
我把移植程序下载试过了 我的板子上的两个灯可以正常闪烁,我用的也是那个移植程序里的LED文件夹,左老师。 |
|
|
|
楼主搞出来没,我也在学这个,但是我这个是可以的,要不把工程文件发我,我看看,邮箱948820996@qq.com
|
|
|
|
谢谢,我发你。我用的不是正点的F103,是另一家的F103
|
|
|
|
检查你led1端口定义对不对哦
|
|
|
|
先放下吧,不管了
|
|
|
|
看文档教程。
|
|
|
|
只有小组成员才能发言,加入小组>>
723 浏览 1 评论
2134 浏览 5 评论
2448 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2224 浏览 6 评论
2178 浏览 7 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
328浏览 9评论
318浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
452浏览 6评论
314浏览 5评论
361浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-5-17 07:06 , Processed in 1.126333 second(s), Total 99, Slave 78 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号