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.

[参考译文] TMS320F28335:十六进制指令含义

Guru**** 2554210 points
Other Parts Discussed in Thread: UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1360215/tms320f28335-hex-instructions-meaning

器件型号:TMS320F28335
主题中讨论的其他器件:UNIFLASH

您好!  

我有一个随机问题、似乎取决于我们如何对闪存进行编程。 在任何情况下、我们都可以从扇区 G 编程到 B。但有时、当我们使用定制应用程序对闪存进行编程时、我们会得到与使用 JTAG 和 CCS 编程时得到的行为不同的行为。  

我已经从发生故障的电路板和不发生故障的电路板中导出存储器、并将其与 CCS 反汇编视图进行比较。 我看到 在一个较小的区域中、闪存是不同的。 这些地址总是在扇区 G (0x308000)的请求处。

我看到陷阱指令的差异(检查反汇编)、我想这不会改变应用的行为、但我不明白它们为什么不同。 例如、在一个板中、我看到0035、在另一个板中、我看到0030。 你知道原因吗?

我看到指令的差异也类似如下:

一个板:

004D0061                                         

00790020

另一个电路板:

00530065

00700020

正如 我在反汇编中看到的那样、我知道第一个开发板说明的含义如下:

004D0061   LB 0x0d0061           

00790020   lb 0x390020           

您能告诉我其他电路板说明的含义吗?

任何想法为什么这会发生。  

此致、

Paloma

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

    Paloma、

    我想确保我们查看的是正确的解码、当您列出上述存储器的内容时、是直接从内存浏览器中查看32位数据、还是作为您连接在一起的2个16位值?   

    虽然004D0061的解码为 LB 0x0D0061、如图所示、但地址0x0D0061不是此器件上的有效存储器地址。  L7 SRAM 在0xFFFF 处结束、XINTF6 (外部 SRAM)在0x100000处开始。

    如果您只能保存存储器(如果这更简单、请截取它)在一些不同的位置、我可以确保解码。

    就为什么会存在差异而言、这似乎是意料之外的、可能是由于 CCS (.out)的输出文件如何转换成十六进制文件以便使用定制应用加载时出现了一些问题?   您可以提供有关创建应用程序加载的文件所需步骤的更多详细信息

    在分别加载的存储器保存中、是在不同的位置看到相同的内容、还是只是在不同的存储器内容周期中看到相同的内容?

    如果要附加的副本。 Cmd 文件。我可以看到是否有任何关于如何使用扇区 G 的特殊跳转到我这里。   

    此致!
    Matthew

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

    Matthew、您好!  

    感谢您的 答复。 我希望我们能找到问题所在。

    不含汇编含义的列出内容已使用 Uniflash 存储器浏览器以十六进制格式导出。 其他具有汇编含义的内容 来自反汇编视图:

    我在导出的存储器中仅看到以下推理(从不同板以 Uniflash 十六进制格式导出):

    具有预期内存的电路板:

    :2080000055AA0071574FFFFFDD44FFFF004D00610079002000300020002003000300032D1

    :208010000034002000610074002000310031003A00350031003A003200370000761F039B2F

    带有意外存储器的电路板:

    :2080000055AA0071574FFFFFDD44FFFF0053006500700020003100330020003200300032CD

    :208010000033002000610074002000310034003A00350030003A003500380000761F039B2A

    自定义应用程序会下载从 CCS c2000 hex 实用程序创建的十六进制文件获取并应用扩展 tektronik 格式的存储器字节。

    查看 cmd、我觉得有一些东西我不明白。 预期的导出内存与其不可分割的视图相匹配:

     

    这些 CMD 中的地址定义如下:

    PRG_STATUS   :origin = 0x308000、length = 0x000001

    begin                                 :origin = 0x308001、length = 0x000002               /*用户程序入口点*/

    TARGET_PREV : origin = 0x308003, length = 0x000001                

    TARGET_ID                       :origin = 0x308004、length = 0x000001                

    compile_date_prev : origin = 0x308005, length = 0x000001

    compile_date:origin = 0x308006、length = 0x00001

    FLASH                                 : origin = 0x30801E , length = 0x02FFE2                 /*片上 FLASH [0x308000 SectorG hasta 0x338000 sectorb included]*/   

    PRG_STATUS 硬编码为0x55AA、程序入口点 CODE_START 是否陡坡上之前列出的 CMD 区域?

    谢谢!

    Paloma

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

    你好,帕洛马, 马修不在办公室,希望他能在本周晚些时候作出回应。

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

    你好,帕洛马, 我只是想更新你,马修不会回来,直到星期二,我很抱歉的延迟。

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

    Paloma、

    很抱歉,很长一段时间才回复。  现在我了解了存储器的内容、这些不是指令、而只是数据存储。  不必查看这些解汇编信息、因为代码不应在此处执行(而只是读取代码)。

    但是、在您的.cmd 文件中、我认为我看到了这个问题:

    PRG_STATUS   :origin = 0x308000、length = 0x000001

    begin                                 :origin = 0x308001、length = 0x000002               /*用户程序入口点*/

    TARGET_PREV : origin = 0x308003, length = 0x000001                

    TARGET_ID                       :origin = 0x308004、length = 0x000001                

    compile_date_prev : origin = 0x308005, length = 0x000001

    compile_date:origin = 0x308006、length = 0x00001

    FLASH                                 : origin = 0x30801E , length = 0x02FFE2                 /*片上 FLASH [0x308000 SectorG hasta 0x338000 sectorb.

     

    "BEGIN"旨在包含功能代码、因此必须与偶数地址对齐 、更重要的是 必须具有0x308000的闪存入口点。

    因此、我们需要将"BEGIN" origin 设为0x308000、并将 PRG_STATUS 移至 origin = 0x308002、我还会将其长度更改为0x2、以便拦截此奇数地址

    尽管这些其他段是数据容器(如果它们只有1个16位字的奇数地址就可以)、但我也可以将它们的来源更改为甚至对齐的地址。  因此、如果您可以在其他段中将 TARGET_PREV 增加到308004、将长度增加到0x2等、这些都应该可以解决问题。

    此致!

    Matthew