STM8问题汇总

来源:互联网 发布:汉诺塔非递归算法c语言 编辑:程序博客网 时间:2024/06/05 22:30

更新、汇总所有遇到的STM8相关问题  ,如有些许帮助请点【顶】


 2017、7、28更新


1.在STVD上开发,Build提示bad struct/union operand  



这是因为工程文件太大的缘故,对提示的没有使用到的头文件,源文件进行删减即可解决问题





2.DEBUG按钮点击后提示  ERROR:before starting debug session,please,select a target




如图所示,选swim ST-LINK然后确认即可





3.在IAR上函数输入的参数有错,参数实际值不对或为0


有一个函数的参数类型有多个使用uint8_t作为参数类型声明时候,出现传入的参数不对的情况,uint8的声明在其他文件内,后改为int暂时解决。该问题与多地方定义了uint8_t声明有关系,有时候注释无用、重复的声明,宏定义可能没有生效起到如果重复则不编译的作用。





4.STVD编译提示 space attribute conflict 错误


主要是在中断程序设计部分遇到的问题


如果当前中断程序声明是@near @interrupt  void xxxx(void)那么修改为@far @interrupt  void xxxx(void),如果当前是@far则同理改为@near




5.STVD编译出错提示bad struct/union operand


在左侧栏,工程名称处右键,切换到C Compiler


指定位置Preprocessor Definitions文本框处填写具体的型号名称







6.在STVD下编译的程序,DEBUG无法进入中断


先检查stm8s.h中宏定义的芯片型号是否正确。



然后检查中断向量表stm8s_interrupt_vector.c对不对。





7.编译提示missing enumeration member错误

STVD的C Compiler 不允许enum类型最后一位成员末尾加逗号,去掉逗号即可。







8.STVD提示invalid indirection operand,找不到数组但数组已经定义过


#error cpstm8 ..\user\stm8s_it.c:247(17) invalid indirection operand#error cpstm8 ..\user\stm8s_it.c:247(20+13) bad struct/union operand#error cpstm8 ..\user\stm8s_it.c:247(6+10) aArray undefined


在文件顶部添加extern ,例如原型声明为int  aArray[MAX];则添加一条extern int  aArray[MAX];让编译器主动在其他文件中寻找定义




9.STVD编译提示old style argument declaration


这一情况是因为用到了u8,u16,u32,DWORD等定义用于函数或者函数参数的声明,需要在头文件顶部添加#include "stm8s.h",这是因为u8的定义在该文件内,如果没有加上头文件,COSMIC编译器就会提示该错误。



10.c语言 incompatible argument type 错误


我所遇到这一问题发生将一个结构体传入函数中时候,结构体是指针,而要传入到这个函数中时是作为一般结构体传,因此导致。将这个函数的参数声明更改为指针即可,例如原先为

void typeProcess(struct data currenDat)

currenDat.time

改为

void typeProcess(struct data *currenDat)

currenDat->time



或者输入参数加上取地址符号 &currenDat

即可解决该问题



11.编译错误 missing prototype


该问题容易出现在没有形参的情况,比如void named()这样的函数声明在STVD+COSMIC的编译环境是不通过的,需要更改声明为void named(void)

原创粉丝点击