2015.07.02-INFOR级别调试信息在任务管理器启动后不能输出

博客内容介绍了对STM32平台的内核堆栈管理进行了优化,包括将 CORE_GetCoreStackButtom 函数重命名为 CORE_GetCoreStackBuffer,新增 CORE_GetCoreStackLength 函数以获取64位对齐后的内核堆栈长度。同时,系统任务管理与堆栈管理实现了分离,并且经过优化的代码已成功运行。
摘要由CSDN通过智能技术生成
【问题现象】
定位 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值