Бесконечный цикл, работающий для одной части двумерного массива - PullRequest
0 голосов
/ 10 апреля 2019

Код, который у меня работает, работает, когда я компилирую его в Xcode и запускаю операторы printf для тире и точек для каждой буквы.Но когда я помещаю код в TI Code Composer Studio, код работает, но он только высветил на моем микроконтроллере только первую букву «G» «Go Knights».

Я знаю, что это как-то связано с циклом while, но я не уверен, что это такое.Я переместил все, включил / выключил вспышки, выключил мой счетчик, изменил мои переменные с глобальных на локальные переменные, проверил синтаксис на предмет отсутствия чего-либо, удалил оператор if для ==-1 и ничего не сработало

#include <msp430g2553.h> 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

unsigned int i = 0;
unsigned int j=0;
int row = 0;

void main(void)`
{

char str [] = "Go Knights";
int morse_array [36][6] = { //array for A-Z, 0-9 in morse code
    {0,1,-1},      //'.' = 0 and '-' = 1 and all else = -1
    {1,0,0,0,-1},
    {1,0,1,0,-1},
    {1,0,0,-1},
    {0,-1},
    {0,0,1,0,-1},
    {1,1,0,-1},
    {0,0,0,0,-1},
    {0,0,-1},
    {0,1,1,1,-1},
    {1,0,1,-1},
    {0,1,0,0,-1},
    {1,1,-1},
    {1,0,-1},
    {1,1,1,-1},
    {0,1,1,0,-1},
    {1,1,0,1,-1},
    {0,1,0,-1},
    {0,0,0,-1},
    {1,-1},
    {0,0,1,-1},
    {0,0,0,1,-1},
    {0,1,1,-1},
    {1,0,0,1,-1},
    {1,0,1,1,-1},
    {1,1,0,0,-1},
    {1,1,1,1,1,-1},
    {0,1,1,1,1,-1},
    {0,0,1,1,1,-1},
    {0,0,0,1,1,-1},
    {0,0,0,0,1,-1},
    {0,0,0,0,0,-1},
    {1,0,0,0,0,-1},
    {1,1,0,0,0,-1},
    {1,1,1,0,0,-1},
    {1,1,1,1,0,-1}
};


WDTCTL = WDTPW | WDTHOLD;    // stop watchdog timer
P1DIR |= 0x41;         //set the direction register for LED1 and LED2
P1OUT &= 0xBE;         //initialize LED1 and LED2 to off*/

for(;;){               //empty for loop is an infinite loop

    for (i=0; i<strlen(str); i++) {
        if(str[i] >= 'a' && str[i] <= 'z'){
            row = (str[i]- 'a');
        }
        else if(str[i] >= 'A' && str[i] <= 'Z'){
            row = (str[i]- 'A');
        }
        else if(str[i] >= '0' && str[i] <= '9'){
            row = (str[i] - '0');
        }
        else{
            row = -1;
        }

        j= 0;

        while(morse_array[row][j]!= -1){
            // DOT

            if(row == -1){
                for(i=0; i<140000; i++);
                break;
            }
            if(morse_array[row][j] == 0) {
                P1OUT ^= 0x40;
                for (i=0; i <25000; i++);
                P1OUT &= 0x00;
                for (i=0; i <30000;i++);
            }

            //Dash
            else if(morse_array[row][j] == 1) {
                P1OUT ^= 0x40;
                for (i=0; i<60000; i++);
                P1OUT &= 0x00;
                for (i=0; i<30000; i++);
            }

            j++;
        }
    }
    P1OUT ^= 0x01;
    for (i=0; i<30000; i++);
    P1OUT ^= 0x01;

}}

1 Ответ

1 голос
/ 10 апреля 2019

У вас есть первый цикл for, где вы используете переменную 'i'.В этом цикле for у вас есть 2 цикла for, которые также используют переменную 'i'.Глядя на j ++, вы должны использовать переменную 'j' для первого цикла for.

...