初中生
最后登录1970-1-1
在线时间 小时
注册时间2022-3-17
|
参照教程ucos任务的定义和切换,新建工程,然后将相应的库文件拷贝,编写的程序,代码基本一致,ucos任务创建后,进行在线调试,任务函数task有问题,不执行for循环里面的第一和第二条语句,直接执行第三条,然后又跳过delay延时函数,如图片所示;将自己编写的app代码拷贝到教程的工程文件中,可以正常执行,完全没有问题,不知道怎么回事
图片为断电调试的情况
代码如下:
#include "os.h"
#include "ARMCM3.h"
uint32_t Flag1;
uint32_t Flag2;
#define TASK1_STK_SIZE 20
#define TASK2_STK_SIZE 20
static CPU_STK Task1stk[TASK1_STK_SIZE];
static CPU_STK Task2stk[TASK2_STK_SIZE];
static OS_TCB Task1TCB;
static OS_TCB Task2TCB;
void Time_Delay( uint32_t time );
void Task1( void *p_arg );
void Task2( void *p_arg );
void Time_Delay( uint32_t time )
{
for( ; time != 0; time --);
}
void Task1( void *p_arg )
{
for( ;; )
{
Flag1 = 1;
Time_Delay(100);
Flag1 = 0;
Time_Delay(100);
OSSched();
}
}
void Task2( void *p_arg )
{
for( ;; )
{
Flag2 = 1;
Time_Delay(100);
Flag2 = 0;
Time_Delay(100);
OSSched();
}
}
int main(void)
{
OS_ERR err;
OSInit(&err);
OSTaskCreate(&Task1TCB, Task1, 0, &Task1stk[0], TASK1_STK_SIZE, &err);
OSTaskCreate(&Task2TCB, Task2, 0, &Task2stk[0], TASK2_STK_SIZE, &err);
OSRdyList[0].HeadPtr = &Task1TCB;
OSRdyList[1].HeadPtr = &Task2TCB;
OSStart(&err);
}
|
|