【发布时间】:2018-06-24 18:00:45
【问题描述】:
我正在尝试将显示的字母顺时针和逆时针旋转 90 度。但是当我执行嵌套的for循环时,它会给出这样的错误。
ALPHA 是一个二维数组,用于存储字母 A-Z 的硬编码模式。到目前为止,如果我注释掉嵌套的 for 循环,此程序将显示一个静态字母。
led.c: In function ‘main’:
led.c:70:21: warning: iteration 1u invokes undefined behavior [-
Waggressive-loop-optimizations]
ALPHA_NEW[k][j] = ALPHA[i][k];
^
led.c:68:4: note: containing loop
for(int k = 0; k<8; k++)
^
难道不能像这样在avr中赋值吗?
#include <avr/io.h>
//header to enable data flow control over pins
#define F_CPU 1000000
//telling controller crystal frequency attached
#include <util/delay.h>
//header to enable delay function in program
int main(void)
{
DDRD = 0xFF;//PORTD is set as output
DDRA = 0xFF;
//starts from msb..lsb
//int ALPHA[1][8] = {0b00010000,0b00010000,0b00010000,0b00010000,0b00010000,0b00010000,0b00010000,0b00010000};
int ALPHA[1][8] = {0b00111100,0b01000010,0b11000011,0b11111111,0b11000011,0b11000011, 0b11000011, 0b11000011};
char NAME[] = {0};
uint8_t l =0;
char PORT[8] = {1,2,4,8,16,32,64,128};//pin values of PORTD
int fl = 1;
int ALPHA_NEW[1][8] = {0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000};
while(1)
{
//fl = 1 means rotate by 90 degree clockwise
if(fl == 1) {
for(int i = 0; i< 8; i++)
{
for(int j = 8; j>0; j--)
{
for(int k = 0; k<8; k++)
{
ALPHA_NEW[k][j] = ALPHA[i][k];
}
}
//ALPHA[0][i] = 0b00000000;
}
//ALPHA[0][4] = 0b11111111;
}
for (int m=0;m<sizeof NAME;m++)
{
l = NAME[m];
for (int n=0;n<800;n++)//execute 200 times for the eye to catch
{
for (int j=0;j<4;j++)
{
PORTD = PORT[j];// ROW
PORTA = ~ALPHA[l][j];
_delay_ms(1);
}
// PORTD=0x00;//clear screen after show
for (int k=0;k<4;k++)
{
PORTD = PORT[k+4];// ROW
PORTA = ~ALPHA[l][k+4];
_delay_ms(1);
}
}
PORTD=0x00;//clear screen after show.
// _delay_ms(500);
}
//_delay_ms(500);
}
}
【问题讨论】:
-
请查看现有的 Stack Overflow 文章stackoverflow.com/questions/24296571/…