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.
工具/软件:Code Composer Studio
大家好、
我正在使用 ti RTOS 2.16.1.14和 xDC 工具 v 3.32和 tm4c129encpdt 微控制器。
之前我使用的是 CCS6、现在我使用的是 CCS9.1
在此 CCS9.1中,当我开始调试时,程序会进入 abort()函数,从而给出一些例外,即:
错误:E_noIsr:ID = 88、PC = 00044ec4
FSR = 0x0000
HFSR = 0x40000000
DFSR = 0x00000000
MMAR = 0xe000ed34
BFAR = 0xe000ed38
AFSR = 0x00000000
正在终止执行...
当我检查 ROV>Hwi>Exception 并复制 SP、PC、ir 的值并将这些值放入 Registers > Core Registers > SP、PC、ir
我在这里的调试窗口中看到这是当前状态-
;===== TI_SYSBIOS_family_ARM_m3/Hwi_initStacks__E ===
;设置双堆栈
;仅在启用了任务处理时才调用
;否则,MSP =唯一的堆栈。
;MSP =处理程序(ISR 堆栈)
; PSP =线程(任务堆栈)
;
TI_SYSBIOS_family_ARM_m3/Hwi_initStacks__E:
asmfunc
按{LR}
R2夫人,xpsr
TST R2,#0xff;检查我们是否处于处理程序模式
Baq 1美元
;
;如果 CPU 在启动程序之前没有被复位,则在这里
;和最后一个
;程序在处理程序模式下停止。
;必须先解除处理程序模式
;配置控制寄存器
;
MOV R2、sp
Sub R2,#(8*4);为虚拟堆栈框腾出空间
MSR PSP、R2;更新 PSP
mvn lr、#2
STR r0、[R2、#0];在 ISR 堆栈上保存通过的 R0
MOV R1、#0x01000000;虚拟 xPSR、T 位被置位
STR R1、[R2、#28]
LDR R1、1美元地址
STR R1、[R2、#24];将 PC 退回到下面的$1
BX LR;从 ISR“返回”
1美元
弹出{LR} ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 调试显示了这一点。
MOV R1、sp
MSR PSP、R1;PSP =任务堆栈
MSR MSP、r0;MSP = isrStack
MOV r0、#2
R1女士、CONTROL
MSR control,r0;立即拆分堆栈。
.if __TI_VFP_support__
LDR r0、fpccr;清除 APSEN 和 LSPEN
LDR R1,[r0];获取当前 fpccr
BIC R1、R1、#0xC0000000;清除高2位
STR R1,[R0];手动保存/恢复
.endif
BX LR;在 PSP 上返回
1美元地址
word 1美元
因此、基本而言 、ti_sysbios_family_arm_m3/hwi_initStacks__E 正在抛出错误。 我是对的吗?
这是什么意思? 每次我的代码到达那里。 在 CCS6中没有发生任何类似的情况。 但为什么在 CCS9.1中呢? CCS6和 CCS9.1有哪些变化?
Vince Todd 帮我解决这个问题。
谢谢
Akhilesh、
您使用的是什么编译器? 您能否尝试使用您在旧版 CCS 中使用的相同版本或 TI-RTOS 发行说明中建议使用的版本。
Todd
Todd、
使用 ccs9.1、编译器版本18.xx 可用。 我将使用此编译器版本。 在 ccs6中、我不记得太多、但编译器版本是5.6 (如果我不是错、也会检查)。
这与编译器版本有关吗? 我还将检查"推荐"。
还有一件事、我的复位矢量从0x10000开始。 我已经在配置文件中设置了它。 因为我还有引导加载程序。 当我使用 Uniflash、地址0处的引导加载程序和地址0x10000处的 program.bin 烧录这两种代码时、我会同时使用这两种方法。 但在调试模式下、代码从哪个地址刷写?
Akhilesh、
应用程序在较旧的 CCS 设置下是否正常工作? 如果是、我希望与较新的编译器不兼容。 我知道这方面有一些问题。
Todd
[引用用户="Akhilesh Gangwar "]
还有一件事、我的复位矢量从0x10000开始。 我已经在配置文件中设置了它。 因为我还有引导加载程序。 当我使用 Uniflash、地址0处的引导加载程序和地址0x10000处的 program.bin 烧录这两种代码时、我会同时使用这两种方法。 但在调试模式下、代码从哪个地址刷写?
[/报价]
Todd、您想对此发表评论吗? 这是否与误差有关?
并且、
是、Todd、
应用程序运行完全正常。 我们以前没有遇到过这样的问题。 这仅在 CCS9.1和 CCS9.2中发生。
CCS6和9这两个版本都有哪些更改?
在 CCS 中、您将以相同的方式刷写代码。
您是否使用了旧版编译器?
Todd、
较旧的编译器意味着较旧的 CCS? 是的、工作正常。
您好!
我试过这个。 我遇到了同样的问题、但我的同事不再遇到这种例外情况。 我构建了 ti RTOS。 它会产生什么影响吗?
[引用 user="Akhilesh Gangwar "]我构建了 ti rtos
您能解释一下这是什么意思吗? 您是否在单独的项目中拥有内核? 如果是、您需要使用旧版编译器重新编译它。
Todd
我有单独的 TI RTOS、而不是单独的项目。 我在使用 CCS9.1时使用用户指南中提供的方法重新编译该代码。 我将尝试在使用旧编译器时进行重建、并将告知您。
谢谢
您好 Todd、
我尝试使用旧编译器5.2.5重新编译 RTOS、使用这个-
..\xdctools_3_32_00_06_core\gmake.exe -f tirtos.mak all
我收到该错误-
C:\ti_tirtos_tivac_2_16_01_14>..\xdctools_3_32_00_06_core\gmake.exe -f .\tirtos.mak all
正在生成 BIOS...
gmake[1]:输入目录`c:/ti/tirtos_tivac_2_16_01_14/products/bios_6_45_02_31
正在构建 BIOS 软件包...
C:\ti\xdctools_3_32_00_06_core\bin\stderr.exe:无法执行'echo "making"".interfaces:"因为:""无效""argain""c:\ti\xdctools_3_32_00_06_core\bin\stderr.exe:"不能执行"1-out"('status"")"1" '(退出状态=-1)、因为参数无效
xdctools_3_32_00_06_core\gmake.exe:***[_startime]错误255
gmaking[1]:***[全部]错误2.
gmake[1]:离开目录`c:/ti/tirtos_tivac_2_16_01_14/products/bios_6_45_02_31
gmake:***[BIOS]错误2.
已在 make 文件中指定了路径。 这到底是什么误差?
谢谢
Akhilesh、
您不必重建 TI-RTOS 产品。 它是使用经过验证的版本创建的原始版本。 在重建应用程序时只需要较旧的编译器。 如果.cfg 是工程的一部分、则会重新编译必要的内核源文件。
您说它是为同事工作的。 您能否比较两种设置之间的构建输出? 清洁并在上面进行构建。 将构建输出复制到文件并执行 BeyondCompare (或您最喜欢的 DIFF 工具)、然后查看差异。
Todd
您好 Todd、
我将在他回来后进行比较。 我在使用 ccs9.2和编译器版本18.xxx 时重建了 ti RTOS。 现在、我将编译器版本更改为5.2.5。 我将向您提供有关此内容的最新信息。
谢谢
您好 Todd、
我对文件系统 API 进行了一些更改、这就是我不得不重建 TI RTOS 组件的原因。 我必须再次对其进行重块化、并且我收到此错误。
C:\ti_tirtos_tivac_2_16_01_14>..\xdctools_3_32_00_06_core\gmake.exe -f .\tirtos.mak 所有 构建 BIOS 的内容... gmake[1]:进入目录`c:/ti/tirtos_tivac_2_16_01_14/products/bios_6_45_02_31 构建 BIOS 程序包... C:\ti\xdctools_3_32_00_06_core\bin\stderr.exe:无法执行'echo "making"".interfaces:"因为:""无效""argain""c:\ti\xdctools_3_32_00_06_core\bin\stderr.exe:"不能执行"1-out"('status"")"1" '(退出状态=-1)是因为:无效参数 xdctools_3_32_00_06_core\gmake.exe:***[_startime]错误255 gmake[1]:***[All]错误2 gmake[1]:正在离开目录`c:/ti/tirtos_tivac_2_16_01_14/products/bios_6_45_02_31 gmake:***[BIOS]错误2
所有路径都正确。 以前、我在构建时未遇到此错误。 可以帮助我解决这个问题吗?
谢谢
Akhilesh
Ahkilesh、
您的路径中是否有另一个外壳? 众所周知、这会使使用 TI-RTOS 的命令行构建混乱。 您能否从命令提示符中执行"回显%path%"并查看您是否有其他路径。
Todd
您好 Todd、
这就是结果
C:\ti_tirtos_tivac_2_16_01_14>回波%path%
C:\Program Files (x86)\CodeBlocks\MinGw\bin;C:\Program Files\Git\cmd;C:\ti\xdctools_3_32_00_06_core;"C:\Program Files (x86)\CodeBlocks\MinGwm\bin;C:\windows\System32\WBEM
我 自己添加了这个 C:\ti\xdctools_3_32_00_06_core、只是为了检查某项功能是否正常。 它也在没有这个的情况下抛出了相同的错误。
你指的是任何其他外壳? 我只是在 Windows 10上使用命令提示符。
谢谢
Akhilesh
您是否可以作为实验移除 MinGW?
Todd、
我删除了它、它工作正常。 非常感谢。 可能发生了一些编译器问题。 您能解释一下这里发生了什么吗?
Todd、我还需要1个帮助。 您能否回答此帖子? https://e2e.ti.com/support/tools/ccs/f/81/t/868177
谢谢
Akhilesh
用于 TI-RTOS 配置的 MinGW 和 XDCtools 都自带版本的 Cygwin。 当这些版本不同时、可能会出现各种问题。 我之前没有看到过您看到的错误、因此我不确定该用例的确切机制、 但在其他一些用例中、将加载 Cygwin DLL 的两个不同版本、并且它们会破坏 Cygwin 为在不同进程之间共享而保留的资源、 或者、使用一个版本的 Cygwin 构建的可执行文件会调用 一个 API、该 API 在路径上的 DLL 版本中不可用。