英飞凌
直播中

李波

7年用户 1405经验值
私信 关注

使用Psoc Creator和cy8ckit-42在blinky项目中添加了一个冗长的汇编文件,会导致M0120构建错误怎么解决?

我正在使用 Psoc Creator 和 cy8ckit-42,并在简单的 blinky 项目中添加了一个冗长的汇编文件。 虽然代码一直在成功构建和运行,但随着代码的增大,在代码的其他部分添加一个额外的宏实例并正确运行,就会导致 M0120 构建错误:
构建错误:偏移无效,值过大 (0x00000404)
该宏只访问寄存器,但指令"ldr r1,=0x00010000" 反汇编显示,在另一个实例中使用 pc 偏移量访问常量,因此我猜一定是这个偏移量太大了。 解决这个问题的唯一办法是在内存中声明常量吗? 非常感谢

回帖(1)

shawon

2024-5-21 17:04:36
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 构建错误。祝您好运!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分