2155674_zh-CN

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

2155674_zh-CN

2155674_zh-CN

S32K3+RTD400+SPD 1.0.4链接文件

在使用 SPD104 时,我遇到了一些有关链接文件的问题。目前,我使用的是 iar 9.50.2 版。从 S32DS 转换为 iar 时生成的 icf 文件不包括与 SPD 相关的内容。请参阅 SPD104 手册中有关 eMcem_MemMap 的部分。在 icf 文件中增加了一些分段分配,但仍然遇到了一些问题。

最常遇到的错误是

错误[Lp005]:位置包含内容的混合部分(例如"rw 数据部分 .s32_saf_bss in eMcem.o符号:[eMcem_DriverState]") [适合放在 ROM 中] 和无内容的部分(例如"zi section .bss in abs.o symbols: [abs_output]") [适合放在 RAM 中] 。


例如,从代码来看,eMcem_MemMap.h 中有如下代码

#ifdef EMCEM_START_SEC_VAR_ZERO_INIT_UNSPECIFIED

/ * *

* @file eMcem_MemMap.h

* @violates @ref eMcem_MemMap_h_REF_1

*/

#undef EMCEM_START_SEC_VAR_ZERO_INIT_UNSPECIFIED

/ * *

* @file eMcem_MemMap.h

* @violates @ref eMcem_MemMap_h_REF_1

*/

#undef MEMMAP_ERROR

#pragma ghs section bss=".s32_saf_bss"

#endif

根据手册中的理解,此处的.s32_saf_bss 段应该是放置在 RAM 中的一段,而不是 eMcem.c 中的一段、有以下代码

#define EMCEM_START_SEC_VAR_ZERO_INIT_UNSPECIFIED

/* @* 违反 @ref eMcem_c_REF_0410 */

/* @violates @ref eMcem_c_REF_2001 */

#include"eMcem_MemMap.h"


/ * *

* @brief 驱动器状态。

* 在启动或运行期间,eMCEM 驱动程序从 EMCEM_S_UINIT 变为 EMCEM_S_INITIALIZED。

* 如果配置锁类型设置为 HARD_LOCK,驱动程序会锁定其配置

* 并将其状态更改为 EMCEM_S_LOCKED。

*/

eMcem_StateType eMcem_DriverState = EMCEM_S_UNINIT;


#define EMCEM_STOP_SEC_VAR_ZERO_INIT_UNSPECIFIED

在代码中,eMcem_DriverState 被明确赋值。尽管此处的赋值为 0,但根据规则,应将其放在数据部分中


我可以对编译器进行配置,强行纠正变量的段分配逻辑:将本应属于"no content" 的显式零初始化变量从.data 段(有内容)移至.bss 段(无内容),使其符合链接器脚本中的要求,即只有"no content 段" 才能放置在 RAM 区域,从而解决混合放置的冲突。但我认为这不是解决问题的根本办法


有没有更合理的办法解决这个问题?

Re: S32K3+RTD400+SPD 1.0.4 link file

嗨,@Neo1096

您能使用本主题中的链接器文件吗?

https://community.nxp.com/t5/S32K/S32K3-SPD-DMA/m-p/2139734


BR,丹尼尔

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