ads编译时所发生的错误

在使用ads的时候出现两个问题,现在特记录下来。

第一个错误

摘自:http://hi.baidu.com/cumtsun/blog/item/2b2aa40efc4d88e336d122df.html

现象表述:
选中所有文件执行全部编译的时候,有2个警告提示:
warning:C2207W:inventing 'extern int gliethttp_ini();'
lcd_thread.c line 41

warning:C2207W:inventing 'extern int ucgui2_ReadFlash();'
lcd_thread.c line 45

问题分析:
通过上面的提示,你能看出来问题出在哪儿了吗?...
'extern int gliethttp_ini();'说明因为我自己没有告诉编译器该函数的具体位置,
所以如果不进行一次全面编译,那么该引用处对应的汇编跳转语句将不变,仍是下面的:
[0xeb00b969] bl gliethttp_ini
也就是说向链接后的.bin文件的当前位置向前或向后跳固定的长度不改变,因为没有全部编译,而恰恰向lcd.c添加的那些内容将gliethttp_ini函数的链接地址改变了,或者向后移或者向前移了gliethttp_ini函数编译位置,但是因为没有extern int gliethttp_ini();定义,所以lcd_thread.c函数无从知晓gliethttp_ini函数的链接地址的改变,那么很明显了,lcd_thread.c仍然继续执行下面的机器码
[0xeb00b969] bl gliethttp_ini
向后跳转之后去执行的地址已经不是gliethttp_ini的地址了,所以出现了这么bt的怪现象!

总结:看来要想仅仅修改一个函数,如:lcd.c之后不让程序进行全部编译,
       那么就需要告诉编译器,所有关联了的函数或者全局变量的具体位置【用extern来强制说明】
       也就是让你的编译器在执行全部编译时不要提示“inventing

 

第二个错误:

我是根据下面这个网页看出来的,原来我用的是个宏定义,而实际上是个函数

http://hi.baidu.com/magipan/blog/item/41719626aed18d128b82a16f.html

no side effect in void context: '<expr> == <expr>'

bool sms0_4if()

case IF_SAVED_IN_FLASH:

                     {

                            v_status == FALSE;//Should be ‘=’

                            ……

                     }

                     这种情况导致变量的值一直没有被修改,也将对程序走向造成重大影响

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值