打印
[STM8]

IAR FOR STM8中编译错误

[复制链接]
484|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jlyuan|  楼主 | 2020-3-1 09:55 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
编译的时候出现Fatal Error[Pe035]: #error directive: "Please select first the target STM8S/A device used in your application (in stm8s.h file)"

使用特权

评论回复
沙发
huangchui| | 2020-3-1 10:05 | 只看该作者
要在stm8s.h的什么地方定义#define STM8S003F3?

使用特权

评论回复
板凳
jiajs| | 2020-3-1 10:07 | 只看该作者

Option -> c/c++ compiler -> Preprocessor -> defined symbols

使用特权

评论回复
地板
jlyuan|  楼主 | 2020-3-1 10:10 | 只看该作者
还是错的 难道不是这个引发的问题吗?

使用特权

评论回复
5
jlyuan|  楼主 | 2020-3-1 10:13 | 只看该作者
这么定义过之后也还是出现这个错误,难道不是这个原因?

使用特权

评论回复
6
zhanghqi| | 2020-3-1 10:16 | 只看该作者

一、IAR中的重复定义问题

在自己写头文件时,要记得将常量定义在.c文件中,如果将常量定义在.h文件中,当在main.c或者其他地方包含该头文件时,会将头文件中的常量定义包含到main.c中,同时,相应的.c文件也有该常量定义语句,就会导致linker报错,有xxxx重定义(redefined)。此外,当要在main.c中使用其他.c文件中定义的量时,要记得+ extern+ <类型>+<+变量名>。

标准的做法:在.h文件中声明变量,在一个.c文件中定义变量,其它.c文件要用到变量只要包含.h头文件,相当于变量声明,就可以引用其它.c文件中定义的变量了。一般只在头文件中声明变量,在原文件中定义变量,即使你在头文件中使用了预编译指令 #ifndef.... #define ... #endif,也不能在头文件中定义变量。不能定义,必须声明。

二、程序溢出问题(Error[Lp011]问题)

Error[Lp011]: section placement failed: unable to allocate space for sections/blocks with a total estimated minimum size of 0x2ba9 bytes in <[0x008000-0x009fff]>

原因:将library改为由full改为normal,一下子空间减少很多,还有printf和scanf的格式都由full改为small,不过这里不能用printf了。

(total uncommitted space 0x1f80).

11 971 bytes of readonly code memory

915 bytes of readonly data memory

726 bytes of readwrite data memory

Errors: 1

CPU:STM8S103F3P,它有8K FLASH[0x008000-0x009fff],有1K RAM,实际提示的FLASH大小为10582+809>8192

[0x008000-0x009fff]=8192,0x1f80=8064

0x3180=12672, 0x1f80=8064, 11971+915=12886

8s207就没有问题,换成103问题就溢出。

三、 Error[Pe169]: expected a declaration

答:多了}右大括号。

四、PL2303上电后鼠标乱动的解决办法:

1,重新上电,因为我们开发板带了一键下载电路,所以第一次上电,会引起几次(3~6次)MCU复位,很正常. 你不要每次都按电源键来实现复位,就不存在这个问题了.

2,因为你的例程,一上电,就通过串口输出数据了,而此时CH340还在和电脑通信,CH340在和电脑USB连接建立的时候,收到数据,就可能导致你的串口不被识别为串口,而被识别为什么ball之类的设备,从而鼠标乱飞.

解决办法:

上电之前,先按住MCU的复位,然后再上电.等10秒钟左右,再释放复位.就一切OK了.

使用特权

评论回复
7
zhanghqi| | 2020-3-1 10:20 | 只看该作者
是不是芯片没有选啊

使用特权

评论回复
8
houcs| | 2020-3-1 10:23 | 只看该作者

也有可能是配置的问题 选择器件啥的

使用特权

评论回复
9
jlyuan|  楼主 | 2020-3-1 10:28 | 只看该作者
本帖最后由 jlyuan 于 2020-3-1 10:32 编辑

不是太懂

257565e5b1da622f1a.png (50.14 KB )

257565e5b1da622f1a.png

使用特权

评论回复
10
morrisk| | 2020-3-1 10:33 | 只看该作者

使用特权

评论回复
11
morrisk| | 2020-3-1 10:35 | 只看该作者
可以在这里定义,

使用特权

评论回复
12
morrisk| | 2020-3-1 10:35 | 只看该作者
也可以在stm8s.h中,找到它的位置,你把你要用的器件的注释取消掉也行

使用特权

评论回复
13
jlyuan|  楼主 | 2020-3-1 10:39 | 只看该作者
嗯,那我按大家的说法挨个排查一下

使用特权

评论回复
14
zjq985062714| | 2020-3-1 10:56 | 只看该作者
应该就是10楼和11楼说的了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

880

主题

12030

帖子

4

粉丝