完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
这学期学实时操作系统,就是用UCOSII,实验要求是写一个程序,程序要求是10个一样的TASK,也就是用TaskStk[N_TASKS][TASK_STK_SIZE]; 要做出一个有点像进度条那样的感觉的一个程序。 如图,就是输出空格,一开始前景色为白色,比如说到了40个,再返回前景色变黑色。(我也不清楚这个效果要怎么描述)
我自己的程序如下,但是始终是有问题的。 N_TASKS设为10,Creat的时候使用for语句,然后把对应的i传递去 TASK(void)函数。在TASK(void)输出一个十行空格。 按照老师的要求,应该每一行的速度都是不一样的。 我现在的问题是 0,1,2,3,9行是有这个效果的,但是中间的几行是不行的速度一样。 我自己试过在OSTaskCreate(Task**** 前面加入一个sprint查看TaskData是否赋值成功,从3开始往后,运行出来屏幕上显示PC_DispStr no signal的字样。 请问各位大神,这是为什么。如果说是赋值原因,为什么只有中间一段是不行。 #include "includes.h" #define UBYTE INT8U #define TASK_STK_SIZE 512 #define N_TASKS 6 UBYTE TaskData[N_TASKS]; OS_STK TaskStk[N_TASKS][TASK_STK_SIZE]; OS_STK TaskStartStk[TASK_STK_SIZE]; void Task(void *data); void TaskStart(void *data); int main(void){ PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK); OSInit(); OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0); OSStart(); return 0; } void TaskStart (void *pdata) { INT16S key; UBYTE i; char s[100]; pdata = pdata; OSStatinit(); for (i = 0; i < N_TASKS; i++) { TaskData = i; OSTaskCreate(Task, (void *)&TaskData, (void *)&TaskStk[TASK_STK_SIZE - 1], i + 2); } PC_DispStr( 0, 22, "#Tasks : xxxxx CPU Usage: xxx %", DISP_FGND_WHITE + DISP_BGND_BLACK); PC_DispStr( 0, 23, "#Task switch/sec: xxxxx", DISP_FGND_WHITE + DISP_BGND_BLACK); PC_DispStr(28, 24, "<-PRESS 'ESC' TO QUIT->", DISP_FGND_WHITE + DISP_BGND_BLACK); for (;;) { sprintf(s, "%5d", OSTaskCtr); /* Display #tasks running */ PC_DispStr(18, 22, s, DISP_FGND_BLUE + DISP_BGND_CYAN); sprintf(s, "%3d", OSCPUUsage); /* Display CPU usage in % */ PC_DispStr(36, 22, s, DISP_FGND_BLUE + DISP_BGND_CYAN); sprintf(s, "%5d", OSCtxSwCtr); /* Display #context switches per second */ PC_DispStr(18, 23, s, DISP_FGND_BLUE + DISP_BGND_CYAN); OSCtxSwCtr = 0; sprintf(s, "V%3.2f", (float)OSVersion() * 0.01); /* Display version number as Vx.yy */ PC_DispStr(75, 24, s, DISP_FGND_YELLOW + DISP_BGND_BLUE); PC_GetDateTime(s); /* Get and display date and time */ PC_DispStr(0, 24, s, DISP_FGND_BLUE + DISP_BGND_CYAN); if (PC_GetKey(&key) == TRUE) { if (key == 0x1B) { exit(0); } } OSCtxSwCtr = 0; OSTimeDlyHMSM(0, 0, 1, 0); } } void Task (void *data) { UBYTE i; char s[100]; data=data; for(;;){ sprintf(s, "%d" , *(int *)data); PC_DispStr(14 ,5, s , DISP_FGND_WHITE + DISP_BGND_BLACK); for(i=6; i<40 ;i++) { PC_DispStr(i , 6 + (*(int *)data ), " ", DISP_BGND_WHITE ); OSTimeDlyHMSM(0, 0,0,50); } for(i=40; i>5 ;i--) { PC_DispStr(i, 6+ (*(int *)data) , " ", DISP_BGND_BLACK ); OSTimeDlyHMSM(0, 0,0,50 ); } OSTimeDlyHMSM(0, 0,0,100+ (*(int *)data) ); } } |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
UCOSII中断中添加OSSemPost(Sem);程序无法运行
5262 浏览 1 评论
在BC5.0上编译uC/OS-II出现"eeror writing object file",怎样处理???
3468 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 16:18 , Processed in 1.123729 second(s), Total 72, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1238