|
请教下,大神最近移植 rtx5 ,任务堆栈使用数组定义的形式工作正常,使用内存管理申请的方式则不行 ?
这是为何呀 ??
a. 任务堆栈使用数组形式定义:
这样形式定义工作完全正常 ok
__ALIGN_8BYTES( os_thread_t AppTaskStartTCB);
__ALIGN_8BYTES( uint64_t AppTaskStartStk[(APP_CFG_TASK_START_STK_SIZE * sizeof(uint32_t))/8]);
static const osThreadAttr_t vTaskStart_Attr = {
.name = "vTaskStart",
.attr_bits = osThreadDetached,
.priority = (osPriority_t)APP_CFG_TASK_START_PRIO,
.stack_size = APP_CFG_TASK_START_STK_SIZE * sizeof(uint32_t),
.stack_mem = (void *)&AppTaskStartStk[0],
.cb_mem = &AppTaskStartTCB,
.cb_size = sizeof(os_thread_t),
};
xHandleTask_Start = osThreadNew(vTaskStart, NULL, &vTaskStart_Attr);
if(xHandleTask_Start != 0) {
__log("vTaskStart creat ok ...\r\n");
}
else {
__log("vTaskStart creat err ...?\r\n");
}
b. 任务堆栈使用内存管理进行申请方式
os_thread_t *AppTaskStartTCB = 0;
uint64_t *AppTaskStartStk = 0;
static osThreadAttr_t vTaskStart_Attr ;
int main(void)
{
....
AppTaskStartTCB = (os_thread_t *)mymalloc(SRAM2, sizeof(os_thread_t));
if(AppTaskStartTCB == NULL)
{
My_Printf("AppTaskStartTCB fail ...\r\n");
while(1) {}
}
AppTaskStartStk = (void *)mymalloc(SRAM2, APP_CFG_TASK_START_STK_SIZE * sizeof(uint32_t));
if(AppTaskStartStk == NULL)
{
My_Printf("AppTaskStartStk fail ...\r\n");
while(1) {}
}
vTaskStart_Attr .name = "vTaskStart";
vTaskStart_Attr .attr_bits = osThreadDetached;
vTaskStart_Attr .priority = (osPriority_t)APP_CFG_TASK_START_PRIO;
vTaskStart_Attr .stack_size = APP_CFG_TASK_START_STK_SIZE * sizeof(uint32_t);
vTaskStart_Attr .stack_mem = (void *)AppTaskStartStk;
vTaskStart_Attr .cb_mem = AppTaskStartTCB,;
vTaskStart_Attr .cb_size = sizeof(os_thread_t);
xHandleTask_Start = osThreadNew(vTaskStart, NULL, &vTaskStart_Attr);
if(xHandleTask_Start != 0) {
__log("vTaskStart creat ok ...\r\n");
}
else {
__log("vTaskStart creat err ...?\r\n"); // 这里就会产生错误 了 哟 ,... ? 难道是 rtx5 不支持这样使用吗 ?
}
}
|
|