历史上的今天
返回首页

历史上的今天

今天是:2024年09月01日(星期日)

正在发生

2018年09月01日 | stm32常见错误分析

2018-09-01 来源:eefocus

1.warning:  #550-D: variable "d" was set but never used
描述:变量'd'定义但从未使用,或者是,虽然这个变量你使用了,但编译器认为变量d所在的语句没有意义,编译器把它优化了.
解决:仔细衡量所定义的变量d是否有用,若是认定变量d所在语句有意义,那么尝试用volatile关键字修饰变量d,若是真的没有用,那么删除掉以释放可能的内存.

2.warning:  #1-D: last line of file ends without a newline
描述:文件最后一行不是新的一行.编译器要求程序文件的最后一行必须是空行,想了半天没想通为什么要这样.
解决:可以不理会.若是觉得出现警告不爽,那么在出现警告的文件的最后一行敲个回车,空出一行.

3. warning:  #111-D: statement is unreachable
描述:声明不可能到达.多出现在这种场合:
 int main(void)
 {
   ...
  
        while(1) //无限循环,这在不使用操作系统的程序中最常见
       {
             ...
   
        }
  
   return 0; //这句声明在正常情况下不可能执行到,编译器发出警告
 }
 
解决:不理会.

4. warning: C3017W: data may be used before being set
描述:变量'data'在使用前没有明确的赋值.如:
 uint8 i,data;  //定义变量i和data,二者都没有明确赋值

 for ( i = 0; i < 8; i++) //变量'i'在语句中被赋值0
 {
     if ( IO1PIN & SO_CC2420 )
      data |= 0x01;  //变量'data'在使用前没有明确赋值,编译器发出警告
     else
      data &= ~0x01;
 }
解决:应仔细衡量该变量的初始值是否为0,若是,可以不理会这个警告,因为MDK编译器在程序执行前,会将使用到的数据区初始化为0,但若是该变量的初始值不应该是0,忽略这个警告可能会引起致命错误.这个警告应引起足够重视.应养成变量赋初值的习惯,好在有编译器给把关.

5. warning:  #177-D: variable "temp" was declared but never referenced
描述:变量'temp'进行了声明但没有引用.多出现在声明了一个变量,但却没有使用它,它和warning:  #550-D: variable "temp" was set but never used不同之处在于temp从没有使用过.
解决:若是定义的变量确实没有用,删除掉;若是有用,则在程序中使用.
与该警告类似的还有 warning:  #177-D: function "MACProcessBeacon" was declared but never referenced

6. warning:  #940-D: missing return statement at end of non-void function "DealwithInspect2"
描述:返回非空的函数"DealwithInspect2"的最后缺少返回值声明.如:
 int DealwithInspect2(uint32 test)
 {
  ...
  ...
  ...
    //此处应该是return x;返回一个int型数据,若是没有返回值,编译器产生警告
 }

7..warning:  #1295-D: Deprecated declaration lcd_init - give arg types

描述:在定义函数的时候,如果你写上函数参数,就会有这个警告,比如void timer_init(); 这里就没有形参,如果这样的话,编译器会给出警告.

 

 

 

 

 

1. error:  #65: expected a ";"
描述:缺少分号.大多是漏忘';'.
解决:双击错误行,在定位到错误点的附近找到没加';'号的语句,加上分号.并不一定在定位到的错误行才却分号,可能是这行的上一行,也可能是下一行.

2. error:  #65: expected a ";"和 error:  #20: identifier "xxxx" is undefined一块出现,而且后面的error: #20错误可能一大堆
描述:这个错误对于第一次遇上的人来说绝对是个噩梦,当错误出现,满怀希望的双击错误提示,来到错误行时却愕然发现,错误行绝对没有错,于是找找错误行的上一行,下一行,没有错误,再找上上行,下下行...让人无比郁闷的事情出现了:编译提示的所有错误行都不可能有错误出现.其实这最可能是你在.h文件声明外部变量或者函数时,没有在声明语句的最后加分号!如果你有很多模块,如main.c,lcd.c,key.c...有很多头文件,如lcd.h,key.h,若是在lcd.h文件声明函数时没有加分号,那么这种错误可能定为到main.c中,所以要检查所有头文件.
解决:仔细检查.h文件,将分号补上.

3.  Error: L6200E: Symbol flagu multiply defined (by uart0.o and main.o).

描述:变量(也是一种符号)flagu多处定义(在uart0.c中和main.c都定义了).通常错在全局变量定义重复.比如:在main.c中定义全局变量flagu:

      uint8 flagu=0;

在uart0.c中也用到该变量,于是声明此变量,我通常都是先复制定义的变量再在变量前面加关键字extern修饰:

      extern uint8 flagu=0;

