完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在使用 Psoc Creator 和 cy8ckit-42,并在简单的 blinky 项目中添加了一个冗长的汇编文件。 虽然代码一直在成功构建和运行,但随着代码的增大,在代码的其他部分添加一个额外的宏实例并正确运行,就会导致 M0120 构建错误:
构建错误:偏移无效,值过大 (0x00000404) 该宏只访问寄存器,但指令"ldr r1,=0x00010000" 反汇编显示,在另一个实例中使用 pc 偏移量访问常量,因此我猜一定是这个偏移量太大了。 解决这个问题的唯一办法是在内存中声明常量吗? 非常感谢 |
|
相关推荐
1个回答
|
|
M0120 构建错误通常是由于代码大小超出了微控制器的内存限制。在这种情况下,您可以尝试以下几种方法来解决这个问题:
1. **优化代码**:检查您的代码,看看是否有可以优化的地方,例如减少变量数量、使用更简单的算法等。 2. **使用内存映射**:将常量存储在内存中,而不是使用宏。这可以通过定义一个常量数组或结构体来实现。例如: ```c const uint32_t my_constants[] = { 0x00010000, // 其他常量... }; ``` 然后在汇编代码中使用内存映射访问这些常量: ```assembly LDR R1, =my_constants LDR R1, [R1] ``` 3. **分割代码**:将代码分割成多个较小的模块,以减少单个文件中的代码量。这可以通过创建多个源文件和头文件来实现。 4. **使用外部存储器**:如果可能的话,考虑使用外部存储器(如闪存或外部RAM)来存储部分代码或数据。 5. **升级硬件**:如果以上方法都无法解决问题,您可能需要考虑升级到具有更大内存的微控制器。 6. **联系技术支持**:如果问题仍然存在,您可以联系PSoC Creator的技术支持团队,他们可能会提供针对您特定问题的解决方案。 希望这些建议能帮助您解决 M0120 构建错误。祝您好运! |
|
|
|
只有小组成员才能发言,加入小组>>
请教个XMC1404调试串口接收时为什么一直无法接收数据的问题
379 浏览 0 评论
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
6458 浏览 2 评论
4113 浏览 9 评论
请问TLE5012B_E1000 启动后为什么位置不能正确获取
3644 浏览 9 评论
1237 浏览 8 评论
469浏览 2评论
278浏览 2评论
388浏览 2评论
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
6481浏览 2评论
如果是打开已有的dave工程,怎么查看这个工程选择的mcu型号?
476浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-30 15:25 , Processed in 0.625721 second(s), Total 50, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号