This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
尊敬的支持部门:
注意: 下面是我指的产品说明书
我已将微控制器集成到我自己的硬件中。
我的问题是、有时(感觉是随机的)在SysCtlReset()
调用 lib 函数后微控制器不会重新启动。 这样做的困难是不容易重现。
因为它不会一直发生后SysCtlReset()
,让说,它发生了100次中的1次
退出此状态的唯一方法是完全对其下电上电(或使用 RESET 引脚)以使微启动再次开始
有关我的应用程序的一些额外信息
SysCtlReset()
为了找到它"崩溃"的情况,我写了一个测试程序
当我循环这个程序无休止地启动它在某个地方在晚上和第二天早上微崩溃。 因此它发生在该时间段之间的某个地方(在这10秒倒数中的一个)
在10秒倒计时结束后、刚好在 SysCtlReset()
我的程序中设置2项内容之前
SysCtlResetBehaviorSet(SYSCTL_ONRST_WDOG0_POR|SYSCTL_ONRST_WDOG1_POR|SYSCTL_ONRST_BOR_POR|SYSCTL_ONRST_EXT_POR);
我现在很困倦、也许你可以通过回答这2个问题来帮助我进一步改进。
1) 无论我设置的是什么SysCtlResetBehaviorSet()
SysCtlResetBehaviorGet()
、都会始终返回0xFFFFFFFF、无论我是在启动时还是在关机前执行它、甚至是在之前_Get()
。 它仍返回0xFFFFFFFF。 你知道为什么会这样吗? 外设库数据表暗示、这是我可以在没有任何额外条件的情况下配置的东西。 这可能是我做错的某种项目设置吗?
2) 我的10秒倒计时调试信息的输出始终相同(如上所示)、但在发生崩溃情况后、我手动复位(下电上电)时、输出不同
"
ClockGet:0x20C58C0
FlashSectorSizeGet:0x4000
IntStatus:0x00
DeepSleepGet:0x12
LDOSleepGet:0x18
NMiStatus:0x0
PWMClockGet:0x0
BehaviorGet:0xFFFFFFFF
ResetCauseGet:0x2
VoltageEventStatus:0x100
"
我的问题是、您知道VoltageEventStatus()
报告值为0x100的意味着什么吗? 数据表仅讨论以下可能值
//***************************************************************************** // // Values used with the SysCtlVoltageEventStatus() and // SysCtlVoltageEventClear() APIs. // //***************************************************************************** #define SYSCTL_VESTAT_VDDBOR 0x00000040 #define SYSCTL_VESTAT_VDDABOR 0x00000010
尊敬的 Jordi:
[报价用户 id="624133" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1416560/tm4c1294kcpdt-microcontroller-won-t-restart-after-a-sysctlreset "] 1) 无论我设置的是什么SysCtlResetBehaviorSet()
SysCtlResetBehaviorGet()
、都会始终返回0xFFFFFFFF、无论我是在启动时还是在关机前执行它、甚至是在之前_Get()
。 它仍返回0xFFFFFFFF。 你知道为什么会这样吗? 外设库数据表暗示、这是我可以在没有任何额外条件的情况下配置的东西。 这可能是我做错的某种项目设置吗?
SysCtlResetBehaviorGet 只能用于 Flurry 类 MCU。 此函数不适用于 TM4C129。 我建议您使用 HWREG ()直接读出寄存器
我认为此问题与 SYSCTL#23勘误表有关。 请参见下文。 最新的 TivaWare SDK 中提供了此勘误表的修复程序。 但是、TI-RTOS 不使用最新版本、因此错过了完整的勘误表修复、而仅有的部分修复不足以解决勘误表问题。
此修复需要使用实现了 SYSCTL#23权变措施的最新 TivaWare 重新编译 TI-RTOS BIOS 包。 现有的 TI-RTOS 只有一部分尚未完成的权变措施、我认为这就是它仍然失败的原因。 问题在于取决于温度和材料的硬件问题、而不是本身的 TI-RTOS 问题。
首先请参阅 SYS/BIOS 用户指南中的 A.3和 A.4节以了解如何重建库。 我遵循的用户指南版本是 https://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/sysbios/6_53_00_11/exports/bios_6_53_00_11/docs/Bios_User_Guide。pdf。
在您熟悉 SYS/BIOS 重建流程之后、 按照以下步骤重新构建 TI-RTOS 以进行勘误修复。
1.复制一个 BIOS_6_45_01_29副本、作为 COPY-BIOS_6_45_01_29。 请参见下文。
2.修改 copy-BIOS_6_45_01_29下的 BIOS.mak 文件。 唯一 要更改的是第16行和第39行。 根据所使用的编译器版本、路径会略有不同。 请参见下文。
3. 将 C:\ti\tirtos_tivac_2_16_00_08_old2\products\copy-BIOS_6_45_01_29\packages\ti\catalog\arm\cortexm4\tiva\ce\Boot_SysCtl.c 文件替换为附加的 Boot_SysCtl.c 文件、该文件具有针对 SysCtl#23的完整权变措施。
e2e.ti.com/.../Boot_5F00_sysctl.c4。键入‘gmake -f .\bios.mak clean
5.‘"gmake -f .\bios.mak"
6. 重新构建 BIOS 后、在 CCS 中、按如下方式更新库路径。
尊敬的 Charles:
非常感谢您的详细答复。 我现在已经运行了一整周了、它没有崩溃一次。 这就解决了我的问题!
也许你可以用另一个东西指向一个正确的方向、为了测试它、我使用了与原始 BIOS 文件夹相同的目录名。
如果我使用我的 BIOS 文件夹的副本(就像你建议的那样)、然后重建它、我得到一个输出错误、我无法找到原因。
"C:/ti/xdctools_3_32_01_22_core/xs" --xdcpath="C:/ti/tirtos_tivac_2_16_01_14/products/bios_6_45_02_31_custom_sysctlfix;C:/ti/tirtos_tivac_2_16_01_14/packages;C:/ti/tirtos_tivac_2_16_01_14/products/tidrivers_tivac_2_16_01_13/packages;C:/ti/tirtos_tivac_2_16_01_14/products/bios_6_45_02_31_custom_sysctlfix;C:/ti/tirtos_tivac_2_16_01_14/products/ndk_2_25_00_09/packages;C:/ti/tirtos_tivac_2_16_01_14/products/uia_2_00_05_50/packages;C:/ti/tirtos_tivac_2_16_01_14/products/ns_1_11_00_10/packages;C:/ti/ccs1040/ccs/ccs_base;" xdc.tools.configuro -o configPkg -t ti.targets.arm.elf.M4F -p ti.platforms.tiva:TM4C1294NCPDT -r release -c "C:/ti/ccs1040/ccs/tools/compiler/ti-cgt-arm_20.2.5.LTS" --compileOptions "-mv7M4 --code_state=16 --float_support=FPv4SPD16 -me -Ooff --opt_for_speed=0 --include_path=\"C:/Data/Joep\" --include_path=\"C:/Data/Joep/src\" --include_path=\"C:/Data/Joep/3d-party/zwave/include\" --include_path=\"C:/ti/tirtos_tivac_2_16_01_14/products/TivaWare_C_Series-2.1.1.71b\" --include_path=\"C:/ti/tirtos_tivac_2_16_01_14/products/bios_6_45_02_31_custom_sysctlfix/packages/ti/sysbios/posix\" --include_path=\"C:/ti/tirtos_tivac_2_16_01_14/products/ndk_2_25_00_09/packages/ti/ndk/inc/bsd\" --include_path=\"C:/ti/ccs1040/ccs/tools/compiler/ti-cgt-arm_20.2.5.LTS/include\" --define=CONFIG_DEBUG --define=ccs=\"ccs\" --define=PART_TM4C1294NCPDT --define=ccs --define=TIVAWARE -g --gcc --diag_warning=225 --diag_warning=255 --diag_wrap=off --display_error_number --gen_func_subsections=on --abi=eabi " "../gateway2.cfg" subdir_rules.mk:19: recipe for target 'build-2085381327-inproc' failed js: "C:/ti/xdctools_3_32_01_22_core/packages/xdc/tools/Cmdr.xs", line 52: Error: xdc.tools.configuro: Error: Can't find the platform package 'ti.platforms.tiva'. TI platforms are no longer shipped as part of XDCtools (C:\ti\xdctools_3_32_01_22_core). Please ensure you are either using a pre-3.30 version of XDCtools or you have added a product that includes your platform support along the path 'C:/ti/tirtos_tivac_2_16_01_14/products/bios_6_45_02_31_custom_sysctlfix;C:/ti/tirtos_tivac_2_16_01_14/packages;C:/ti/tirtos_tivac_2_16_01_14/products/tidrivers_tivac_2_16_01_13/packages;C:/ti/tirtos_tivac_2_16_01_14/products/ndk_2_25_00_09/packages;C:/ti/tirtos_tivac_2_16_01_14/products/uia_2_00_05_50/packages;C:/ti/tirtos_tivac_2_16_01_14/products/ns_1_11_00_10/packages;C:/ti/ccs1040/ccs/ccs_base;C:\ti\xdctools_3_32_01_22_core/packages'. Check that this path names a directory containing the necessary platform support and that the platform name is properly spelled. gmake[2]: *** [build-2085381327-inproc] Error 1 gmake[1]: *** [build-2085381327] Error 2 gmake[1]: Target 'main-build' not remade because of errors. gmake: *** [all] Error 2 subdir_rules.mk:16: recipe for target 'build-2085381327' failed makefile:410: recipe for target 'all' failed
您是否知道导致这种情况的原因?
我也找到了这个帖子: https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/424833/ccsv6-0-1-error-xdc-tools-configuro-error-can-t-find-the-platform-package-ti-platforms-tiva
这似乎是一个类似的问题、但该建议的解决方案对我的输出没有影响。
如果我使用我的 BIOS 文件夹副本(就像您建议的那样)、然后重新生成它、我将收到一个无法找到原因的输出错误。
[报价]尊敬的 Jordi:
我有点困惑。 您似乎可以按照我列出的步骤操作并重建库。 您的 BIOS 文件夹的这个副本与您成功重建的内容有何不同?
[报价 userid="624133" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1416560/tm4c1294kcpdt-microcontroller-won-t-restart-after-a-sysctlreset/5440871 #5440871"][报价]
- 此外、还将目录添加到
XDCtools 显示3.32.1.22版本。 不确定这是一个问题。 我建议您仅使用3.32.0.6。
尊敬的 Charles:
感谢您的快速回复。 有效的方法是、我不制作当前 BIOS 文件夹的副本、而是保留当前文件夹、并且只替换 Boot_SYSCTL.c 文件中的修复程序、然后重新构建该文件。 如果我然后重建我的项目、我就可以运行测试程序而不会出现任何问题(而且没有崩溃、这就是我所知道的解决方案)。
但出于出错原因、我想创建一个 BIOS 文件夹的副本(在我的示例中名为 BIOS_6_45_02_31_custom_sysctlfix)、然后重新编译它。 但当我这样做时。 我收到我上一篇文章中提到的错误。
为了澄清一点、在编译工程时会收到输出错误(不是编译 BIOS 本身、仍然有效)
所以、在设置中的某个位置、甚至可能有一个硬编码链接、它引用的是原始 BIOS 目录
例如、在 C:\ti\tirtos_tivac_2_16_01_14\tirtos.mak 中
第66行:BIOS_INSTALL_DIR ?=$(TIRTOS_INSTALL_DIR)/products/bios_6_45_02_31
尊敬的 Jordi:
我不确定是否存在构建误差。 我按照 SYS/BIOS 用户指南中 的说明、在名为 copy-BIOS_6_45_01_29的文件夹中重新构建 BIOS。 我知道我使用的 TI-RTOS 和 XDCtools 的版本略低、即3.32.0.06。 您的错误显示"错误:找不到平台软件包" ti.platforms.tiva'。 TI 平台不再作为 XDCtools 的一部分提供(C:\ti\xdctools_3_32_01_22_core)'。 我不知道您的 XDCtools 版本是否是生成错误的原因。 但我想在构建原始 BIOS 目录时使用同样的 XDCtools 版本、对吧?
再次感谢您的答复。
它应该是特定于我的项目的内容。 我会继续调查。
重要的是、我知道它可以修复我的崩溃情况。
尊敬的 Charles:
我现在设法构建了我的项目
我仍不确定是什么原因导致了工程构建问题、但我在工作中所做的降级到 XDC 工具版本3.32.0.06 并更改了顺序(先更新工程设置、然后重新编译 BIOS)
1)制作了一份 BIOS 文件夹的副本
2) 2)使用 code composer 和设置打开工程
C/C++ Build > Build Variables > (select 'Show system variables') > edit
COM_TI_RTSC_TIRTOSTIVAC_REPOS
>选择当前 BIOS/程序包目录并将其更改为 COPY_BIOS/程序包目录
注意:我使用"文件系统"选项来更改目录、但我必须手动更改该目录、因为它在我的项目树中的 Includes 下显示为灰色。 我可能认为这会导致编译问题、但无法100%确定、因为我没有在两者之间编译工程以进行验证
3) 3)按照原始 POST 中的说明继续重建 SYS/BIOS
与您的说明相比、唯一的区别是在 BIOS.mak 中、我反转了目录链接(从 C:\..) 至 C:4.20:../../. 我使用"C:\.."尝试过它 目录周围、但会出现生成错误(比如找不到路径)
再次感谢快速的答复和清晰的指示!
尊敬的 Charles:
很抱歉再次回到这个页面。 我注意到以下情况。 您与补丁共享的 Boot_sysctl.c 为我的项目执行任务。 但是、它与勘误表代码稍有不同:位于此处(https://www.ti.com/lit/er/spmz850g/spmz850g.pdf)。
例如、errata 代码具有一个 bNewPLL 布尔值
它还会在结构初始化程序(数组超过)上提供警告
我知道这是特定于使用系统控制器的 BIOS 部分的、就像我说的那样、您提供的版本可以正常工作。 但这可能会导致错误吗?
尊敬的 Jordi:
我参考最新 TivaWare 2.2.0.295 SYSCTL.c 文件以使用 SysCtlClockFreqSet 函数。