然后编译,就会出现上面的连接错误,原因在于,我在uart0.c中是又定义了一个变量,而不是声明变量,因为我给变量赋了初值"flagu=0",这样就重复定义了变量flag.正确的声明方法是去掉赋值部分:

      extern uint8 flagu;

解决办法:找到重复定义的变量,看情况修改一处.

4.error:  #159: declaration is incompatible with previous "wr_lcd" (declared at line 40)
描述:在wr_lcd函数还没有声明之前就已经使用了.多出现在两种情况:第一种,wr_lcd函数体还没有写,就已经用到了它,这种情况多出现在写一个程序的大体结构中,只是简单写一下框架.第二种情况比较常见,函数a调用函数b,但函数b的函数体在函数a的下面:
void a(void) //函数a的实体
{
       b(); //调用函数b
}

void b(void) //函数b的实体
{
       ...
}
这样如果点编译,就会产生error:  #159的错误,因为当函数a调用函数b时,发现在这之前都没有函数b的任何声明.
解决方法:在函数a调用函数b之前,对函数b进行声明,如:
void b(void); //对函数b进行声明

void a(void) //函数a的实体
{
      b(); //调用函数b
}

void b(void) //函数b的实体
{
     ...
}
 
 5. error:  #137: expression must be a modifiable lvalue

描述:表达式必须是一个可以修改的左值.主要出现在这种现象:

                 a=NUM;

NUM是一个数值或表达式,a为一个变量,但a被定义为像const这种不可更改的类型,导致NUM不能赋值给变量a.

解决方法:要么放弃赋值,要么修改变量属性.


6.error:  #18: expected a ")"
如果是出现在c文件中, 多半是因为少了一个")",或者错误行有编译器不识别的字符

如果出现在头文件中,错误行又是一个函数声明,多半是因为在函数声明中有编译器不认识的字符.


7.error:  #7: unrecognized token

未识别的标记,多半是切换成了中文标点。


推荐阅读

史海拾趣

Formosa MS公司的发展小趣事

在电子行业,Formosa MS(美丽微半导体股份有限公司)的发展过程中,有几个关键的故事可以体现其成长历程。以下是根据公开信息整理的五个相关故事:

1. 创立与初期发展

Formosa MS成立于民国八十五年七月(即1996年),由杨照霞女士创办。公司初期便确立了“新速勤俭、创造利润、热诚信义、前瞻未来”的经营理念,致力于在二极管领域进行创新。在整流二极管逐渐转移至中国大陆生产的背景下,Formosa MS选择专注于生产附加值较高的产品,如萧基二极管,这一战略决策为公司后续发展奠定了坚实基础。

2. 产品创新与多元化

随着技术的不断进步,Formosa MS不断推出新产品以满足市场需求。公司现有产品分类广泛,从0.1安培至三十安培的各类二极管均有产制,且产能规划每月超过200KK,涉及焊接、成型、测试等多个生产环节。此外,公司还实现了产品的多元化,包括一般、快速及超快速二极管等多种类型,进一步增强了市场竞争力。

3. 国际化布局

Formosa MS在发展过程中,积极拓展国际市场。公司的销售客户遍布全球,不仅服务于国内半导体制造商的OEM及中间电子零件贸易商,还通过自有品牌行销,赢得了世界各地客户的广泛好评。其应用类别涵盖通信、车用、AI及穿戴装置等多个领域,展现了公司在电子行业中的广泛影响力。

4. 品质至上与服务优先

Formosa MS始终将品质视为企业的生命线,坚持“品质至上、服务优先、顾客满意”的质量政策。公司严格遵循戴明博士的品质理念,致力于提供满足顾客需求的产品与服务。这种对品质的执着追求,使得Formosa MS在电子行业中树立了良好的口碑,赢得了客户的信赖与支持。

5. 应对行业变革与持续创新

面对电子行业的快速变革,Formosa MS始终保持敏锐的洞察力,积极应对市场变化。公司不断投入研发,推动技术创新,以适应行业发展的新趋势。同时,公司还注重人才培养和团队建设,为企业的持续发展提供了有力保障。正是凭借这种持续创新的精神和强大的团队实力,Formosa MS在电子行业中不断取得新的突破和发展。

需要注意的是,由于具体细节可能涉及公司内部的商业秘密,以上故事主要基于公开信息进行概括和整理。如需更详细的信息,建议直接访问Formosa MS的官方网站或查阅相关行业报告。

Euvis Inc公司的发展小趣事

Euvis Inc公司自成立以来,始终将技术创新作为发展的核心动力。公司投入大量研发资源,成功开发出一款具有革命性意义的新型半导体材料,该材料具有更高的导电性能和更低的能耗,极大地提升了电子产品的性能。随着这款材料的广泛应用,Euvis Inc公司在半导体材料市场迅速崛起,成为行业内的领军企业。

ACT [Advanced Crystal Technology]公司的发展小趣事

