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.

[参考译文] TMS320F28375S:源文件可用性问题 TMS320F28375S 上的引导加载程序跳转

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1355292/tms320f28375s-issue-with-source-file-availability-post-bootloader-jump-on-tms320f28375s

器件型号:TMS320F28375S
主题中讨论的其他器件: C2000WAREUNIFLASH

尊敬的 E2E 社区:

我目前正在使用 TMS320F28375S 控制器进行引导加载程序到应用的跳变情形。 我的引导加载程序位于 FLASHA、B、C 和 D 部分(前4段8k 字、每个部分从0x80000开始)、其中一些空间留作将来使用。 应用程序从 FLASHE 分配到 J (接下来的6个段32k 字、从0x88000开始)、同样要保留一些空间。

从引导加载程序跳转到应用程序的过程如下:

//禁用全局中断
Dint;
IER = 0x0000;
IFR = 0x0000;
ASM (" LB 0x088000");

但是、当 LB 指令被执行时、系统挂起并且 CCS 显示以下错误消息:"在[MEMORY ADDREST]处没有可用的'_SYSTEM_POST_cinit'源"。 我还尝试直接跳转到_c_init100.map 文件中详细介绍的位置、但遇到了同样的问题。

附件是该错误消息的屏幕截图、以供参考。

有人能建议可能会出什么问题吗? 我的跳转指令是否有问题、或者 CCS 中的源查找配置是否有问题? 非常感谢您提供任何见解或建议。

