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.

[参考译文] 编译器/RM48L730:问题:gcc 项目中的 F021闪存 API

Guru**** 2387080 points
Other Parts Discussed in Thread: RM48L730
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/646918/compiler-rm48l730-issue-f021-flash-api-in-gcc-project

器件型号:RM48L730

工具/软件:TI C/C++编译器

您好!

我在使用 arm-gcc-eabi 编译的 RM48L730项目中使用 F021闪存 API。

当我反汇编项目时、库函数中的某些指令未定义。

示例: Fapi_issueExamplesCommandWithAddress 函数

反汇编.text 段:fapi_issue19nCommandWithAddress: 

08001f08 8001f08
: b538 按{R3、R4、R5、LR}
8001f0a: 4605 MOV R5、r0
8001f0c: 460 c MOV R4、R1
8001f0e: 2d06 CMP R5、#6
8001f10: D005 beq.n 8001f1e 
8001f12: 2d08 CMP R5、#8
8001f14: D003 beq.n 8001f1e 
8001f16: 2d0e CMP R5、#14
8001f18: bf18. 它 NE
8001f1a: 2005年 movne r0、#5
8001f1c: D108 BNE.n 8001f30 
8001f1e: 2010年 MOV r0、#16
8001f20: f7ff faee BL 8001500 <_Fapi_issueFsmCommand>
8001f24: 4803. LDR R0、[PC、#12];(8001f34 )
8001f26: 6004. 结构 R4、[r0、#0]
8001f28: 4628 MOV R0、R5
8001f2a: f7ff fae9. BL 8001500 <_Fapi_issueFsmCommand>
8001f2e: 2000年 MOV r0、#0
8001f30: bd38 弹出 {R3、R4、R5、PC}
8001f32: 46c0 NOP ;(mov R8、R8)
 8001f34: FFF87110 ; 说明:0xFF87110 ;它生成预取的异常
8001f38: 00003241 andeq R3、r0、r1、ASR #4

使用 code studio composer (armdis 工具),它提供以下组件:

8001f08: Fapi_issueODE19 CommandWithAddress:
8001f08: Thumb
8001f08:38B5 按 {R3、R4、R5、LR}
8001f0a:0546 MOV R5、R0
8001f0c:0C46 MOV R4、R1
8001f0e:062D CMP R5、#6
8001f10:05D0 BEQ 0x08001F1E
8001f12:082D CMP R5、#8
8001f14:03D0 BEQ 0x08001F1E
8001f16:0E2D CMP R5、#14
8001f18:18BF 它 NE
8001f1a:0520 MOVNE R0、#5
8001f1c:08D1 BNE 0x08001F30
8001f1e: $C$L1:
8001f1e:1020 MOV R0、#16
8001f20:FFF7EEFA BL 0x08001500
8001f24:0348 LDR R0、$C$CON1 [0x8001f34]
8001f26:0460 结构 R4、[R0]
8001f28:2846 MOV R0、R5
8001f2a:FFF7E9FA BL 0x08001500
8001f2e:0020 MOV R0、#0
8001f30: $C$L2:
8001f30:38BD 弹出 {R3、R4、R5、PC}
8001f32:C046 MOV R8、R8
8001f34: $d: ;
8001f34以上未定义指令的等效行: $C$CON1:
8001f34:1071 0.half0x7110
8001f36:F8FF 0.half0xFFF8
8001f38: D:
8001f38:4132 0.half0x3241
8001f3a:0000 0.half0x0000
8001f3c:0054 0.half0x5400
8001f3e:4900 0.half0x0049 


如何解决此问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ratid、

    您看到的区别在于 CCS 工具识别信息是 GCC 工具显示为指令的数据。 如果您的问题是 GCC 工具的错误表示、那么我怀疑解决问题的正确方法是与 GCC 社区联系、因为 TI 不直接支持这些工具。 如果执行有问题、并且代码无法根据需要工作。

    此外、我不知道您打算使用反汇编代码、 但是、请注意许可协议中概述的使用限制、并注意使用许可库源以外的源代码对 Hercules 器件进行编程可能会使器件的保修失效。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好、Chuck、

    感谢您的回复!

    是否有为 GCC 工具编译的任何版本? 还是我们有义务使用 CCS?

    请放心、我正在按原样使用库、但当我获得预取中止异常时、我调试了汇编代码以查找导致该异常的原因。

    我对所有建议保持开放态度! 谢谢、

    此致、
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ratid、

    使用汇编/反汇编进行调试没有问题、但 GCC 反汇编似乎存在一些符号的问题、并且错误地标识了指令的数据。

    有关 GCC 与 CCS 的编译。 F021闪存 API 编译为与 EABI 兼容。 这是 ARM 二进制文件的标准。 在您的初始帖子中、您提到您正在使用符合 EABI 的 GCC 编译器进行编译? 如果是这样、只需在目标代码/二进制文件中进行链接、编译器就没有关系。 这也可能是目标文件中包含的符号的一些问题、这些符号可能会在 GCC 工具中抛出一些曲线。

    要调试预取中止异常、请查看 CP15错误状态寄存器、该寄存器应包含有关违规地址的信息。