C51 - ошибка, связанная с указателем
РЕДАКТИРОВАТЬ: Кажется, что проблема исчезла, когда я установил флажок "Держать переменные в порядке" в меню оптимизации C51. Я до сих пор не знаю, что вызвало проблему, и если это навсегда. У кого-нибудь есть идея, что происходит?
Я пытаюсь построить графическое меню в C51. Я использую menu_init()
функция, чтобы вывести текст на 4-строчный ЖК-экран. Функция определяется как:
void menu_init(unsigned char** menu_array, unsigned char menu_length)
{
unsigned char i, menu_max_index;
write_command(CLEAR_DISPLAY);
if (menu_length < 4) {menu_max_index = menu_length;}
else {menu_max_index = 4;}
for (i = 0; i < menu_max_index; i++)
{
write_string_to_line(i+1, (menu_array[i]));
}
}
void write_string_to_line (unsigned char line, unsigned char* lcd_string)
{
unsigned char i = 0;
gotoxy(0, line);
while(lcd_string[i] != '\0')
{
EN = 0;
RS = 1;
EN = 1;
P0 = lcd_string[i];
i++;
EN = 0;
delay(DELAY_COUNT);
}
}
В появлении ошибки, menu_array
является:
unsigned char* xdata enter_byte_count_items[3] = {enter_byte_count_text, enter_byte_count_text2, enter_byte_count_number};
//For the unfamiliar, xdata is the segment in the 8051 memory, which the variable is located in
Инициализаторами массива являются следующие тексты:
unsigned char xdata enter_byte_count_text[20] = " Enter byte count of";
unsigned char xdata enter_byte_count_text2[20] = " PGN: ";
unsigned char xdata enter_byte_count_number[20] = " Bytes";
с этим рядом с ним в коде, которые являются строками для другого меню:
unsigned char xdata enter_pgn_text[20] = " Enter PGN Number";
unsigned char xdata enter_pgn_number[20] = " 64000" ;
Я ожидал, что этот код будет печатать строки по порядку. Тем не менее, это не так, вывод выглядит так:
Enter byte count of
x:
Bytes PGN Number
И отладчик проверяет этот результат:
Я не могу понять, что происходит... Я верю, что это что-то из-за разлагающихся указателей, но я не могу точно определить проблему. Где я сделал не так?