更新、汇总所有遇到的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
或者输入参数加上取地址符号 ¤Dat
即可解决该问题
11.编译错误 missing prototype
该问题容易出现在没有形参的情况,比如void named()这样的函数声明在STVD+COSMIC的编译环境是不通过的,需要更改声明为void named(void)