移植ucos-iii,单个任务可以跑起来,但是创建两个任务后,两个任务无法进行调度,具体代码如下:
#define CAN1_TIMEOUT_PRIO 5
#define CAN1_TIMEOUT_STK_SIZE 2048
static OS_TCB CAN1_TIMEOUT_TCB;
static CPU_STK CAN1_TIMEOUT_Stk[CAN1_TIMEOUT_STK_SIZE];
void Task_CAN1_TimeOut(void *p_arg);
#define CAN1_SEND_PRIO 4
#define CAN1_SEND_STK_SIZE 2048
static OS_TCB CAN1_SEND_TCB;
static CPU_STK CAN1_SEND_Stk[CAN1_SEND_STK_SIZE];
void Task_CAN1_SEND(void *p_arg);
void Task_StartUp(void *p_arg)
{
OS_ERR err;
(void)p_arg;
OSTaskCreate((OS_TCB *)&CAN1_SEND_TCB,
(CPU_CHAR *)"CAN1_SEND",
(OS_TASK_PTR )Task_CAN1_SEND,
(void *)0,
(OS_PRIO )CAN1_SEND_PRIO,
(CPU_STK *)&CAN1_SEND_Stk[0],
(CPU_STK_SIZE )50,
(CPU_STK_SIZE )CAN1_SEND_STK_SIZE,
(OS_MSG_QTY )0,
(OS_TICK )0,
(void *)0,
(OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
(OS_ERR *)&err);
OSTaskCreate((OS_TCB *)&CAN1_TIMEOUT_TCB,
(CPU_CHAR *)"CAN1_TIMEOUT",
(OS_TASK_PTR )Task_CAN1_TimeOut,
(void *)0,
(OS_PRIO )CAN1_TIMEOUT_PRIO,
(CPU_STK *)&CAN1_TIMEOUT_Stk[CAN1_TIMEOUT_STK_SIZE],
(CPU_STK_SIZE )50,
(CPU_STK_SIZE )CAN1_TIMEOUT_STK_SIZE,
(OS_MSG_QTY )0,
(OS_TICK )0,
(void *)0,
(OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
(OS_ERR *)&err);
OSTaskDel(&STARTUP_TCB, &err);
}
main函数中创建Task_StartUp()这个任务,在Task_StartUp()这个任务中再创建上面两个任务,两个子任务的代码如下:
void Task_CAN1_TimeOut(void *p_arg)
{
OS_ERR err;
(void)p_arg;
while (1)
{
CAN1_WriteData(CEMData, 8, CEMID);
OSTimeDlyHMSM(0,0,0,500,OS_OPT_TIME_HMSM_STRICT,&err);
}
}
void Task_CAN1_SEND(void *p_arg)
{
OS_ERR err;
(void)p_arg;
while (1)
{
CAN1_WriteData(CHMData, 8, CHMID);
OSTimeDlyHMSM(0,0,0,250,OS_OPT_TIME_HMSM_STRICT,&err);
}
}
目的是想让Task_CAN1_SEND()这个任务每隔250ms发送一次,Task_CAN1_TimeOut每隔500ms发送一次,
kei环境下j-link调试,发现程序死在HardFault_Handler(),该怎么解决?