【Bug反馈】YCT工具生成的RamInit0.s在4字节对齐配置下导致GHS编译报错
-
问题描述:
在使用YCT工具配置工程时,当将RAM初始化区域配置为 4字节对齐 (4bytes align) 时,工具生成的 RamInit0.s 汇编代码在 Green Hills (GHS) 编译器下编译失败。
环境信息:
芯片型号: YTM32B1LE0x
编译环境: Green Hills Software (GHS) / asarm
报错文件: RamInit0.s复现步骤:
- 列表在YCT工具中,将RAM大小设置为4的倍数,触发四字节对齐。
- 生成代码。
- 使用GHS编译器进行编译。
编译器报错如下:
[asarm] (error #2071) ... RamInit0.s 63: bad parameter
STR R0, [R1], #4

-
这个是yt-link里的bug
错误原因:
YTM32B1LE0 是
Cortex-M0+内核,Armv6-M架构,只支持部分Thumb2指令:
而这里使用的 LDR 指令的写法是 Thumb2 的
Post-indexed variant,在Armv6-M中是不支持的,Armv6-M中只支持这样的指令形式:LDR{<q>} <Rt>, [<Rn> {, #+/-<imm>}]而这个文件里的写法是
Post-indexed variantLDR{<c>}{<q>} <Rt>, [<Rn>], #{+/-}<imm>
修改方式
写一次后手动增加寄存器:

_RAM_start: /* 4bytes align */ LDR R1, =RAM_memory_start LDR R2, =RAM_memory_end SUBS R2, R2, R1 SUBS R2, #1 BLE _RAM_end LDR R0, =0x5A5A5A5A _RAM_loop: STR R0, [R1, #4] ADDS R1, #4 SUBS R2, #4 BGE _RAM_loop _RAM_end: BX LR
快速上手云途开发生态
发帖前请查看
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...
