原因: 包含在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;
#else
DWORD Reserved;
#endif
};
修改后
struct tagSTACK_DESCRIPTOR{
union{
struct{
SIZE_T StackCapacity:22; /* 堆栈容量 */
HANDLE StackContainerID:OBJECT_PID_BITS; /* */
}Bits;
DWORD Attribute;
}un;
LPVOID lpStackBuffer; /* 堆栈指针 */
LPVOID lpStackPosition; /* 栈顶指针 */
};