uCOS-II为什么任务都不运行啊?新手请指教!

luojie_fighting 2017-04-17 05:13:48
#define TASK_INIT_ID 11
#define TASK_INIT_PRIO TASK_INIT_ID
#define TASK_INIT_STACK_SIZE 512
OS_STK TASK_INIT_STACK[TASK_INIT_STACK_SIZE];
void TaskInit(void *pdata);


#define TASK_BUS_TEST_ID 12
#define TASK_BUS_TEST_PRIO TASK_BUS_TEST_ID
#define TASK_BUS_TEST_STACK_SIZE 512
OS_STK TASK_BUS_TEST_STACK[TASK_BUS_TEST_STACK_SIZE];
void TaskBusTest(void *pdata);

#define TASK_LED_ID 14
#define TASK_LED_PRIO TASK_LED_ID
#define TASK_LED_STACK_SIZE 512
OS_STK TASK_LED_STACK[TASK_LED_STACK_SIZE];
void TaskLed(void *pdata);

#define TASK_TEST_ID 13
#define TASK_TEST_PRIO TASK_TEST_ID
#define TASK_TEST_STACK_SIZE 512
OS_STK TASK_TEST_STACK[TASK_TEST_STACK_SIZE];
void TaskTest(void *pdata);

int main (void)
{
OSInit();

// taskcon = OSSemCreate(1);

OSTaskCreateExt(TaskInit,
(void *)0,
&TASK_INIT_STACK[TASK_INIT_STACK_SIZE - 1],
TASK_INIT_PRIO,
TASK_INIT_ID,
&TASK_INIT_STACK[0],
TASK_INIT_STACK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
OSStart();


return 0;
}

void TaskInit(void *pdata)
{
TargetInit();
RTCInit();
I2CMasterInit(50000, 8);
iButtonInit(0, 4, 17); // P4.17
BusInit();

iButtonTest();

/*OSTaskCreateExt(TaskBusTest,
(void *)0,
&TASK_BUS_TEST_STACK[TASK_BUS_TEST_STACK_SIZE - 1],
TASK_BUS_TEST_PRIO,
TASK_BUS_TEST_ID,
&TASK_BUS_TEST_STACK[0],
TASK_BUS_TEST_STACK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);*/
OSTaskCreateExt(TaskLed,
(void *)0,
&TASK_LED_STACK[TASK_LED_STACK_SIZE - 1],
TASK_LED_PRIO,
TASK_LED_ID,
&TASK_LED_STACK[0],
TASK_LED_STACK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
OSTaskCreateExt(TaskTest,
(void *)0,
&TASK_TEST_STACK[TASK_TEST_STACK_SIZE - 1],
TASK_TEST_PRIO,
TASK_TEST_ID,
&TASK_TEST_STACK[0],
TASK_TEST_STACK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);

OSTaskDel(OS_PRIO_SELF);
}

void TaskLed (void *pdata)
{
INT8U err;

SetPINSEL(3, 31, 0); // Set P3.31 func 0 (GPIO)
LPC_FIO->FIO[3].DIR |= (1UL << 31);
while (1) {

// OSSemPend(taskcon,0,&err);

// UARTSendByte((INT8U)TASK_LED_ID);

LPC_FIO->FIO[3].SET = (1UL << 31);
OSTimeDly(OSmsToTick(500));
LPC_FIO->FIO[3].CLR = (1UL << 31);
OSTimeDly(OSmsToTick(500));

// OSSemPost(taskcon); //
}
}

void TaskTest (void *pdata)
{
INT8U err;
while (1) {
OSTimeDly(OSmsToTick(1000UL));
// OSSemPend(taskcon,0,&err);
// UARTSendByte((INT8U)TASK_TEST_ID);
// OSSemPost(taskcon);
}
}

gipo设置都没问题,呼吸灯都不亮。
...全文
1211 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhujinqiang 2017-05-05
  • 打赏
  • 举报
回复

while (1) {
OSTimeDly(OSmsToTick(1000UL));
//     OSSemPend(taskcon,0,&err);
//   UARTSendByte((INT8U)TASK_TEST_ID);
//   OSSemPost(taskcon);
}
任务里面就一直死循环,都不退出啊?
juhuanwen 2017-04-27
  • 打赏
  • 举报
回复
OSTimeDly(OSmsToTick(500));OSTimeDly(OSmsToTick(1000UL)); 延时是否失效,把延时调大,或者直接换个延时函数看下。 另外在TaskInit函数里面可以加入进入临界区和退出临界区以及挂起起始任务的三个操作例子如下: OS_ENTER_CRITICAL(); //进入临界区(无法被中断打断) OSTaskCreate(adc1_task,(void *)0,(OS_STK*)&ADC1_TASK_STK[ADC1_STK_SIZE-1],ADC1_TASK_PRIO); OSTaskCreate(net_task,(void *)0,(OS_STK*)&NET_TASK_STK[NET_STK_SIZE-1],NET_TASK_PRIO); OSTaskCreate(move_task,(void *)0,(OS_STK*)&MOVE_TASK_STK[MOVE_STK_SIZE-1],MOVE_TASK_PRIO); OSTaskSuspend(START_TASK_PRIO); //挂起起始任务. OS_EXIT_CRITICAL();
uid123 2017-04-17
  • 打赏
  • 举报
回复
编译器报错了没??怎么没看见你调用的头函数??

27,520

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