定位 Pool ID 问题过程中增加INFOR级别调试信息无输出。
【定位过程】
系统启动时INFOR级别调试信息输出正常,系统首个任务开始运行后INFOR级别调试信息不能输出。单步跟踪发现调试开关的MASK值发生改变,继续跟踪调试发现BOOT任务堆栈初始化后调试开关MASK值被覆盖为0x004b5453(与昨天所遇问题一致)。
【问题原因】
为BOOT任务分配内核栈时调用函数 CORE_GetCoreStackButtom 返回为栈底地址(堆栈与系统全局变量地址发生重叠),即堆栈被全局变量覆盖或全局变量被堆栈覆盖,其结果不可预期。
备注:开发日志 2015.07.01-初始化BOOT堆栈卡死 中描述的第二个问题原因错误。
【解决方案】
CORE_GetCoreStackButtom 函数更名为 CORE_GetCoreStackBuffer,返回内核堆栈首指针,增加 CORE_GetCoreStackLength 函数,返回64位对齐后的内核堆栈长度。
STATIC RW_DATA CHAR g_SystemCoreStack[CONFIG_CORE_STACK_SIZE];
PUBLIC LPVOID CORE_GetCoreStackBuffer(VOID)
{
return g_SystemCoreStack;
}
PUBLIC SIZE_T CORE_GetCoreStackLength(VOID)
{
SIZE_T Adjust = ((DWORD)g_SystemCoreStack % sizeof(U64));
return Adjust ? (CONFIG_CORE_STACK_SIZE - Adjust) : CONFIG_CORE_STACK_SIZE;
}
【上库记录】
http://code.taobao.org/svn/fans-rt/trunk
Reversion:28
Modified : /trunk/projects/stm32-lite/JLinkLog.txt
Modified : /trunk/projects/stm32-lite/stm32-lite.uvgui.Administrator
Modified : /trunk/projects/stm32-lite/stm32-lite.uvgui_Administrator.bak
Modified : /trunk/projects/stm32-lite/stm32-lite.uvopt
Modified : /trunk/projects/stm32-lite/stm32-lite_stm32-lite.dep
Modified : /trunk/projects/stm32-lite/stm32-lite_uvopt.bak
Modified : /trunk/source/include/fadefs.h
Modified : /trunk/source/platform/board/kbcom_stack.c
Modified : /trunk/source/platform/board/stm32/lite/armcc/stm32-lite.sct
Modified : /trunk/source/platform/board/stm32/lite/config.h
Modified : /trunk/source/platform/board/stm32/lite/kblite_stack.c
Modified : /trunk/source/platform/boar