初始化器元素不是常数-avr gcc

问题描述 投票:0回答:2

我有一个七段减速的简单代码:

#include<avr/io.h>
#include<util/delay.h>
int dp=1<<0;
int a=1<<1;
int b=1<<2;
int c=1<<3;
int d=1<<4;
int e=1<<5;
int f=1<<6;
int g=1<<7;
int ss[]={
    a|b|c|d|e|f,
    b|c,
    a|b|g|e|d,
    a|b|g|c|d,
    f|g|b|c,
    a|f|g|c|d,
    a|f|g|c|d|e,
    a|b|c,
    a|b|c|d|e|f|g,
    a|b|c|d|f|g,
    0x00
};
int main()
{
 while(1){}
}

但是当我尝试从此.hex代码生成.c时,这给了我错误:

这里是错误:

main.c:12: error: initializer element is not constant

main.c:12: error: (near initialization for 'ss[0]')
...

对于所有元素相同。.

c avr avr-gcc
2个回答
2
投票

执行此操作的一种方法是通过将其更改为:确保它们为常量(在编译时可用)。>#define dp 0x01 #define a 0x02 #define b 0x04 #define c 0x08 #define d 0x10 #define e 0x20 #define f 0x40 #define g 0x80


1
投票
具有静态存储持续时间的变量应使用编译时常量表达式进行初始化。

而不是变量集使用枚举。例如

© www.soinside.com 2019 - 2024. All rights reserved.