- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
IAR相关问题处理办法,及其注意事项
问题一:IAR中如何做位定义,位操作以前在STVD中,使用如下语句做位定义_Bool L1 @PA_ODR : 6; //数码管个位, 低电平点亮_Bool L2 @PA_ODR : 5; //数码管十位, 低电平点亮_Bool L3 @PA_ODR : 4; //数码管百位, 低电平点亮但是同样的语句在IAR中不能用了,编译时报错。后来,查看IAR中的头文件 iostm8s207rb.h,看到如下语句/*-------------------------------------------------------------------------* Port A bit fields*-----------------------------------------------------------------------*/#ifdef __IAR_SYSTEMS_ICC__#define PA_ODR_ODR0 PA_ODR_bit.ODR0#define PA_ODR_ODR1 PA_ODR_bit.ODR1想想看:既然可以用PA_ODR_ODR1来指定某个位,那么我再将某个位用define重新定义为我想要的名字不就可以了吗?心动不如行动,于是写下如下语句:#define Sound_K PA_ODR_ODR6; //语音控制K原本以为十拿九稳,肯定能编译通过,结果现实狠狠地教训了我一下,报错!Error【Pe029】:expected an expression我百思不得其解,以为IAR不支持这种重复定义的方式,于是换用bool,_Bool, _bool, bit ......各种方法尝试,结果均以失败告终,事情似乎走到了尽头。最后,抱着试一试的想法,我把原头文件中的语句#define PA_ODR_ODR6 PA_ODR_bit.ODR6换成#define Sound PA_ODR_ODR6 //语音控制K结果,编译通过了,我真是泪流满面啊,没想到问题解决了。回过头来,我再检查之前的语句#define Sound_K PA_ODR_ODR6; //语音控制K和后来我在IAR头文件中写下的语句#define Sound_K PA_ODR_ODR6 //语音控制K原来是多写了一个分号,导致编译失败。啊,我抓狂啊,基本功啊基本功,太重要了:C语言中,define语句结尾是不需要用分号的!问题二:IAR中是否支持二进制数的使用(0B表示二进制0X表示十六进制)二进制用后缀B(Binary),,八进制用后缀Q(原是字母O,Octal,避免与数字0混淆)如257Q,十进制用后缀D(Decimal也可以不用后缀)如175D或175,十六进制用后缀H(Hexadecimal),如AFH等.16进制的表示法,用字母H后缀表示,比如BH就表示16进制数11;也可以用0X前缀表示,比如0X23就是16进制的23.以前在STVD+COSMIC的环境下,端口初始化的语句为:PA_DDR = 0(二进制前缀)在IAR环境中,本语句报错,于是网上到处查找,结果大多数的说法是:IAR可以支持8、10、16进制,但是不支持2进制的表达方式。哎,没办法,之后改为如下方式:PA_DDR = 0X80; //0B 1000 0000(十六进制前缀)将原二进制数据作为注释。经过测试,编译可以通过。问题三:中断处理在本项目中需要用到多个中断,其中就包括定时器中断。之前在STVD环境下开发时,只要新建一个工程,系统就会自动为你添加main.c和stm8_interrupt_vector.c这两个函数,而且stm8_interrupt_vector.c函数中,已写好了很多代码,实际使用时,只需要写下自己的中断处理函数,然后将函数名复制到中断号相对应的结构体中即可被调用,部分代码如下:@far @interrupt void Timer2 (void){ //------ 清除中断标志 TIM2_SR1=TIM2_SR1 0xfe; (0xfe:唤醒命令)//------ 遥控信号计数 if(Remote1 || Remote2 || Remote3) {Count_Remote++; if(Count_Remote30)Count_Remote=30; } else Count_Remote=0
文档评论(0)