偊霙的大少爷 2017-03-13 09:26 采纳率: 0%
浏览 3338

ucos-iii+stm32f105 任务调度进入HardFault_Handler

移植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(),该怎么解决?

  • 写回答

1条回答 默认 最新

报告相同问题?

悬赏问题

  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型