第一个STM8项目的记录

本文记录了作者在第一个STM8项目中遇到的问题,包括misplaced local declaration错误、数据类型长度限制、中断中使用long类型的问题、IAR初始化操作、STM8的特定问题、串口发送速度调整、C语言错误以及代码优化等。在解决问题的过程中,作者分享了具体的解决方法和经验教训。
摘要由CSDN通过智能技术生成

说明

我的第一个项目是stm8。
显示部分是点阵加数码管,通过串口控制下位机变频器的运行。虽然看起来很简单,但是项目复杂度超过我以前开发板上的所有项目,因此碰到了很多前所未有的问题。在此记录一笔。
注,这是本人第一个项目的记录,不保证科学与正确


1,misplaced local declaration错误

变量必须在函数的最开始处一口气全部声明或者定义掉
这其实是说明cosmic不支持c99的原因。


2,stm8中,各数据类型长度

类型 长度
char 1字节8bit
int 2字节16bit
short int 2字节16bit
float 4字节32bit
double 4字节32bit
long int 4字节32bit
long long int 4字节32bit

为了以后移植方便,我决定采用C99的扩展类型uint8_t uint16_t这种。


3,STVD的中断中不能使用long类型

小标题只是该bug的表现之一。确切的bug描述是
在stm8_interrupt_vector.c使用超过2byte的类型。就会产生类似段重合之类的错误。
这里写图片描述
下面是bug的详细描述。

3.1。

在stm8_interrupt_vector.c中,函数定义里的变量不能超过2个byte。这个函数不仅仅是中断处理函数,还包括放在这个文件中的普通函数,这个变量限制对全局变量局部变量同样有效。

3.2。

同样,在这个文件中的变量默认是signed类型,就算在使用前声明为extern unsiged也不行,但是在使用中进行强制类型转换(unsigned int )或者数字后面加u是可行的。
这句话的意思是比如声明变量的时候为unsiged int,那么理论上的变量范围是0~65535。而stm8的int类型是2byte,理论上是不会报错的。
但是实际上,如果变量使用的时候超过了32768。那么就会报错。即变量在使用过程中如果超过了有符号类型的最大值,那么编译器就会进行扩展成4byte。
这种bug,即使在使用文件前extern一下也是不行的。
但是,如果在使用中,再进行一次强制类型转换(unsigned int)或者数字后面加个u

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值