感谢您的帮助!
此致
穆扎米尔·克雷希

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

    尊敬的 Muzammil:

    我需要更多的时间来研究这件事,将在第二天内与您联系。

    谢谢。此致、

    查尔斯

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

    尊敬的 Charles:

    感谢您的回答并同意进一步研究此问题。

    我写这篇文章是为了向您提供有关从 RTOS 任务跳转到应用程序时所面临问题的更多背景信息。 在进入主循环之前的设置阶段、在 RTOS 被初始化之前、跳转运行正常。 但是、当我尝试从循环内部跳转时、不起作用。

    我已经通过使用汇编代码和函数指针尝试了跳转、但这两种方法都导致系统挂起。 反汇编过程显示代码ESTOP0每次都卡住。

    我也不确定如何正确设置此转换的矢量表和栈指针。 是否应该从应用程序启动的位置跳到0x88000或_c_init00 (0x8d40f as per .map file)? 如何确保为从引导加载程序或 RTOS 到应用程序的跳转正确定义矢量表和栈指针?

    我看过几个关于类似问题的线程、但我很难理解它们。 您可提供的任何见解或建议都将非常有用、尤其是有关向量表、堆栈指针设置以及在 RTOS 上下文中确定正确跳转目标的任何具体注意事项。

    再次感谢您的帮助。

    此致、

    穆扎米尔

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

    尊敬的 Muzammil:

    对于 从引导加载程序跳转到上面应用的给定过程、您在分支到入口地址之前是否初始化闪存控制寄存器?

    从引导加载程序中、您的目标应是跳转到应用程序应用起点地址(0x88000)。 如果可能、您能否共享您的映射文件?  

    谢谢。此致、

    查尔斯

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

    您好 Charles、

    对于 从引导加载程序跳转到上面应用程序的给定进程,是否在分支到入口地址之前初始化闪存控制寄存器?

    我已经在 Device_init()函数之后初始化了闪存。

    下面我展示了如何初始化闪存。   

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    void FLASH_init(){
    //
    // myFMC0 Initialization
    //
    //
    // Set the bank power up delay so that the bank will power up properly.
    //
    Flash_setBankPowerUpDelay(myFMC0_BASE, 0x14);
    //
    // This function sets the fallback power mode of the flash bank specified by
    // the bank parameter. The power mode is specified by the powerMode
    // parameter
    //
    //
    // Set available banks to active power mode
    //
    Flash_setBankPowerMode(myFMC0_BASE, FLASH_BANK, FLASH_BANK_PWR_ACTIVE);
    //
    // Sets the fallback power mode of the charge pump.
    //
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    是否可以共享您的映射文件(如果可能)?  [/报价]

    下面的文件是我的应用程序的.map 文件。

    e2e.ti.com/.../0714.motor_2D00_controller_2D00_ti.zip

    我在上一个问题中错误地告诉了您_c_int00的地址、实际上它是0x8b40f。

    我是否应该在我的项目设置中进行任何更改?

    您能告诉我从引导加载程序代码跳转到应用程序的过程吗?

    谢谢。此致、

    穆扎米尔

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

    Muzammil,

    根据项目设置、是否可以为 Codestart_branch asm 文件添加一个 codestart?

    然后、 从引导加载程序代码跳转到应用程序的方法是使用"return"函数。 您是否已将 F2837xS SCI 引导加载程序项目视为您内核的基础? 使用该函数会有什么区别吗?

    谢谢。

    查尔斯

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

    尊敬的 Charles:

    感谢您的建议和指导我完成此过程。 我想澄清几件事、以确保我走对了。 首先、当您提到为该Codestart_branch.asm文件添加一个 codestart 时、我想确认您提到的是什么具体的附加内容、因为我已经将该F2837xS_CodeStartBranch.asm文件包含在我的项目中。 此文件中是否有需要调整或验证的特定修改或配置?

    关于使用 SCI bootloader 内核的"return"函数、 但是 我将 CAN 用于引导加载程序操作、我知道 DCAN Bootloader 也与 SCI bootloader 相同。 我知道这是 SCI 引导加载程序工程中的标准过程的一部分、通常位于boot_rom库的文件夹中。 集成 DCAN 引导加载程序的返回函数需要对我的现有项目结构和逻辑进行重大更改。

    此外、我在从 RTOS 任务中跳转到应用时面临挑战。 在进入主循环之前的设置阶段、在 RTOS 被初始化之前、跳转运行正常。 但是、当我尝试从循环内跳转时、它不起作用。 您能否就可能导致此问题的原因以及如何解决此问题提供一些见解? 此外、如何确保为从引导加载程序或 RTOS 到应用程序的跳转正确定义矢量表和栈指针? 非常感谢任何我应遵循的具体指南或检查。

    再次感谢您的帮助、我期待您提供有关如何以最佳方式进行这些调整的建议。

    此致、

    穆扎米尔

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

    尊敬的 Muzammil:

    读完本文后、我需要我的团队提供更多有关 RTOS 如何与 CAN 闪存内核交互的信息。 在 RTOS 中、由于 RTOS 的调度程序、您无法直接跳转到应用程序。 将在可用时为您更新最新版本。  

    谢谢。此致、

    查尔斯

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

    尊敬的 Muzammil:

    为了阐明一点、您是将引导加载程序与 RTOS 一起使用、还是将它们用于不同的用例? 您 能够看到代码在哪个点命中 ESTOP 吗?

    通常、当从 FreeRTOS 应用程序切换到新的应用程序时、步骤为1)停止节拍计时器2)将计时器和外设中断复位以清除现有标志3)禁用全局中断4)跳转到新的应用程序入口点

    矢量表(重新)初始化将作为第二个应用的一部分来完成、之后可以重新启用中断

    谢谢。

    阿纳维

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

    您好!

    我遵循了您的建议、很高兴地报告说、我现在能够正确跳转到该应用、因此感谢您提供的指导! 但是、由于某种原因、我的代码无法正常运行。

    当我使用 CCS 插件对应用程序进行编程并且只运行应用程序时,一切都能flash_api正常运行,但是当我使用引导加载程序代码来刷写应用程序的二进制文件时,代码不能正常运行。 此外、我注意到在使用 CCS 进行调试后、应用程序.bin 文件中的数据与我在存储器浏览器的闪存部分看到的数据之间存在差异。 bin 文件包含的数据多于 CCS 存储器浏览器中显示的数据。

    我想知道生成的.bin 文件是否考虑所有内存区域、包括 RAM。 这是为什么.bin 文件中的数据比在内存浏览器中查看的闪存部分中的数据更多吗? 如果是这种情况、我如何区分哪些数据应存储在哪个位置?

    出于上下文原因、我的引导加载程序位于 FLASHA、B、C 和 D 部分(每个部分8k 字的前4段从0x80000开始)、保留一些空间留作将来使用。 应用程序从 FLASHE 分配到 J (接下来的6个段32k 字、从0x88000开始)、同样要保留一些空间。 此外、这两个项目中还使用某些 RAM 部分。

    这可能与我如何刷写二进制文件有关吗? 是否应该遵循特定的方法或过程来确保二进制数据正确写入控制器的闪存?

    这里、我将附加这两个工程的命令文件。

    e2e.ti.com/.../7180.cmd.zip

    感谢您的帮助!

    此致、

    穆扎米尔

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

    尊敬的 Muzammil:

    在提供进一步输入之前、将查看随附的命令文件。

    谢谢。此致、

    查尔斯

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

    尊敬的 Muzammil:

    回顾之后、我需要进一步的输入。 您是如何生成该 bin 文件的?  
    我还需要应用程序和引导加载程序的映射文件。

    谢谢。

    查尔斯

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

    尊敬的 Charles:

    感谢您的跟进。 关于二进制文件的生成、以下是我在 Code Composer Studio (CCS)中使用的方法:

    1. 我在"Project Explorer"中右键点击工程。
    2. 我导航至Properties->->->C2000 Hex UtilityOutput Format Options
    3. 在输出格式选项中、我选择Binary (--binary, -b)生成.bin文件。

    此过程就是创建用于刷写的二进制文件的过程。

    我将随附以下应用程序和引导加载程序的映射文件。

    e2e.ti.com/.../map-files.zip

    请注意、"c-bl-app"属于引导加载程序项目、"motor-controller-ti"属于应用。

    如果您有任何其他需要、或有助于解决正确刷写二进制文件问题的更多详细信息、请告诉我。

    再次感谢您的帮助。

    此致

    穆扎米尔

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

    尊敬的 Muzammil:

    您能否按照 C2000微控制器串行闪存编程 应用手册中的规定为引导加载程序生成文本文件?

    编译后处理步骤如下: "${CG_TOOL_HEX}""${BuildArtifactFileName}"-boot -sci8 -a -o "${BuildArtifactFileBaseName}.txt"

    对于项目的闪存编译配置、您可以添加此编译后处理步骤、该步骤将生成用于刷写器件的文本文件。  

    谢谢。此致、
    查尔斯

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

    尊敬的 Charles:

    感谢您为我的引导加载程序提供文本文件生成方面的帮助。 我的文件生成方式如下所示。

    e2e.ti.com/.../8004.motor_2D00_controller_2D00_ti.zip

    不过、在实际刷写过程中我会遇到一些挑战、希望您能提供一些指导。 我的应用程序从开始0x88000,但生成的文本文件没有指定内存地址,使它不清楚哪些数据应该刷写到哪个位置。 这一点至关重要、因为我使用自定义引导加载程序来通过 CAN 接收数据并使用闪存 API 将数据编程到微控制器中。 目前、我的方法是从开始以8字节数据块的形式刷写数据0x88000、直到数据结束。 我不确定此方法是否正确、或者是否有更推荐的技术来确保正确编程。

    此外、我观察到.bin (或等效.txt)文件中的数据大小与调试后 CCS 内存浏览器闪存部分中显示的数据大小之间存在差异。 .bin 文件包含的数据比 CCS 存储器浏览器显示的要多。 此外、我应该如何处理这个过程中涉及的 RAM 部分?

    e2e.ti.com/.../MC_5F00_Raw.zip

    以上文件在调试应用项目后从 CCS 的内存浏览器生成。 您可以在文件中看到数据是如何存储的。 由于 FLASHE 未完全填满、还有一些空格(您可以在应用项目的 cmd 文件中看到)。 我也想要相同的。 此外、还使用了一些 RAM 部分、我在生成该文件时没有保存这些部分。

    比较上述的内存浏览器文件和我生成的 txt 文件后、我可以看到数据在两种方式上的方式不同。 此外、数据 txt 文件是8位文件、实际上它是16位。  

    您能建议如何使用自定义引导加载程序正确解释和刷写此文本文件中的数据吗? 任何见解或建议的做法都将非常有帮助。

    感谢您的帮助。

    此致、Muzammil

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

    尊敬的 Charles:

    感谢您的指导。 仔细检查.txt文件后、我已经解码了文件的一些结构。 前两个数据字节表示数据长度、接下来的四个字节表示应存储数据的地址。 这已经澄清了很多、但也带来了一些重大挑战:

    1. 解码复杂度 :从文本文件解码此格式的过程被证明是相当麻烦的。 移除前六个字节来解析剩余数据、然后将这些数据正确存储到闪存中是一项实际的挑战、尤其是在自定义引导加载程序的此过程自动化时。 手动调整这些初始字节并准确解析后续数据的需求会增加实现的复杂性。

    2. 以下位置的数据中断: FFFF:另一个问题出现在包含FFFF的数据序列中。 每当FFFF遇到这种情况时、它都会充当定界符或断点、从而破坏数据的连续流。 如果我的理解是正确的,FFFF那么接下来的数据被视为一个新地址,这会使解析逻辑显著复杂化,特别是对于更长和连续的数据块。

    鉴于这些问题,您能否建议一种更有效的方法或工具,以简化这一过程,特别是一种能够更从容地处理数据划界和地址识别的特点的方法或工具? 如果您有任何关于如何在使用 CAN 进行数据传输的自定义引导加载程序背景下解决这些特定挑战的见解或建议、我们将不胜感激。

    谢谢、此致、

    穆扎米尔

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

    尊敬的 Muzammil:

    本文档的图12-8应明确生成.txt 文件的格式。 https://www.ti.com/lit/spru513

    您可以看到、块用终止标头00 00来分隔、而不是 FFFF。 这还可以澄清在将数据刷写到器件中时如何确定地址的任何问题。  

    我建议查看 C2000Ware 中的现有 CAN 闪存内核、以了解如何正确解析 CAN 帧并对其进行编程。 本文档介绍了现有 CAN 闪存内核的实现(虽然不是 F2837xD、用于解析帧和对帧进行编程的逻辑是相同的) SPRAD51应用手册。 

    此致、

    斯凯勒

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

    您好,Skyler:

    我已经创建了引导加载程序项目、该项目将从 CAN 接收8个字节的数据并将2048、即2KB 的数据存储在缓冲区中。 一旦接收到2KB 数据、它就会通过 FLASH_API 函数将其存储在闪存中。 并发送请求以进一步传输接下来的2KB 数据。 此过程将持续到最后一个数据。 正如您所说的、我已经介绍了 CAN 闪存内核、但如果我尝试使用该方法、我必须在我的代码中进行许多更改。 这就是为什么我要求任何对我来说很容易的解决办法。

    谢谢。此致、

    穆扎米尔

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

    尊敬的 Muzammil:

    如果没有实施的详细信息、很难针对您的问题提出解决方案建议。 CAN 闪存内核的工作方式与上述内容类似、但您可以根据需要进行修改。 我认为没有必要重新设计整个解决方案、但可以使用现有的闪存内核作为参考、以应对上述解码复杂性和数据中断问题。 您认为现有解决方案的哪个部分需要过多的精力才能适应您的引导加载程序?

    此致、

    斯凯勒

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

    您好、Skyler:

    我的问题仍然没有解决。 只是想问一下,为什么我无法运行刷写二进制文件的代码?

    我还尝试使用 uniflash 对二进制文件进行编程、但显示了以下消息。

    谢谢。此致、

    穆扎米尔

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

    尊敬的 Muzammil:

    本指南 包含有关解决类似错误的信息。 将应用程序或自定义引导加载程序刷写到器件中时是否显示此错误?  

    此致、

    斯凯勒

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

    您好,Skyler

    将应用程序或自定义引导加载程序刷写到器件时是否显示此错误?  [/报价]

    在两种情况下都会遇到此错误。 我通常指的是.bin 文件。 当我使用.out 文件对器件进行编程时、程序可以正常运行。 但是、当我使用 Uniflash 通过.bin 文件进行编程时、代码不起作用。

    谢谢。此致、

    穆扎米尔

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

    尊敬的 Muzammil:

    我将对此进行研究、并在明天提供最新情况。

    此致、

    斯凯勒

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

    尊敬的 Muzammil:

    Skyler 让我看看您最近两次回复中与二进制相关的问题。

    二进制文件只包含.out 文件中的所有闪存映像数据。  它不包含地址和数据长度等。  如果 应用程序(.out 文件)使用的第一个和最后一个地址之间存在未使用的地址范围(常见情况)、程序加载器不知道必须跳过加载到该未使用的范围、因为二进制文件不包含该信息。  因此、程序加载器只需从您向程序加载器提供的起始地址开始、在连续地址范围内加载二进制文件中的所有数据。  因此、闪存映像的内容将不准确、从而无法成功执行。  只有当映像包含整个存储器映射的数据而没有任何未使用的地址时、才应使用二进制文件。   

    谢谢。此致、

    瓦姆西

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

    您好!

    在从引导加载程序跳转到主应用程序之前、是否有必要擦除 RAM?

    谢谢。此致、

    穆扎米尔·克雷希

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

    尊敬的 Muzammil:

    否、没有必要。 您是否会遇到您认为可能是由该问题引起的问题?

    此致、

    斯凯勒

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

    您好,Skyler:

    我已经创建了基于 CAN 的自定义引导加载程序、并可以正常使用 launchpad F28379D、但使用我的采用 TMS320F28375S 的 PCB 时、它不能正常工作。 我正在使用 XDS2xx USB 调试探针进行调试。

    我在从 launchpad 转移到 PCB 的代码中进行了必要的更改。 所做的更改较少、因为我已开始 LaunchPad 项目、并谨记 TMS320F28375S。

    我已经在目标配置文件中更改了探针和控制器选择。

    开始的时候,它工作了几次,我很高兴,但现在它在 ESTOP0呆了。

    调试后,我知道 Device_init():函数中的代码残桩。

    代码将在以下内容正结束后:-

    device_init ():--> sysctl_setclock(device_setclock_CFG);--> sysctl_delay (23u);之后屏幕如图所示

    有时、它也会向我显示此消息。

    在"/home/ubnuser/ti/repos/c2000ware/repos/f2837xs/release_pkg/driverlib/f2837xs/driverlib/interrupt.h "中找不到源文件或编辑源查找路径以包含其位置。

    我认为这个问题是因为我在使用内部振荡器。 因此、我使用内部振荡器检查了 LaunchPad、但在 LaunchPad 中它工作正常。

    这是我的 SYSCLK 设置

    还有一点是、我在从引导加载程序跳转到应用程序之前禁用了 CAN、假设应用程序使用其设置重新启用 CAN。 因为如果我在跳转和刷写文件之前未禁用 CAN、CAN 中断将不起作用、下次我要刷写另一个文件时、我将无法生成请求。

    下面显示的图片是我的跳转操作。

    还有一点、我的引导加载程序从扇区 A 开始、而我的应用程序从扇区 E 开始。当我通过 CCS 刷写应用程序代码时、可以正常工作。 但如果我通过引导加载程序刷写代码的文本文件、就会遇到上述问题。 LaunchPad 中不会出现此问题。

    请帮我解决这个问题。

    谢谢。此致、

    穆扎米尔·克雷希

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

    尊敬的 Muzammil:

    对于您看到的错误、它卡在自定义引导加载程序(0x82a9e)中、对吗? 扇区 A (0x80000 - 0x8002000)是您的引导加载程序所在的位置、而扇区 E (0x88000 - 0x90000)是状态应用的所在位置。 您是否将内核或应用的部分映射到扇区 B (0x82000 - 0x84000)?

    另外,如何为此自定义引导加载程序生成 Device_Init ()函数? 它是否与 F2837xS SCI 闪存内核或定时 LED 闪烁示例按照步骤1、步骤2、步骤3进行初始化类似?

    谢谢。此致、

    查尔斯

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

    尊敬的 Charles:

    我认为这里有一些误解。

    进一步调试后、我已经确定了我一直遇到的问题的根本原因。 根据我所学知识、闪存似乎是为一次以8个字的块进行写入而设计的。 但是、检查构建过程中生成的文本文件(每个块的起始字节都包含一个地址和块中的数据字节数)后、我注意到其中一个块的地址不是8的倍数。 这些失准似乎是未正确写入某些字节或完全丢失这些字节的原因。  

    我在命令文件中做了一些更改、目前解决了问题、但我认为这不是正确的解决方案。

    如果您有任何建议、说明如何确保所有地址与8字块大小要求正确一致、我将不胜感激。 提前感谢您的帮助和见解!

    谢谢。此致、
    穆扎米尔·克雷希

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

    尊敬的 Muzammil:

    若要对齐8字块大小要求、在链接器命令文件中、您可以在段区域中使用 align (8)指令。


    以下链接中提供了一个对齐示例: C:\ti\C2000Ware_5_02_00_00\device_support\f2837xs+ common\cmd\2837xS_Generic_flash_lnk.cmd

    谢谢。此致、

    查尔斯