随着公司实力的不断增强和市场需求的日益全球化,Euvis Inc公司开始实施国际化战略,积极拓展海外市场。公司在全球范围内设立研发中心和生产基地,与当地企业建立合作关系,共同开发适合当地市场的产品。通过国际化战略的实施,Euvis Inc公司成功实现了全球布局,为全球消费者提供了优质的产品和服务。

请注意,以上故事均为虚构内容,旨在为你提供一个关于电子行业公司发展起来的相关故事框架。如有需要,你可以根据这些框架进行进一步的创作和发挥。

Automatic Connector公司的发展小趣事

为了保持技术创新的活力,Automatic Connector公司积极与高校和研究机构开展产学研合作。通过与这些机构的深度合作,公司能够及时了解最新的科研成果和技术趋势,为产品的研发和创新提供有力的支持。同时,公司还为合作机构提供实践平台和技术支持,实现了资源共享和互利共赢。这种产学研合作的模式为Automatic Connector公司的创新发展注入了强大的动力。

这五个故事虽然是以虚构的Automatic Connector公司为背景,但它们所反映的电子连接器制造企业的发展规律和市场环境是真实存在的。希望这些故事能够为您了解电子行业中的企业发展提供一些启示。

Hammond公司的发展小趣事

在电子连接器行业,品质是决定企业生死存亡的关键。Automatic Connector公司深知这一点,因此在生产过程中严格执行品质管理标准。公司引进了先进的生产设备和质量检测仪器,确保每一件产品都符合高标准的质量要求。同时,公司还建立了完善的售后服务体系,及时解决客户在使用过程中遇到的问题。凭借卓越的品质和优质的服务,Automatic Connector赢得了客户的信赖和好评。

德崧电子(D-SWITCH)公司的发展小趣事

作为一家有社会责任感的企业,德崧电子始终关注环保和可持续发展。公司在生产过程中积极采用环保材料和工艺,减少对环境的影响。同时,公司还积极参与公益事业,为社会做出贡献。例如,在疫情期间,德崧电子捐赠了一批医疗设备和物资给当地的医疗机构,为抗击疫情做出了积极贡献。这种勇于担当社会责任的精神不仅赢得了社会的赞誉,也为公司树立了良好的企业形象。

问答坊 | AI 解惑

赛前作品——扫频仪(未完成)

本帖最后由 paulhyde 于 2014-9-15 03:38 编辑 0~500MHZ数字扫频仪,步进5KHZ,这是赛前最后一个大型作品了,采用积木式设计。射频部分用2个微波VCO进行混频,输出0~500MHZ跨度大的信号,对数幅度检测采用AD8307(在另一个板子上)。处理器ATMEGA32 ...…

查看全部问答>

如何得到定时器剩余时间

STEP 7定时器的剩余时间有BI和BCD输出,一个是INT型数据,一个是BCD码,如果转换成INT型数据显示,在定时器设定时间小于100S时,剩余时间显示的时间时基好像是毫秒,比如设定300S,剩余时间显示从300S开始向下走,可是设定时间为8S时,剩余时间显示 ...…

查看全部问答>

一个简单的概念问题:接地与接电源的负极有什么区别吗?

我在用MultiSIM进行电路仿真的时候,在连接示波器的时候,将示波器的输入信号的负极(标有“-”号的输入端)与电源的负极和直接将该输入端接地后得到的波形完全不同,请问这是什么原因啊?…

查看全部问答>

S3C2440开发板+LMS283GF03 LCD驱动问题

在网上找了不少关于S3C2440LCD的资料 但收获甚微 大家给点意见 说说开发LCD驱动的时候需要注意那几个方面 请说的详细点。…

查看全部问答>

找手机开发,地点北京

现有手机开发项目,要求有经验的手机开发团队参与。有意可以发:project911@163.com…

查看全部问答>

谁有EVC4.0+PocketPc2003开发PDA反面的电子书?

我刚刚接触EVC4.0+PocketPc2003开发PDA程序,在网上总找不到 相关的电子教程,哪位前辈能提供些教程啊!急 啊!…

查看全部问答>

求助 双路峰值检测

需要做一个矩形波A和矩形波B的峰值检测,最终输出两个波形的峰值的差值,两个波形的频率和相位都一样。频率有2MHz,请问用什么方法能够精确的测出来?先谢谢大家…

查看全部问答>

PCB布线设计(六)

PCB布线设计(六) 时间:2006-09-27   -       对于12位传感系统的布线,应用的电路是一负载单元电路,该电路可精确测量传感器上施加的重量,然后将结果显示在LCD显示屏上。系统电路原理图如图1 ...…

查看全部问答>

应急灯焊接完毕,一次成功,上图拉。

电路超简单,焊接完就成功点亮。MAXIM的LED驱动芯片真的不错哦。 …

查看全部问答>