在为我的项目启动一个使用 s32k116 的引导加载程序时,我找到了 S32K1 的应用笔记和示例代码(s32k146、s32k148、s32k144)。将示例项目导入 S32 Design Studio for S32 Platform, v3.5 时,无法编译。我得到了所附的错误截图。
我没有以任何方式修改这些项目。
我已经在以下应用笔记中使用了这些示例
https://www.nxp.com/docs/en/application-note/AN12218.pdf
https://www.nxp.com/docs/en/application-note-software/AN12218SW.zip
https://www.nxp.com/docs/en/application-note/AN12323.pdf
https://www.nxp.com/docs/en/application-note-software/AN12323SW.zip
S32DS 3.5 是否有不同的示例?
非常感谢你耐心细致的解答,让我很快找到了解决方案。我再次衷心感谢你们。
@jianghao,我确实得到了使用 RTD 的 s32k116 的统一引导加载器版本。附后。我还附上了 ECU Pro 项目,该项目可在引导加载程序运行后通过 CAN 从 PC 加载应用程序。
说明:
__attribute__((section(".flexnvm_flash_driver")))你好,兄弟,我也有同样的问题,你成功移植代码了吗?
如何允许通过指针执行函数?
具体来说,似乎与内存无关。如果我使用内存地址指定指向驱动程序的指针,我的设置或其他设置就无法运行。
我试着在我的项目中定义一个虚拟函数,并把它放在 flash_driver 闪存空间中。函数不执行任何 Flash 活动。但如果我指向闪存中的地址来调用该函数,仍然会出现异常。
无论采用哪种方式,生成的函数代码都是一样的。
看来集成开发环境、调试器或其他东西不喜欢这样:
__attribute__((section(".flash_driver"))))
__attribute__((优化("O0" )))
status_t test_func(void)
{
status_t result =STATUS_SUCCESS;
返回结果;
}
typedef status_t(*test_ram_func_t)(void);
g_ptestFunc =(test_ram_func_t)(uintptr_t)0x0000E800u;
但这样就可以了 g_ptestFunc =test_func;
你好@VaneB、
我把所有东西都换成了使用 RTD 的统一引导加载器。但是,一旦代码开始尝试执行闪存驱动程序,而闪存驱动程序正在 RAM 外执行,调试器就会出现异常。
我是否需要在链接器中做一些特殊处理或设置,才能从 RAM 的 flash_driver 部分执行代码?
我没有用 RTD 重写 ram 闪存驱动程序,因为在统一引导加载程序示例中该驱动程序仅以二进制形式提供。我确实在调试器中确认闪存驱动程序位于 RAM 中。
使用旧 SDK 的原始项目可在 S32DS 3.5 的调试器中运行,并执行引导加载。
我把项目附在后面,如果你能看到有什么地方被弄乱了?
我没有附上工具链文件。我使用的是适用于 S32K1 处理器的 RTD 2.0.0。我加入了我一直在通过CAN总线测试的ECU-Pro项目。它跳过了 flash_driver.bin 的下载。相反,我将 flash_driver.bin 转换为 flash_driver.o然后我将其编译成一部分 flash。然后,我的代码会在启动时将其复制到 RAM 中。这种修改似乎效果不错。
下面是几张调试器失败的截图。(在 SDK 版本中可以使用)。
RAM 中的闪存驱动程序与 flash_driver.bin(指针偏移更新)相同
谢谢。 我正在着手迁移代码。如果我找到能与 S32DS 配合使用的东西,我会尝试发布。目前进展
对于 S32K1 设备,可用的引导加载程序应用程序包括您已经共享的应用程序以及统一引导加载程序演示。目前,还没有专门为 S32DS 3.4 或更高版本开发的引导加载程序。
感谢您的回复。
是否有与 S32DS 兼容的 S32K1 引导加载程序示例项目?
我更喜欢 3.5 版,但如果只有 3.4 或 3.6 版,我也愿意试试)。
我想先从一个已知的工作项目开始,然后再对其进行修改,以便与 S32k116 配合使用。
这些应用程序是使用适用于 Arm 的 S32 Design Studio 开发的。随着时间的推移,集成开发环境的更新对工具链路径、库路径和 SDK 配置等元素进行了更改。
为确保与当前使用的集成开发环境版本兼容,建议创建一个新项目。然后,手动将应用程序的源文件和任何自定义项目设置从原始项目复制到新项目中。这种方法有助于避免因版本差异而造成的集成问题。
BR、VaneB