Перейти к содержанию
    

ARM9 - Проблема с переменными

Наткнулся на очень нелепую проблемку: Каким-то образом изменение одних переменных меняют другие переменные. Не понимаю, как такое возможно!?

 

unsigned char Block_Files[512];
unsigned char File[32];

int main (void) {                       // Main Program                       

unsigned int clock;
unsigned long Peremennaja[512];        // Создадим ненужную переменную
    
Config_GPIO ();

TFT_LCD_Init();

TFT_LCD_BGcolor(0xFF0000);
TFT_LCD_ConSetColor(0x000000, 0xFFFFFF);
TFT_LCD_ConSetPos(0,0);


SDcard_init();
Show_Folder(Block_Files, File);

    for (clock=0; clock<512; clock++) Peremennaja[clock] = 0x00;     // Передаем ненужной переменной, например, нули

for (clock=0; clock<512; clock++){
    Delay(50);
TFT_LCD_Char  (Block_Files[clock]);    // Выведенные символы из-за "Peremennaja" Стали черными квадратиками
}

while(1){};
}

 

 

Функции: "TFT_LCD_ConSetColor(0x000000, 0xFFFFFF); и TFT_LCD_ConSetPos(0,0);" просто записывают цвет, строку и столбец в переменные "unsigned int".

 

Без записи в переменную "Peremennaja[512]" все работает. А когда в нее записываем значения, то эти значения вносятся в переменные указателя цвета и курсора...

 

 

Подскажите, плиз, в чем секрет??

Beda.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А стека достаточно для двухкилобайтного массива?

 

Микроконтроллер: AT91SAM9G45. Кажись, должно хватать! Keil не жалуется!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кажись, должно хватать!

Если выделить, то должно.

 

Keil не жалуется!

Как он должен жаловаться?

Попробуйте для интереса объявить массив Peremennaja килобайт на 100.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если выделить, то должно.

 

 

Как он должен жаловаться?

Попробуйте для интереса объявить массив Peremennaja килобайт на 100.

 

Как я понимаю, я выделил: В keil-е size: 0x8000 - это 32 кБ - Должно хватать..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот выдержка из map-файла:

Base Addr Size Type Attr Idx E Section Name Object

 

0x00300000 0x00002960 Data RW 12 .data lcd_driver.o

0x00302960 0x00000220 Zero RW 35 .bss main.o

0x00302b80 0x00000060 Zero RW 140 .bss c_5.l(libspace.o)

0x00302be0 0x00000000 Zero RW 2 HEAP sam9g45.o

0x00302be0 0x000000c8 Zero RW 1 STACK sam9g45.o

 

Что будет, когда стек наползет на main.o(.bss), думаю, должно быть понятно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что будет, когда стек наползет на main.o(.bss), думаю, должно быть понятно.

 

Значит, мне нужно подключать внешнее ОЗУ??

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Значит, мне нужно подключать внешнее ОЗУ??

Вообще, конечно нужно: 64кБайт - это очень мало в масштабах подобного процессора.

Но к расширению стека это отношения не имеет, он у вас жестко задан в SAM9G45.s

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Значит, мне нужно подключать внешнее ОЗУ??

Интересный вывод...может АРМ взять помощней...

 

 

Стек выделите побольше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Объем стека это там - ISR_Stack_Size??

Это один из стеков (для прерываний). Вашей программе достается USR_Stack_Size.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И, если не сложно, подскажите мне, пожалуйста, литературу!

 

Увеличил уже до "USR_Stack_Size EQU 0x00000140" А программе ни по чем..

При дальнейшем увеличении - ошибка((

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И, если не сложно, подскажите мне, пожалуйста, литературу!

sam9g

 

Увеличил уже до "USR_Stack_Size EQU 0x00000140" А программе ни по чем..

Маловато будет:

0x140 = 320

 

При дальнейшем увеличении - ошибка((

Нет ошибки, ставил 0x1000

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И, если не сложно, подскажите мне, пожалуйста, литературу!

Достаточный набор:

ARM926EJ-S Technical Reference Manual

Datasheet на процессор

Хелп компилятора

Но все это нужно честно изучать.

 

Увеличил уже до "USR_Stack_Size EQU 0x00000140" А программе ни по чем..

При дальнейшем увеличении - ошибка((

0x140 = 320 байт, а нужно много больше. Какая ошибка?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...