请假关于UCOS_II
CPU Atmega128.
从网上下载了个ucos-ii,移植到cpu后,可以创建任务,但是创建的任务只是执行一次后就进入空闲任务OSTaskIdle();
我是新手,查了资料,创建的代码与书本上的一样。
*********************************************************************************************************
*/
void main (void)
{
SYS_Init();
OSInit();
OSTaskCreate(AppTask1,(void*)0,&Task1Stk[OS_TASK_STK_SIZE-1],1);
OSStart();
}
static void AppTask1(void *p_arg)
{
INT8U err;
p_arg = p_arg;
OSTickISR_Init(); /* Initialize the ticker */定时器0初始化
OSTaskCreate(AppTask2,(void*)0,&Task2Stk[OS_TASK_STK_SIZE-1],2);
SEI();
while (1) {
PORTB = 0x00;
PORTE = 0xFF;
OSTimeDlyHMSM(0,0,1,0);
}
}
static void AppTask2(void *p_arg)
{
INT8U err;
p_arg = p_arg;
while (1) {
PORTE = 0x00;
PORTB = 0xFF;
OSTimeDlyHMSM(0,0,1,0);
}
}
void SYS_Init(void)
{
PORTA = 0xFF;
DDRA = 0xFF;
PORTB = 0x00;
DDRB = 0xFF;
PORTC = 0xDF;
DDRC = 0xDF;
PORTD = 0x38;
DDRD = 0x38;
PORTE = 0x00;
DDRE = 0xFF;
PORTF = 0x00;
DDRF = 0x00;
PORTG = 0x10;
DDRG = 0x10;
}
AppTask1();AppTask2();都只是运行一次后就进入OSTaskIdle()死循环;(在线调试)
请教高手,哪里设置错了。
[解决办法]
是不是优先级的事情啊
[解决办法]
估计是时钟ticks的问题
[解决办法]
定时器中断问题
[解决办法]
lz要理解什么是任务。。。。
任务在RTOS就是线程,就是要一直执行的线程,怎么一直执行,当然就需要死循环啊。
void task(void) {
task_init(); //任务初始化执行一次
while(1)
{
//任务本体是个死循环。。。。
//平时可以处于sleep状态,如果接受到消息或者事件标志则唤醒。。基本是这样。。
}
}
[解决办法]
感觉像是没移植成功
[解决办法]
没有问题,一般运行的时候就是进入空闲任务。
看来uc/os这块的书,内核讲得多,uc/os运行原理将的比较少。
(如果你有两个标志灯的情况下,你建立两个任务让灯的闪烁的频率不一样。这样可以测试一下)
[解决办法]
代码好像没有什么问题
检查一下移植的是否正确
任务没有调度
看看你的OSTickISR中有没有调用OSTimeTick。
或者把你的代码传上来看看。仅看这一点看不到什么问题。
[解决办法]