3433|3

47

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

ucos简单的多任务,没成功执行 [复制链接]

  本帖最后由 lw3968 于 2014-9-25 21:08 编辑

最近学习ucos,在书上的代码上稍微做了一下改变,没有出现多任务的情况(疑惑):
代码结构如下:
  1. <font size="5">/*******声明mytask,youtask两个任务*****/
  2. int lock = 0;   //全局变量 锁
  3. /****main********/
  4. int main()
  5. {
  6. ...
  7. ...
  8. OSTaskCreate(mytask, 0, &mytask_stk[STK_SIZE - 1], 0);  //mytask的优先级别为0
  9. OSStart();
  10. }
  11. </font>
复制代码
  1. <font size="5">/*******************任务mytask**********************************/

  2. void  mytask (void *pdata)
  3. {
  4. #if OS_CRITICAL_METHOD == 3
  5.     OS_CPU_SR  cpu_sr;
  6. #endif
  7.     pdata = pdata;
  8.     OS_ENTER_CRITICAL( );
  9.     PC_VectSet(0x08, OSTickISR);                //安装时钟中断向量
  10.     PC_SetTickRate(OS_TICKS_PER_SEC);   //设置时钟频率
  11.     OS_EXIT_CRITICAL( );
  12.     OSStatInit( );                                           //初始化统计任务
  13.     OSTaskCreate(
  14.                 youtask,                                    //创建任务MyTask
  15.                 0,                                               //给任务传递参数
  16.                 &YouTaskStk[STK_SIZE - 1],      //设置任务堆栈栈顶指针
  17.                 0                                                //youtask的优先级别为2
  18.                 );                                

  19.     for (;;)
  20.     {
  21. if (!lock) {
  22. lock = 1;                                //资源加锁
  23. printf("my task\n");               //执行的打印任务   
  24. lock = 0;                               //资源解锁
  25. }
  26. sleep(1);                                //阻塞1S
  27. }
  28. *******************任务youask**********************************/
  29. void  youtask (void *pdata)
  30. {
  31. #if OS_CRITICAL_METHOD == 3
  32.     OS_CPU_SR  cpu_sr;
  33. #endif
  34.     pdata = pdata;
  35.     for (;;)
  36.     {
  37. if (!lock) {
  38. lock = 1;                                 //资源加锁
  39. printf("Your task\n");              //执行的打印任务   
  40. lock = 0;                                 //资源解锁
  41. }
  42. sleep(1);                                  //阻塞1S
  43.     }  //for
  44. }</font>
复制代码

  1. <font size="5">                             </font>
复制代码


运行的结果只打印: mytask
本意是想按照任务的优先级来打印
my task
your task
my task
your task
...
...
没搞明白为啥只有一个任务执行了,而不是两个通过调度器来完成多任务?

最新回复

问题解决了就好 :)  详情 回复 发表于 2014-9-26 09:07
点赞 关注
 

回复
举报

47

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
sorry, 问题找到了 sleep不能代替OSTimeDlyHMSM
 
 
 

回复

2万

帖子

71

TA的资源

管理员

板凳
 
问题解决了就好 :)
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身

点评

是的,soso姐  详情 回复 发表于 2014-9-26 20:55
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 

回复

47

帖子

0

TA的资源

一粒金砂(中级)

4
 
soso 发表于 2014-9-26 09:07
问题解决了就好 :)

是的,soso姐
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表