为什么我的程序只调用一次while循环? (Atmel C)

时间:2017-07-18 16:07:04

标签: c avr atmega atmel

请帮忙。我的程序只运行一次while循环:(

我不知道问题是什么。我在python中编写了同样的东西,并且工作正常。

我是C的初学者,我正在使用Atmel的AtMega8微处理器。

#define F_CPU 8000000UL

#include <avr/io.h>
#include <util/delay.h>

int main(void) {
    DDRD = 0xFF;
    int world[9];
    int nextworld[9];
    //from 1 to 8
    //some random start values  

    world[1] = 1;
    world[2] = 1;
    world[3] = 1;
    world[6] = 1;
    world[7] = 1;
    world[8] = 1;
    for (int i = 0; i < 9; i++) {
        nextworld[i] = world[i];
    }
    int binworld = 0;
    int tiles = 0;
    //=============================
    if (world[1] == 1) {
        binworld = binworld + 128;
    }
    if (world[2] == 1) {
        binworld = binworld + 64;
    }
    if (world[3] == 1) {
        binworld = binworld + 32;
    }
    if (world[4] == 1) {
        binworld = binworld + 16;
    }
    if (world[5] == 1) {
        binworld = binworld + 8;
    }
    if (world[6] == 1) {
        binworld = binworld + 4;
    }
    if (world[7] == 1) {
        binworld = binworld + 2;
    }
    if (world[8] == 1) {
        binworld = binworld + 1;
    }
    PORTD = binworld;
    //================================
    while (1) {
        _delay_ms(100);
        tiles = 0;
        //the live starts

        for (int i = 0; i < 9; i++) {
            tiles = 0;
            for (int xc = -1; xc <= 1; xc++) {
                if (world[i + xc] == 1) {
                    tiles += 1;
                }

                if (world[i] == 1) {
                    tiles = tiles - 1;
                }
            }
            if (world[i] == 1 && tiles == 0) {
                nextworld[i] = 0;
            }
            else if (world[i] == 0 && tiles == 1) {
                nextworld[i] = 1;
            }
            else if (world[i] == 1 && tiles == 2) {
                nextworld[i] = 0;
            }   
        }
        //update old world
        for (int i = 0; i < 9; i++) {
            world[i] = nextworld[i];
        }

        //set null
        binworld = 0;
        //convert
        if (world[1] == 1) {
            binworld = binworld + 128;
        }
        if (world[2] == 1) {
            binworld = binworld + 64;
        }
        if (world[3] == 1) {
            binworld = binworld + 32;
        }
        if (world[4] == 1) {
            binworld = binworld + 16;
        }
        if (world[5] == 1) {
            binworld = binworld + 8;
        }
        if (world[6] == 1) {
            binworld = binworld + 4;
        }
        if (world[7] == 1) {
            binworld = binworld + 2;
        }
        if (world[8] == 1) {
            binworld = binworld + 1;
        }

        PORTD = binworld;
    }
}

1 个答案:

答案 0 :(得分:5)

可能因为第一次迭代时数组索引是负数

for (int i=0; i<9;i++)
    {
        tiles = 0;
        for (int xc=-1; xc <= 1; xc++)
        {
            if (world[i+xc]==1) <== HERE, i(0) + xc(-1) == -1
相关问题