fademike 0 10 марта, 2013 Опубликовано 10 марта, 2013 · Жалоба Наткнулся на очень нелепую проблемку: Каким-то образом изменение одних переменных меняют другие переменные. Не понимаю, как такое возможно!? 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 10 марта, 2013 Опубликовано 10 марта, 2013 · Жалоба А стека достаточно для двухкилобайтного массива? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fademike 0 10 марта, 2013 Опубликовано 10 марта, 2013 · Жалоба А стека достаточно для двухкилобайтного массива? Микроконтроллер: AT91SAM9G45. Кажись, должно хватать! Keil не жалуется! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 10 марта, 2013 Опубликовано 10 марта, 2013 · Жалоба Кажись, должно хватать! Если выделить, то должно. Keil не жалуется! Как он должен жаловаться? Попробуйте для интереса объявить массив Peremennaja килобайт на 100. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fademike 0 10 марта, 2013 Опубликовано 10 марта, 2013 · Жалоба Если выделить, то должно. Как он должен жаловаться? Попробуйте для интереса объявить массив Peremennaja килобайт на 100. Как я понимаю, я выделил: В keil-е size: 0x8000 - это 32 кБ - Должно хватать.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 10 марта, 2013 Опубликовано 10 марта, 2013 · Жалоба Вот выдержка из 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), думаю, должно быть понятно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fademike 0 10 марта, 2013 Опубликовано 10 марта, 2013 · Жалоба Что будет, когда стек наползет на main.o(.bss), думаю, должно быть понятно. Значит, мне нужно подключать внешнее ОЗУ?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 10 марта, 2013 Опубликовано 10 марта, 2013 · Жалоба Значит, мне нужно подключать внешнее ОЗУ?? Вообще, конечно нужно: 64кБайт - это очень мало в масштабах подобного процессора. Но к расширению стека это отношения не имеет, он у вас жестко задан в SAM9G45.s Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 10 марта, 2013 Опубликовано 10 марта, 2013 · Жалоба Значит, мне нужно подключать внешнее ОЗУ?? Интересный вывод...может АРМ взять помощней... Стек выделите побольше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fademike 0 10 марта, 2013 Опубликовано 10 марта, 2013 · Жалоба Объем стека это там - ISR_Stack_Size?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 10 марта, 2013 Опубликовано 10 марта, 2013 · Жалоба Объем стека это там - ISR_Stack_Size?? Это один из стеков (для прерываний). Вашей программе достается USR_Stack_Size. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fademike 0 10 марта, 2013 Опубликовано 10 марта, 2013 · Жалоба И, если не сложно, подскажите мне, пожалуйста, литературу! Увеличил уже до "USR_Stack_Size EQU 0x00000140" А программе ни по чем.. При дальнейшем увеличении - ошибка(( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 10 марта, 2013 Опубликовано 10 марта, 2013 · Жалоба И, если не сложно, подскажите мне, пожалуйста, литературу! sam9g Увеличил уже до "USR_Stack_Size EQU 0x00000140" А программе ни по чем.. Маловато будет: 0x140 = 320 При дальнейшем увеличении - ошибка(( Нет ошибки, ставил 0x1000 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Fedor 0 10 марта, 2013 Опубликовано 10 марта, 2013 · Жалоба А сколько ОЗУ на плате? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 10 марта, 2013 Опубликовано 10 марта, 2013 · Жалоба И, если не сложно, подскажите мне, пожалуйста, литературу! Достаточный набор: ARM926EJ-S Technical Reference Manual Datasheet на процессор Хелп компилятора Но все это нужно честно изучать. Увеличил уже до "USR_Stack_Size EQU 0x00000140" А программе ни по чем.. При дальнейшем увеличении - ошибка(( 0x140 = 320 байт, а нужно много больше. Какая ошибка? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться