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.

[参考译文] TMS320F28388D:有关跳转到基于 SYSBIOS 的固件的入口地址的问题

Guru**** 2601915 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1112620/tms320f28388d-an-issue-regarding-jumping-to-the-entry-address-of-a-sysbios-based-firmware

器件型号:TMS320F28388D
Thread 中讨论的其他器件:SYSBIOS

您好!

我正在使用 controlCARD 板(TMDCNCD28388D)、并且已在其闪存中加载两个固件文件。 第一个在 SECTOR0 (0x00200000)的开头加载、第二个在 SECTOR3 (0x0020C000)的开头加载。 第一个是跳转到第二个固件的入口地址的简单固件。 当我在 SECTOR3上加载一个简单的"LED_Blinky"固件等非 RTOS 固件作为第二个固件时、一切都运行良好、第一个固件成功跳转到第二个固件、我可以看到 LED 闪烁。 但是、当我在 SECTOR3上加载基于 SYSBIOS 的固件作为第二个固件时、跳转操作失败。 我还尝试跳转至第二个固件的"main"函数的地址。 在这种情况下、虽然它成功跳转并且我可以看到程序将通过"Disassembly"窗口来完成第二个固件、但第二个固件没有其正常功能(我的意思是它不再工作)。 如果您能指导我如何解决这个问题、我将不胜感激。

注意:我已将基于 SYSBIOS 的固件中的"ti_SYSBIOS_family_ARM_m3/Hwi.resetVectorAddress"从0x00200040 (SECTOR0)更改为0x0020C000 (SECTOR3)。 我知道在 SYSBIOS 文档中强烈建议不要执行此操作、但我必须更改此地址、因为我已经在 SECTOR0上加载了与"resetVectorAddress"冲突的另一个固件(跳线一)。

此致、
Alex

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

    您将什么用作 SYS/BIOS 应用程序的入口点? ti_sysbios_family_c28_f2838x_init_begin 部分? SYS/BIOS 要求在 main()之前运行一些代码,因此,向 main()跳转会导致一些奇怪的行为是很有意义的。

    您能否澄清一下"跳跃动作失败"的含义? 您是否获得了 ITRAP? 它会到达错误的地方吗?

    惠特尼

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

    尊敬的惠特尼:

    感谢你的答复。

    [引用 userid="123578" URL"~支持/微控制器/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1112620/tms320f28388d-AN-issue-regarding-the-skime-to-entry-address-of-sBIOS based-firmware/4294123#4123294?]您使用 SYS/BIOS 进入应用程序的入口点是什么? ti_sysbios_family_c28_f2838x_init_begin 部分? SYS/BIOS 要求在 main()之前运行一些代码,因此,跳向 main()的权限会导致一些奇怪的行为。

    与我使用的其他应用一样、我跳转到"resetISR"地址作为 SYS/BIOS 应用的入口点(例如 LED 闪烁)。 但是、我启用了"从闪存引导"选项(如下图所示)、并尝试跳转到"ti_sysBIOS_family_arm_f2838x_init_Boot"部分、但它不起作用。 我还在下图中启用了"配置闪存控制器"、现在可以看到".binit 部分出现在"Memory Allocation"窗口中。 "ti_sysbios_family_c28_f2838x_init_begin 段"是指这种情况吗? 如果是、我不知道如何在.cfg 文件中更改此段的地址、因为我找不到该地址。 我以前禁用过它、因为它始终位于 SECTOR0的开头、在这里、我的第一个固件(跳线一)已经被加载、并且它们之间存在冲突。

    另外,感谢您对 SYS/BIOS 应用程序中跳转到 main()的解释。

      

    [引用 userid="123578" URL"~支持/微控制器/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1112620/tms320f28388d-an-issue-regarding-about-the-entry-address-of-a-sysbios-based-firmware/412342941234123294]"您还可以通过"跳转至"跳转至"操作失败"说明什么意思? 您是否获得了 ITRAP? 它是否会到达错误的位置?

    不可以、它会成功跳转到正确的地址、但每当我使用"Disassembly"窗口跟踪代码时、我都会看到它始终停留在程序跳转到的该入口地址中。 顺便说一下、您能不能说什么是"ITRAP"?

    最棒的

    Alex

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

    尊敬的惠特尼:

    我刚刚学习了"3.1节。 SYS/BIOS 用户指南中的 SYS/BIOS 启动顺序"(下图)。 根据本文档、我还尝试跳转至"ti_sysbios_family_arm_f2838x_init_resetISR"和"_c_int00"、但它仍然不起作用。 我的意思是第一个固件成功跳到第二个固件、但第二个固件没有其通常的功能。 我还尝试禁用看门狗计时器、但它不起作用。 "ti_SysBIOS_family_ARM_f2838x_init_resetISR"部分是 SYS/BIOS 运行的第一项功能、对吧? 或者我在这里缺少什么?

    最棒的

    Alex

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

    我想、如果您实际上不想通过此应用程序支持从闪存启动、"启用从闪存启动"选项实际上没有意义(这需要将您的入口点放置在引导 ROM 确定的闪存入口点)。 尽管、如果您确实希望使其保持启用状态(因为 ti_sysbios_family_arm_f2838x_init_resetISR 是如此清晰的入口点)、您可以通过只更改.cmd 文件中的 CMBANK0_RESETISR 位置来移动 ti_sysbios_family_arm_f2838x_init_resetISR 的位置。

    我会取消选中"也配置闪存控制器"、因为第一个应用程序可能已经处理了这一问题。

    在没有"从闪存启用引导"的情况下、我在确定您应该将什么视为第一个函数时遇到了一些问题、因为没有明显的入口点需要查找。c_int00可能还可以、 除非您是应用程序、否则已按照本常见问题解答中所述定义了任何启动模块"firstFxns":

    e2e.ti.com/.../3521880

    我想知道是否值得尝试插入您自己的 Startup.resetFxn。 此外、我想知道是否需要在进入 c_int00之前重新初始化 CM RAM。

    [引用 userid="475471" URL"~/support/microcontrollers/C2000-microcontrollers-group/CC2000/f/C2000-microcontrollers-forum/1112620/tms320f28388d-an-issue-regarding-about-the-entry-address-of-a-sysbios based-firmware/4123396#43396]、您可以以何种方式引用"itRAP"?]

    我之前回答过我已经想到了 C28x -通常这就是我们所说的 C28x 上的非法指令错误。 我确信它在 CM 上被称为不同的东西、但它仍然是相同的想法- CPU 获取了无效指令、因此它跳转到错误处理程序。 听起来这不是你所要做的。

    惠特尼

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="123578" URL"~支持/微控制器/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forume/1112620/tms320f28388d-问题-关于-跳到-入口-地址-基于 SYSBIOS 的-固件/4124836#4124836如果您实际上不需要从 ROM 启动、则启用闪存选项。] 尽管、如果您确实希望使其保持启用状态(因为 ti_sysbios_family_arm_f2838x_init_resetISR 是如此清晰的入口点)、您可以通过只需更改.cmd文件中的 CMBANK0_RESETISR 的位置来移动 ti_sysbios_family_arm_f2838x_init_resetISR 的位置。

    是的、我 将 .cmd 文件中的 CMBANK0_RESETISR 位置从 SECTOR0更改为 SECTOR2、从而将"ti_SysBIOS_family_ARM_f2838x_init_resetISR"的放置位置更改为 SECTOR2、以便它不会与第一个应用程序发生冲突。

    [引用 userid="123578" URL"~/support/microcontrollers/C2000-microcontrollers-group/CC2000/f/C2000-microcontrollers-forum/1112620/tms320f28388d-AN-issue-regarding-about-the-sky-entry-address-of-a-sysbios-based-firmware/4124836#4124836]自我引用控制器“配置闪存”后,可能已被“取消选中/取消选中”的应用程序。

    我还针对所有测试用例禁用了此选项。

    [引用 userid="123578" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000-f/C2000-microcontrollers-forume/1112620/tms320f28388d-an-issue-regarding-the-sky-the-entry-address-of-a-SysBIOS-based-firmware/4124836#4124836]从一开始就没有问题、您可能会考虑让闪存从一开始就没有什么问题、因为我应该考虑"启动时没有什么问题"。 除非您是应用程序、否则已按照本常见问题解答中所述定义了任何启动模块"firstFxns":

    e2e.ti.com/.../3521880

    我想知道是否值得尝试插入您自己的 Startup.resetFxn。 此外、我想知道是否需要在进入 c_int00之前重新初始化 CM RAM。

    感谢您提供常见问题解答。 正如您提到的、我禁用了"从闪存引导"选项。 我还在.cfg 文件中启用了启动模块、并 分别为 Startup.firstFxns 和 Startup.resetFxn 实现了两个简单的"myFirstFunction"和"myResetFunction"。 然后、我尝试跳转至这两个函数的两个地址、但问题仍然存在。

    当我没有定义"myFirstFunction"时、我还尝试跳转到 firstFxns1的地址(即下图中的 ti.sysbios.heaps.HeapMem.init")。 我认为这可能是引导时调用的第一个函数。

    [引用 userid="123578" URL"~/support/microcontrollers/C2000-microcontrollers-group/CC2000/f/C2000-microcontrollers-forum/1112620/tms320f28388d-问题-关于跳到入口地址的问题-基于 SYSBIOS 的固件/4124836#4124836当我在 C28x 上回答此错误时、通常是非法的。] 我确信它在 CM 上被称为不同的东西、但它仍然是相同的想法- CPU 获取了无效指令、因此它跳转到错误处理程序。 这似乎不是您所面临的情况。[/quot]

     感谢您的解释。

    如果有用、我可以与您私下共享我的代码。

    最棒的

    Alex

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

    Alex、我已向您发送了一个朋友请求、允许您将消息发送给我。

    惠特尼

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

    感谢您惠的朋友提出请求、很抱歉我迟到了。 老实说、当我正在简化代码以将其发送给您时、我可以找到导致我解决问题的东西。 这就是为什么我答复迟了、也没有将代码发送给您的原因。

    无论如何、我可以通过以下更改来解决跳跃问题:

    1-将"CMBANK0_RESETISR"移动到除了第一个应用程序所在的位置 SECTOR0以外的任何位置。 例如、我将 RESETISR 重定位为 0x00270008 (SECTOR3开头)

    2-在0x00270008上找到 ti_sysbios_family_arm_m3/hwi.resetVectorAddress

    3-在 .cfg 文件中的"CMBANK0_SECTOR9"上找到 Boot.loadSegment。

    4-按下图配置.cfg 文件:

    再次感谢您抽出时间来讨论此问题。 但是、我在这里遇到了另一个类似的、有点奇怪的与跳跃相关的问题、但我认为在新线程中提问可能更好。 这是指向新主题的链接:

    https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1117017/tms320f28388d-an-issue-regarding-jumping-to-the-entry-address-of-a-firmware-in-cm-core

    最棒的

    Alex

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

    尊敬的 Alex:感谢您分享您的解决方案。 很高兴您能找到它。 现在、我将看一下您的另一篇文章。

    惠特尼

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

    尊敬的惠特尼:  

    谢谢。

    Alex