2146901_zh-CN

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2146901_zh-CN

2146901_zh-CN

应用程序注释中的 s32k1 引导加载程序示例无法与 S32DS 3.5 一起编译

在为我的项目启动一个使用 s32k116 的引导加载程序时,我找到了 S32K1 的应用笔记和示例代码(s32k146、s32k148、s32k144)。将示例项目导入 S32 Design Studio for S32 Platform, v3.5 时,无法编译。我得到了所附的错误截图。

dparkinson_0-1754397806532.png 

dparkinson_0-1754397995534.png



我没有以任何方式修改这些项目。

我已经在以下应用笔记中使用了这些示例


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 是否有不同的示例?

Re: s32k1 bootloader examples for app notes do not compile with S32DS 3.5

非常感谢你耐心细致的解答,让我很快找到了解决方案。我再次衷心感谢你们。

Re: s32k1 bootloader examples for app notes do not compile with S32DS 3.5

@jianghao,我确实得到了使用 RTD 的 s32k116 的统一引导加载器版本。附后。我还附上了 ECU Pro 项目,该项目可在引导加载程序运行后通过 CAN 从 PC 加载应用程序。

说明:

  • 闪存驱动程序已嵌入引导程序。这与最初的演示不同。最初的引导加载程序演示通过 CAN 下载了闪存驱动程序,这是应用程序更新过程的一部分。
  • 闪存驱动程序存储在内部闪存的 m_store_flash_driver 中。启动时,引导程序会将该部分复制到 RAM 空间 m_flash_driver。见链接器文件。
  • 在更新过程中,闪存驱动程序会在 RAM 空间运行,因为在执行闪存驱动程序时无法写入内部闪存。因此,闪存驱动程序必须从 RAM 运行。
  • 请注意,S32K116 只有一组内部闪存。其他变体有更多的银行。对于这些,我认为可以在更新第 2 组闪存的同时,从 1 组闪存运行闪存驱动程序。
  • 我将 RTD 生成的内部闪存驱动程序归属于 m_store_flash_driver 空间。如果重新生成 RTD 驱动程序,则可能会丢失此属性。 参见 Ftfc_Mem_InFls_Ip.c例如
  • 属性如下您可以搜索 where-used。
__attribute__((section(".flexnvm_flash_driver")))​
  • 请注意,闪存驱动程序并不存储在 flexnvm 库中。最初,我打算将闪存驱动程序放在 flexnvm 中,而不执行 RAM,但我改变了主意,决定在应用程序中将 flexnvm 用作 EEPROM。我没有更新属性/节名称。(我不知道从 flexnvm 执行是否有效,因为我还没走到那一步就改变了路线)。
  • 该程序只是演示程序,我认为下次更新时不会跳回引导程序。我没有进行真正的测试,因为我转而使用不同的启动加载协议。
  • 版本/测试用于
    • 适用于 S32 平台的恩智浦 S32 设计工作室 v3.5 版本号 240924(更新 14)
    • S32K1 实时驱动程序版本 2.0.0 QLP1
    • 评估板 s32k116evb2q048
    • EcuBus Pro v 0.8.49
    • 用于 PC/CAN 接口的 PEAK PCAN-USB

Re: s32k1 bootloader examples for app notes do not compile with S32DS 3.5

你好,兄弟,我也有同样的问题,你成功移植代码了吗?

Re: s32k1 bootloader examples for app notes do not compile with S32DS 3.5

@VaneB

如何允许通过指针执行函数?

具体来说,似乎与内存无关。如果我使用内存地址指定指向驱动程序的指针,我的设置或其他设置就无法运行。

我试着在我的项目中定义一个虚拟函数,并把它放在 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;

dparkinson_0-1755786075632.png

dparkinson_1-1755786101312.png

dparkinson_2-1755786123907.png







但这样就可以了 g_ptestFunc =test_func

dparkinson_3-1755786135972.png

dparkinson_4-1755786145281.png




Re: s32k1 bootloader examples for app notes do not compile with S32DS 3.5

你好@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 版本中可以使用)。

dparkinson_2-1755716445433.png


dparkinson_0-1755716320678.png

RAM 中的闪存驱动程序与 flash_driver.bin(指针偏移更新)相同

dparkinson_1-1755716380823.png

dparkinson_3-1755716644745.png



Re: s32k1 bootloader examples for app notes do not compile with S32DS 3.5

@VaneB

谢谢。 我正在着手迁移代码。如果我找到能与 S32DS 配合使用的东西,我会尝试发布。目前进展

  • 开始制作 S32DS 3.5 上 AN12218 的示例,但无法轻易找出 src/drivers/ 子文件夹下文件的缺失定义,因此暂时搁置。
  • 为 Arm 2018.R1 安装了 S32 然后用那个 IDE 可以正常编译所有示例。
  • 我开始看 Unified Bootloader 演示版。S32116 变体也可以在 Arm 的 S32 下编译,在 S32DS 3.5 下为我编译。在 Arm 版 s32 中,我可以找出处理器专家来尝试弄清楚其中包含哪些驱动程序等等
  • 所以,现在,我想我会尝试统一的引导加载程序,看看我能否弄清楚如何使用 RTD 将其迁移到 S32DS 3.5,而不是它在 ARM 版 S32 中使用的任何驱动程序。

Re: s32k1 bootloader examples for app notes do not compile with S32DS 3.5

你好@dparkinson

对于 S32K1 设备,可用的引导加载程序应用程序包括您已经共享的应用程序以及统一引导加载程序演示。目前,还没有专门为 S32DS 3.4 或更高版本开发的引导加载程序。

Re: s32k1 bootloader examples for app notes do not compile with S32DS 3.5

感谢您的回复。

是否有与 S32DS 兼容的 S32K1 引导加载程序示例项目?

我更喜欢 3.5 版,但如果只有 3.4 或 3.6 版,我也愿意试试)。

我想先从一个已知的工作项目开始,然后再对其进行修改,以便与 S32k116 配合使用。

Re: s32k1 bootloader examples for app notes do not compile with S32DS 3.5

hI@dparkinson

这些应用程序是使用适用于 Arm 的 S32 Design Studio 开发的。随着时间的推移,集成开发环境的更新对工具链路径、库路径和 SDK 配置等元素进行了更改。

为确保与当前使用的集成开发环境版本兼容,建议创建一个新项目。然后,手动将应用程序的源文件和任何自定义项目设置从原始项目复制到新项目中。这种方法有助于避免因版本差异而造成的集成问题。


BR、VaneB

Tags (1)
No ratings
Version history
Last update:
‎11-21-2025 01:10 AM
Updated by: