完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
开门见山吧,在原子给的UCOS例程6-2《UCOSIII任务挂起和恢复》的基础上进行改动。
当delay的值为100ms时,通过串口打印显示CPU使用率如下图(并附上代码) [AppleScript] 纯文本查看 复制代码 void task1_task(void *p_arg){u8 task1_num=0;OS_ERR err;CPU_SR_ALLOC();p_arg = p_arg;POINT_COLOR = BLACK;OS_CRItiCAL_ENTER();LCD_DrawRectangle(5,110,115,314); //画一个矩形LCD_DrawLine(5,130,115,130);//画线POINT_COLOR = BLUE;LCD_ShowString(6,111,110,16,16,"Task1 Run:000");OS_CRITICAL_EXIT();while(1){task1_num++;//任务1执行次数加1 注意task1_num1加到255的时候会清零!!LED0= ~LED0;printf("任务1已经执行:%d次rn",task1_num);if(task1_num==5) {OSTaskSuspend((OS_TCB*)&Task2_TaskTCB,&err);//任务1执行5次后挂起任务2printf("任务1挂起了任务2!rn");}if(task1_num==10) {OSTaskResume((OS_TCB*)&Task2_TaskTCB,&err);//任务1运行10次后恢复任务2printf("任务1恢复了任务2!rn");}printf("CPU使用率:%d(0~10000)rn",OSStatTaskCPUUsage);LCD_Fill(6,131,114,313,lcd_discolor[task1_num%14]); //填充区域LCD_ShowxNum(86,111,task1_num,3,16,0x80);//显示任务执行次数OSTimeDlyHMSM(0,0,0,100,OS_OPT_TIME_HMSM_STRICT,&err); //延时100ms}}//task2任务函数void task2_task(void *p_arg){u8 task2_num=0;OS_ERR err;CPU_SR_ALLOC();p_arg = p_arg;POINT_COLOR = BLACK;OS_CRITICAL_ENTER();LCD_DrawRectangle(125,110,234,314); //画一个矩形LCD_DrawLine(125,130,234,130);//画线POINT_COLOR = BLUE;LCD_ShowString(126,111,110,16,16,"Task2 Run:000");OS_CRITICAL_EXIT();while(1){task2_num++;//任务2执行次数加1 注意task1_num2加到255的时候会清零!!LED1=~LED1;printf("任务2已经执行:%d次rn",task2_num);LCD_ShowxNum(206,111,task2_num,3,16,0x80); //显示任务执行次数LCD_Fill(126,131,233,313,lcd_discolor[13-task2_num%14]); //填充区域OSTimeDlyHMSM(0,0,0,100,OS_OPT_TIME_HMSM_STRICT,&err); //延时100ms}} 当delay的值为1s时,通过串口打印显示CPU使用率如下图(并附上代码) [AppleScript] 纯文本查看 复制代码 //task1任务函数void task1_task(void *p_arg){u8 task1_num=0;OS_ERR err;CPU_SR_ALLOC();p_arg = p_arg;POINT_COLOR = BLACK;OS_CRITICAL_ENTER();LCD_DrawRectangle(5,110,115,314); //画一个矩形LCD_DrawLine(5,130,115,130);//画线POINT_COLOR = BLUE;LCD_ShowString(6,111,110,16,16,"Task1 Run:000");OS_CRITICAL_EXIT();while(1){task1_num++;//任务1执行次数加1 注意task1_num1加到255的时候会清零!!LED0= ~LED0;printf("任务1已经执行:%d次rn",task1_num);if(task1_num==5) {OSTaskSuspend((OS_TCB*)&Task2_TaskTCB,&err);//任务1执行5次后挂起任务2printf("任务1挂起了任务2!rn");}if(task1_num==10) {OSTaskResume((OS_TCB*)&Task2_TaskTCB,&err);//任务1运行10次后恢复任务2printf("任务1恢复了任务2!rn");}printf("CPU使用率:%d(0~10000)rn",OSStatTaskCPUUsage);LCD_Fill(6,131,114,313,lcd_discolor[task1_num%14]); //填充区域LCD_ShowxNum(86,111,task1_num,3,16,0x80);//显示任务执行次数OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //延时1s}}//task2任务函数void task2_task(void *p_arg){u8 task2_num=0;OS_ERR err;CPU_SR_ALLOC();p_arg = p_arg;POINT_COLOR = BLACK;OS_CRITICAL_ENTER();LCD_DrawRectangle(125,110,234,314); //画一个矩形LCD_DrawLine(125,130,234,130);//画线POINT_COLOR = BLUE;LCD_ShowString(126,111,110,16,16,"Task2 Run:000");OS_CRITICAL_EXIT();while(1){task2_num++;//任务2执行次数加1 注意task1_num2加到255的时候会清零!!LED1=~LED1;printf("任务2已经执行:%d次rn",task2_num);LCD_ShowxNum(206,111,task2_num,3,16,0x80); //显示任务执行次数LCD_Fill(126,131,233,313,lcd_discolor[13-task2_num%14]); //填充区域OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //延时1s}} 两段代码注意OSTimeDlyHMSM(); 的差别,其他均相同。CPU查看代码为printf("CPU使用率:%d(0~10000)rn",OSStatTaskCPUUsage); //********************************************* 问1:用 OSStatTaskCtr * OSStatTaskCPUUsage = 100 * (1 - ----------------------------------) (units are in %) * OSStatTaskCtrMax UCOSIII是用这种方法得到CPU的使用率的,我发现似乎和delay有这较大的关系,如果不用delay,CPU使用率为0,(当然对于这个程序不用delay实验效果也会不同)。那么OSStatTaskCPUUsage 和delay有这什么联系呢? 问2:如果单片机需要高频率采集数据,处理数据,这样就不适合用delay了,那么该怎么得到CPU的使用率呢? 注:以上的delay泛指可以或者不能引起任务调度的延时函数。 |
|
相关推荐
4个回答
|
|
你不用delay,那么统计任务就无法执行...
|
|
|
|
好吧。那想较快的处理数据(比如MPU6050),同时又想监测CPU的使用率该怎么办呢?
|
|
|
|
|
|
|
|
适当让出cpu
|
|
|
|
只有小组成员才能发言,加入小组>>
785 浏览 0 评论
1151 浏览 1 评论
2527 浏览 5 评论
2859 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2709 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1068浏览 3评论
190浏览 2评论
455浏览 2评论
368浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
453浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 00:07 , Processed in 1.086803 second(s), Total 86, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号