原因: 包含在TASK_CONTEX 对象中的 ARCH_CONTEX 长度32字节,需要从任务上下文中移除,使用指针处理。需要为ARCH_CONTEXT单独分配空间。
解决方案:为节省空间,STM32中ARCH_CONTEXT结构体不单独分配空间,改为去掉 STACK_DESCRIPTOR 结构中的 stackhandle 将堆栈POOL ID与 StackCapacity 使用位域合并到一个DWORD中:
修改前:
struct tagSTACK_DESCRIPTOR{SIZE_T StackCapacity; /* 堆栈容量 */LPVOID lpStackBuffer; /* 堆栈指针 */LPVOID lpStackPosition; /* 栈顶指针 */
#if (FALSE == CONFIG_DYNAMIC_STACK_ENABLE)HANDLE StackHandle;
#elseDWORD Reserved;
#endif
};
修改后
struct tagSTACK_DESCRIPTOR{union{struct{SIZE_T StackCapacity:22; /* 堆栈容量 */HANDLE StackContainerID:OBJECT_PID_BITS; /* */}Bits;DWORD Attribute;}un;LPVOID lpStackBuffer; /* 堆栈指针 */LPVOID lpStackPosition; /* 栈顶指针 */
};