打印
[STM8]

__asm("jrne EndWaitForVih")编译报错

[复制链接]
3188|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bell369|  楼主 | 2016-4-25 16:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用IAR 1.41.1版本编译DISCOVERY的例子,出现如下错误,不知道什么原因?
Error[As011]: Undefined symbol: EndWaitForVih E:\Work\PROCEDURE\ARM\Experiment\STM8\stm8s-discovery_dev\Libraries\STM8_TouchSensing_Driver\src\stm8_tsl_rc_acquisition.c 366
Error[As011]: Undefined symbol: EndWaitForVih E:\Work\PROCEDURE\ARM\Experiment\STM8\stm8s-discovery_dev\Libraries\STM8_TouchSensing_Driver\src\stm8_tsl_rc_acquisition.c 366
Error[As011]: Undefined symbol: EndWaitForVih E:\Work\PROCEDURE\ARM\Experiment\STM8\stm8s-discovery_dev\Libraries\STM8_TouchSensing_Driver\src\stm8_tsl_rc_acquisition.c 366
Error[As011]: Undefined symbol: WaitForVih E:\Work\PROCEDURE\ARM\Experiment\STM8\stm8s-discovery_dev\Libraries\STM8_TouchSensing_Driver\src\stm8_tsl_rc_acquisition.c 369
Error[As011]: Undefined symbol: WaitForVih E:\Work\PROCEDURE\ARM\Experiment\STM8\stm8s-discovery_dev\Libraries\STM8_TouchSensing_Driver\src\stm8_tsl_rc_acquisition.c 369
Error[As011]: Undefined symbol: WaitForVih E:\Work\PROCEDURE\ARM\Experiment\STM8\stm8s-discovery_dev\Libraries\STM8_TouchSensing_Driver\src\stm8_tsl_rc_acquisition.c 369
Error[Og010]: Inline assembler instruction does not have a unique size: "        bcp a, (x)" E:\Work\PROCEDURE\ARM\Experiment\STM8\stm8s-discovery_dev\Libraries\STM8_TouchSensing_Driver\src\stm8_tsl_rc_acquisition.c 301
Error[As011]: Undefined symbol: EndWaitForVil E:\Work\PROCEDURE\ARM\Experiment\STM8\stm8s-discovery_dev\Libraries\STM8_TouchSensing_Driver\src\stm8_tsl_rc_acquisition.c 302
Error[As011]: Undefined symbol: EndWaitForVil E:\Work\PROCEDURE\ARM\Experiment\STM8\stm8s-discovery_dev\Libraries\STM8_TouchSensing_Driver\src\stm8_tsl_rc_acquisition.c 302
Error[As011]: Undefined symbol: EndWaitForVil E:\Work\PROCEDURE\ARM\Experiment\STM8\stm8s-discovery_dev\Libraries\STM8_TouchSensing_Driver\src\stm8_tsl_rc_acquisition.c 302
Error[As011]: Undefined symbol: WaitForVil E:\Work\PROCEDURE\ARM\Experiment\STM8\stm8s-discovery_dev\Libraries\STM8_TouchSensing_Driver\src\stm8_tsl_rc_acquisition.c 305
沙发
643757107| | 2016-4-25 19:54 | 只看该作者
这么多未定义符号,肯定是头文件没有包含进来。

使用特权

评论回复
板凳
bell369|  楼主 | 2016-4-25 23:13 | 只看该作者
好像不是头文件问题,同样的代码在STVD里面可以编译通过的,在IAR下编译有错误,网上有些说IAR是版本问题,感觉汇编下的跳转标识都无法识别,认为没有定义。
__asm("bcp a, (x)");  // 1 cycles
  __asm("jrne EndWaitForVih");
  __asm("ldw y, TIMACQ_CNTR"); // 2 cycles; hw counter also used for timeout ...
  __asm("cpw y, #0x0E00");    // 2 cycles; Timeout compare
  __asm("jrult WaitForVih");
  __asm("EndWaitForVih:");

使用特权

评论回复
地板
asder5720| | 2017-11-10 22:13 | 只看该作者
看了另一个帖子  应该是库的版本问题  1.30的没问题

使用特权

评论回复
5
qiangtech| | 2019-3-1 10:07 | 只看该作者
bell369 发表于 2016-4-25 23:13
好像不是头文件问题,同样的代码在STVD里面可以编译通过的,在IAR下编译有错误,网上有些说IAR是版本问题, ...

楼主找到问题解决了吗?

使用特权

评论回复
6
dons3| | 2019-9-27 12:35 | 只看该作者
本帖最后由 dons3 于 2019-9-27 12:42 编辑

引用的符号超范围了,要在同一段程序代码范围内,比如这样使用:

  __asm(
    "WaitForVih: \n"
    "bcp a, (x) \n"
    "jrne EndWaitForVih \n"
    "ldw y, TIMACQ_CNTR \n"
    "cpw y, #0x0E00 \n"
    "jrult WaitForVih \n"
    "EndWaitForVih: \n"
  );




使用特权

评论回复
7
dons3| | 2019-9-27 12:45 | 只看该作者
bell369 发表于 2016-4-25 23:13
好像不是头文件问题,同样的代码在STVD里面可以编译通过的,在IAR下编译有错误,网上有些说IAR是版本问题, ...

你好像不知道什么是条件编译?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

13

帖子

0

粉丝