您好!
我们使用 F021闪存库进行 EEPROM 仿真、它可以与 IAR Workbench for ARM v8.11.1配合使用。 最新版本8.11.3存在一个大问题。 库不再工作。 在执行闪存擦除命令后、程序仍然停留在 BUSY 标志和擦除标志检查处。
IAR 工作平台的警告(错误)消息如下:
用于 ARM 的 IAR ELF 链接器 V8.11.3.13950/W32
版权所有2007-2017 IAR Systems AB。
警告[Lt009]:不一致的 wchar_t 大小
FlashStateMachine.EnableEepromSecits.obj (F021_API_CortexR4_be.lib)和17个其他对象的 wchar_t 大小为16位
adc.o 和256个其他对象具有 wchar_t 大小32位
警告[Li026]:模块"FlashStateMachine.EnableEepromSectors.obj (F021_API_CortexR4_be.lib)"(和17个其他模块)不包含支持虚拟的信息
功能消除
++以下段本来是由 copy 初始化的、但已经初始化了
排除、因为它们被标记为"初始化可能需要":
.text:fapi_calculateFletcherChecksum (Utilities.CalculateFletcher.obj (F021_API_CortexR4_be.lib)#11)
.text:fapi_initializeFlashBanks (FlashStateMachine.InitializeFlashBanks.obj (F021_API_CortexR4_be.lib)#12)
.text:Fapi_issue1923命令(ASYNC.obj (F021_API_CortexR4_be.lib)#11)
.text:_Fapi_divideUnsignedLong (FlashStateMachine.InitializeFlashBanks.obj (F021_API_CortexR4_be.lib)#11)
.text:_Fapi_issueFsmCommand (FlashStateMachine.IssueFsmCommand.obj (F021_API_CortexR4_be.lib)#11)
.text:_scaleEEFclk (FlashStateMachine.ScaleFclk.obj (F021_API_CortexR4_be.lib)#13)
.text:_scaleMainFclk (FlashStateMachine.ScaleFclk.obj (F021_API_CortexR4_be.lib)#12)
这似乎是 wchar_t 定义的问题。 IAR wchar_t 为4个字节、该库为 wchar_t 使用2个字节
是否有具有4个字节 wchar_t 的库构建可用?
IAR 中有关 wchar_t 变化的唯一信息如下:
- 更改了8.10和8.11版中 wchar_t 的大小
ARM ABI 之后的目标文件具有一个运行时属性,指示的大小
wchar_t。在 EWARM 版本7.80及更早版本中、
wchar_t的大小为2字节宽、并相应地设置了运行时属性。对于 EWARM 版本8.10、的大小
wchar_t为4字节宽、但未更新运行时属性的值。 因此在8.10中、生成的代码为4字节宽wchar_t、但目标文件标记为2wchar_t字节宽。在 EWARM 版本8.11中
只看wchar_t、宽度为4字节、并相应地设置运行时属性。wchar_t这方面有以下影响:-
组合使用7.80和8.10构建的目标文件不会触发任何链接器警告,但如果应用程序使用
wchar_t,则行为将不可预测。 -
组合使用8.10和8.11构建的目标文件将触发链接器警告,但即使应用程序使用
wchar_t,也应正常工作。 -
组合使用7.80和8.11构建的目标文件将触发链接器警告,如果应用程序使用
wchar_t,则行为将不可预测。
-
请访问 :netstorage.iar.com/.../iccarm.ENU.html
有什么想法吗?
此致、
Christian
