当前位置:首页 > 单片机 > 单片机
[导读]1. LAB100.C(12): error C216: subscript on non-array or too many dimensions 原程序如下:#include#includevoiddelay(int);unsignedcharcodedis_code[8]={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a};main(){inti,

1. LAB100.C(12): error C216: subscript on non-array or too many dimensions 原程序如下:

#include#includevoiddelay(int);unsignedcharcodedis_code[8]={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a};main(){inti,j;P2=0xff;while(1){P2=0x7f;for(i=0;i<8;i++){P0=dis_code[i];P2=_crol_[j,1];j=P2;delay(1);}}}voiddelay(intx){inti;for(i=0;i

问题在于P2=_crol_[j,1];

应该改为P2=_crol_(j,1);

2. 从网上COPY的程序执行类似的功能,有时候如果现象没出现,或者不明显,可以调整下延迟函数。

3. 数码管的扫描显示0—7,延迟函数的延迟时间在1ms左右,是通过人眼的视觉暂留而产生的现象,如果延迟函数设置的太大,则看不到持续显示0—7的现象。

4. 用KEILC51调试程序时,出现错误提示为“unprintable character 0XA1 skipped”的问题。输入法的问题。在程序行输入中文模式下标点符号,不会显示,但是会出现标题这样的问题。 打上//马上就能看到没有显示的标点符号。

5.*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS  SEGMENT: ?PR?_COMPARE?TESTLCD
说明:程序中有些函数(或片段)以前(调试过程中)从未被调用过,或者根本没有调用它的语句。这条警告信息前应该还有一条信息指示出是哪个函数导致了这一问题。只要做点简单的调整就可以。不理它也没什么大不了的。
解决方法:去掉COMPARE()函数,或利用条件编译#if …..#endif,可保留该函数并不编译。

6.LAB99.C(19): error C141: syntax error near '{', expected 'const'程序如下:

#include#includesbitLEDP=P1^0;unsignedcharcounter;main(){TMOD=0x01;TH0=0x3C;TL0=0xB0;counter=0x0A;EA=1;ET0=1;TR0=1;while(1){};}voidtimer0_int(void)interrupt{TH0=0x3C;TL0=0xB0;counter--;if((counter)!=0){counter=0x0A;LEDP=~LEDP;}}

问题在中断函数的写法上,C下面51的中断函数要这么写:

voidtimer0_int(void)interruptNusingM

其中的N是不同中断对应的中断号,一般单片机的书上都有说明的,M是这个中断函数在存储空间中所占的bank,一般不要和main函数的一样就可以了,而main函数的在bank0,那么针对51单片机,这个M可以为1,2,3。

7.C51编译警告“*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL”

*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: ?C_START
MODULE: .STARTUP.obj (?C_STARTUP)
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: ?C_START
MODULE: .STARTUP.obj (?C_STARTUP)
ADDRESS: 000DH

如果你在用C51编译器出现上面的警告,并且找遍了网上也没能找出个究竟时,你是否觉得这个问题很难,难得以至于没人能回答呢?其实这个只是初学者和粗心者才会犯的错误:没把C文件添加到项目中!另外,还有可能是因为存在没有被调用的已经定义的函数。

8.*** WARNING L15: MULTIPLE CALL TO SEGMENT***

原因Warning 15向我们表明了linker发现了一个函数,这个函数不仅在main code里被调用了,而且在ISR(或者被ISR调用的函数中)被调用了。或者是被同时被多个ISR同时调用了。这样会产生一个问题,就是在此函数不是一个可重入函数,而当此函数已经在执行时它可能被另一个ISR所调用。这样就会导致结果是可变的而且很可能会导致一些参数的错误。另一个问题就是本地变量和参数所使用的内存可能被其他函数的内存覆盖。如果函数是由中断所调用的,则此函数的内存就会被使用。这会引起其它函数的内存错误。

举例来说,对于你的第一个警告,WRITE_GMVLX1_REG是会被多个root所调用。其被定义在D_GMVLX1.C或者D_GMVLX1.A51中。他不仅会被ISR(或者被ISR调用的函数)而且也会被MAIN.C中的VSYNC_INTERRUPT函数所调用。
解决办法:
(1)主程序调用该函数时禁止中断,可以在该函数被调用时用#pragma disable语句来实现禁止中断的目的。必须使用OVERLAY指令将该函数从覆盖分析中除去。
(2)复制两份该函数的代码,一份到主程序中,另一份复制到中断服务程序中。
(3)将该函数设为重入型。例如:

voidmyfunc(void)reentrant{...}

这种设置将会产生一个可重入堆栈,该堆栈被被用于存储函数值和局部变量,用这种方法时重入堆栈必须在STARTUP.A51文件中配置。这种方法消耗更多的RAM并会降低重入函数的执行速度。

9.

voiddelay(unsignedchari){while(i--){;}}main(){unsignedchari,k;while(1){i=8;delay(i);i=7;delay(i);k=10;}}

编译器的意思是我那行程序i=7;没有用,怎么解决这个问题?呢实际上是被编译了的,调用函数时传递的的确是7。没有写回到 i 倒是事实,因为编译器认为后面不再用 i 了,所以就没有回写。如果你将下面的k=10改成k=i,那么就会将7写回到i,并且keil编译器不会直接使用立即数7,而用一条减1指令,从前面的8减1变成7。

10. 单片机中_crol_函数的的意思:
_crol_(a,m) 将a循环左移,步进为m
_cror_(a,n) 将a循环右移,步进为n

11.

if(temp-ret>min_value){min_value=temp-ret;min_id=i;}

LAB06.C(72): error C193: '-': illegal op-type(s)

此处需要强制类型转换,因为上面有一定义

unsignedintret[50];unsignedinttemp=0;

temp和ret不是同一类型数据。

12.

#include"stdafx.h"#include"stdio.h"#include"conio.h"intmain(intargc,char*argv[]){chara[9][9]={{"","","","*"},{"","","*","*","*"},{"","*","*","*","*","*"},{"*","*","*","*","*","*","*"},{"","*","*","*","*","*"},{"","","*","*","*"},{"","","","*"}};inti,j;printf("%c",a[i][j]);return0;}

error C242: 'a[][]': too many initializers

如果要使用缺省赋值,则前面的每行不能缺省赋值,只能在最后缺省,也就是你可以对前7行进行完全赋值,后两行缺省,却不能每行中缺一些,还缺行. initializer 初始化。

13.Warning 280:’i?unreferenced local variable

说明局部变量 i 在函数中未作任何的存取操作。解决方法:消除函数中 i 变量的宣告。

14.Warning 206:’Music3?missing -prototype

说明Music3( )函数未作宣告,或未作外部宣告

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