刚去ST的新网站看了下,STM8的库还是1.1.1的
在用1.1编译器的时候,虽然在C/C++ Compiler里勾选上了Require prototype,但是发现没有函数原型的话编译器是不会报错的,也就是说IAR EWSTM8 1.1并没有严格检查函数原型是否声明了,但是在1.2下发现这一项的检查非常严格了,加上函数原型声明后,剩下几十个错误信息都是因为库函数没有原型声明造成的,观察下发现,在STM8库的头文件里,只声明了COSMIC编译器下的函数原型,并没有IAR下的头文件声明,我把Require prototype前面的勾选去掉后,编译通过了,但是原先在1.1下产生的警告信息还存在,比如在void UART2_DeInit(void)函数中,有这样的语句
{
u8 dummy = 0;
dummy = UART2->SR;
dummy = UART2->DR;
}
读SR DR寄存器是为了清除某些标志位,用来DeInit UART2,但是编译器给出的警告信息是Warning[Pe550]: variable "dummy" was set but never used
意思是说该变量从来没用过,那么在定义的前面加上volatile后,编译就通过了,这么简单的问题还没处理掉说明IAR的STM8库还是有些粗糙哇,另外IAR EWSTM8都到1.2版本了,ST早应该更新下STM8的库了,并且好好提高下对IAR编译器的支持,希望香水版主重视下呀
{
u8 dummy = 0;
dummy = UART2->SR;
dummy = UART2->DR;
}
读SR DR寄存器是为了清除某些标志位,用来DeInit UART2,但是编译器给出的警告信息是Warning[Pe550]: variable "dummy" was set but never used
意思是说该变量从来没用过,那么在定义的前面加上volatile后,编译就通过了,这么简单的问题还没处理掉说明IAR的STM8库还是有些粗糙哇
----------------------------------------------------------
加volatile 会影响优化。
更好的方法是加一个空语句:
(void)dummy;
void UART2_DeInit(void)
{
u8 dummy = 0;
dummy = UART2->SR;
dummy = UART2->DR;
(void)dummy;
}
问题是ST应该升级下STM8的库了,好好支持下EWSTM8
应该说是编译器本身没做好,太笨! 通过这句话"在定义的前面加上volatile后,编译就通过了"更说明了是编译器的问题!
同意“4楼: 问题是ST应该升级下STM8的库了,好好支持下EWSTM8 ”
想问一下楼主,V1.2怎么破解啊。能不能教教我们怎么破解呢?或是发个破解文件,注册机之类的出来大家共享一下吧。
大力支持楼主
typedef enum
{
GPIO_MODE_IN_FL_NO_IT = (u8)0b00000000, /*!< Input floating, no external interrupt */
GPIO_MODE_IN_PU_NO_IT = (u8)0b01000000, /*!< Input pull-up, no external interrupt */
GPIO_MODE_IN_FL_IT = (u8)0b00100000, /*!< Input floating, external interrupt */
GPIO_MODE_IN_PU_IT = (u8)0b01100000, /*!< Input pull-up, external interrupt */
GPIO_MODE_OUT_OD_LOW_FAST = (u8)0b10100000, /*!< Output open-drain, low level, 10MHz */
GPIO_MODE_OUT_PP_LOW_FAST = (u8)0b11100000, /*!< Output push-pull, low level, 10MHz */
GPIO_MODE_OUT_OD_LOW_SLOW = (u8)0b10000000, /*!< Output open-drain, low level, 2MHz */
GPIO_MODE_OUT_PP_LOW_SLOW = (u8)0b11000000, /*!< Output push-pull, low level, 2MHz */
GPIO_MODE_OUT_OD_HIZ_FAST = (u8)0b10110000, /*!< Output open-drain, high-impedance level,10MHz */
GPIO_MODE_OUT_PP_HIGH_FAST = (u8)0b11110000, /*!< Output push-pull, high level, 10MHz */
GPIO_MODE_OUT_OD_HIZ_SLOW = (u8)0b10010000, /*!< Output open-drain, high-impedance level, 2MHz */
GPIO_MODE_OUT_PP_HIGH_SLOW = (u8)0b11010000 /*!< Output push-pull, high level, 2MHz */
}GPIO_Mode_TypeDef;
改为#define GPIO_MODE_IN_FL_NO_IT (u8)0b00000000
等等就行了
#define GPIO_Mode_TypeDef u8
然后库的警告就少很多了,
某些读-清除的 加上 3楼说的方法就行了,没一点警告了
记号,我回头我要看
生活在激情中 ... 希望 哈哈
https://home.eeworld.com.cn/?80086