STM32
直播中

张波

8年用户 1510经验值
私信 关注
[问答]

STM8S207R8使用IAR编译自己的程序的时候,超出64K编译器报错是怎么回事?

接到一个客户反映:使用STM8S207R8,FLASH是64K。使用IAR编译自己的程序的时候,超出64K,编译器报错。将编译器工程下的芯片型号设置成STM8S207RB,128K,然后编译完成。直接下载程序到64K这款IC,居然成功了。然后所有功能运行都还正常。
问:1.编译器不认具体芯片的型号。这个核实过了。
         2.编译器编译完成已经超过芯片自身的flash容量了,还有超出的数据单独下的。据说超出总共近20K。为什么程序还能正常运行?
         3.这样做有什么风险?
PS:ST这芯片有这么不靠谱吗?太神奇了,期待大神解答!

回帖(1)

杨勇

2024-5-17 18:05:09
这个问题涉及到STM8S207R8芯片、IAR编译器和编译过程中的一些限制。首先,我们逐步分析这个问题。

1. 编译器不认具体芯片的型号。
   这个问题可能是由于IAR编译器的配置或者版本问题导致的。确保使用的是最新版本的IAR编译器,并检查项目设置以确保选择了正确的芯片型号。

2. 编译器编译完成已经超过芯片自身的flash容量了,还有超出的数据单独下的。据说超出总共近20K。为什么程序还能正常运行?
   这个问题可能是因为在编译过程中,编译器没有正确地限制程序的大小。虽然程序大小超过了芯片的FLASH容量,但在实际运行时,可能只使用了芯片的64K容量。这种情况下,程序仍然可以正常运行,因为实际使用的内存没有超过芯片的容量。然而,这并不意味着这是一个好的做法,因为可能会导致一些不可预见的问题。

3. 这样做有什么风险?
   使用超过芯片FLASH容量的程序存在以下风险:

   a. 程序可能无法在其他相同型号的芯片上运行,因为它们可能没有足够的空间来存储整个程序。
   
   b. 如果程序在运行过程中需要更多的内存,可能会导致内存溢出,从而导致程序崩溃或出现不可预测的行为。
   
   c. 在编译过程中,编译器可能无法正确地优化程序,导致性能下降或者增加功耗。

为了避免这些问题,建议:

1. 确保使用正确版本的IAR编译器,并在项目设置中选择正确的芯片型号。

2. 在编写程序时,尽量优化代码以减少内存占用。

3. 如果程序确实需要超过64K的FLASH容量,可以考虑使用具有更大FLASH容量的芯片,如STM8S207RB。

4. 在编译过程中,确保编译器能够正确地限制程序的大小,以避免超出芯片的FLASH容量。
举报

更多回帖

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