首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >avr内联汇编程序错误:不可能的约束

avr内联汇编程序错误:不可能的约束
EN

Stack Overflow用户
提问于 2014-05-04 21:13:38
回答 1查看 408关注 0票数 0
代码语言:javascript
运行
复制
#include <avr/io.h>

int main(void){

    asm volatile("ldi r16, %0\n\t"
                 "out %1, r16\n\t"
                 "ldi r16, %0\n\t"
                 "out %2, r16\n\t"::"M" (0xff),"I" (_SFR_IO_ADDR(DDRB)),"I" (_SFR_IO_ADDR(PORTB)));

    while(1) {
        asm volatile("cbi %0, %1\n\t"
                     "nop\n\t"
                     "nop\n\t"
                     "nop\n\t"
                     "nop\n\t"
                     "nop\n\t"
                     "nop\n\t"
                     "nop\n\t"
                     "nop\n\t"
                     "nop\n\t"
                     "nop\n\t"
                     "nop\n\t"
                     "sbi %0, %1\n\t"::"I" (SFR_IO_ADDR(PORTB)), "M" (0xff));
    }
}

在编译时:错误:不可能约束指针设置为asm语句位置: 11-9 (asm volatile(“CBI%0,%1\n\t") )

但是为什么呢?

EN

回答 1

Stack Overflow用户

发布于 2014-05-04 21:23:56

您在SFR_IO_ADDR(PORTB)中缺少前导下划线,因此它被编译为对返回整数的外部函数的调用。如果您启用了警告,您将看到以下内容:warning: implicit declaration of function 'SFR_IO_ADDR'

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23456661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档