|
本帖最后由 lw3968 于 2014-9-25 21:08 编辑
最近学习ucos,在书上的代码上稍微做了一下改变,没有出现多任务的情况(疑惑):
代码结构如下:
- <font size="5">/*******声明mytask,youtask两个任务*****/
- int lock = 0; //全局变量 锁
- /****main********/
- int main()
- {
- ...
- ...
- OSTaskCreate(mytask, 0, &mytask_stk[STK_SIZE - 1], 0); //mytask的优先级别为0
- OSStart();
- }
- </font>
复制代码- <font size="5">/*******************任务mytask**********************************/
- void mytask (void *pdata)
- {
- #if OS_CRITICAL_METHOD == 3
- OS_CPU_SR cpu_sr;
- #endif
- pdata = pdata;
- OS_ENTER_CRITICAL( );
- PC_VectSet(0x08, OSTickISR); //安装时钟中断向量
- PC_SetTickRate(OS_TICKS_PER_SEC); //设置时钟频率
- OS_EXIT_CRITICAL( );
- OSStatInit( ); //初始化统计任务
- OSTaskCreate(
- youtask, //创建任务MyTask
- 0, //给任务传递参数
- &YouTaskStk[STK_SIZE - 1], //设置任务堆栈栈顶指针
- 0 //youtask的优先级别为2
- );
- for (;;)
- {
- if (!lock) {
- lock = 1; //资源加锁
- printf("my task\n"); //执行的打印任务
- lock = 0; //资源解锁
- }
- sleep(1); //阻塞1S
- }
- *******************任务youask**********************************/
- void youtask (void *pdata)
- {
- #if OS_CRITICAL_METHOD == 3
- OS_CPU_SR cpu_sr;
- #endif
- pdata = pdata;
- for (;;)
- {
- if (!lock) {
- lock = 1; //资源加锁
- printf("Your task\n"); //执行的打印任务
- lock = 0; //资源解锁
- }
- sleep(1); //阻塞1S
- } //for
- }</font>
复制代码
运行的结果只打印: mytask
本意是想按照任务的优先级来打印
my task
your task
my task
your task
...
...
没搞明白为啥只有一个任务执行了,而不是两个通过调度器来完成多任务?
|
|