|
ARM9 - Проблема с переменными |
|
|
|
Mar 10 2013, 14:01
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 5-03-13
Пользователь №: 75 903

|
Наткнулся на очень нелепую проблемку: Каким-то образом изменение одних переменных меняют другие переменные. Не понимаю, как такое возможно!? Код 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 ( 530.59 килобайт )
Кол-во скачиваний: 10
|
|
|
|
|
Mar 10 2013, 14:19
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 5-03-13
Пользователь №: 75 903

|
Цитата(aaarrr @ Mar 10 2013, 18:07)  А стека достаточно для двухкилобайтного массива? Микроконтроллер: AT91SAM9G45. Кажись, должно хватать! Keil не жалуется!
|
|
|
|
|
Mar 10 2013, 14:26
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(fademike @ Mar 10 2013, 16:19)  Кажись, должно хватать! Если выделить, то должно. Цитата(fademike @ Mar 10 2013, 16:19)  Keil не жалуется! Как он должен жаловаться? Попробуйте для интереса объявить массив Peremennaja килобайт на 100.
|
|
|
|
|
Mar 10 2013, 14:43
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 5-03-13
Пользователь №: 75 903

|
Цитата(_Артём_ @ Mar 10 2013, 18:26)  Если выделить, то должно.
Как он должен жаловаться? Попробуйте для интереса объявить массив Peremennaja килобайт на 100. Как я понимаю, я выделил: В keil-е size: 0x8000 - это 32 кБ - Должно хватать..
|
|
|
|
|
Mar 10 2013, 14:50
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 5-03-13
Пользователь №: 75 903

|
Цитата(aaarrr @ Mar 10 2013, 18:45)  Что будет, когда стек наползет на main.o(.bss), думаю, должно быть понятно. Значит, мне нужно подключать внешнее ОЗУ??
|
|
|
|
|
Mar 10 2013, 15:15
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 5-03-13
Пользователь №: 75 903

|
Объем стека это там - ISR_Stack_Size??
|
|
|
|
|
Mar 10 2013, 15:30
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 5-03-13
Пользователь №: 75 903

|
И, если не сложно, подскажите мне, пожалуйста, литературу!
Увеличил уже до "USR_Stack_Size EQU 0x00000140" А программе ни по чем.. При дальнейшем увеличении - ошибка((
|
|
|
|
|
Mar 10 2013, 15:41
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(fademike @ Mar 10 2013, 17:30)  И, если не сложно, подскажите мне, пожалуйста, литературу! sam9gЦитата(fademike @ Mar 10 2013, 17:30)  Увеличил уже до "USR_Stack_Size EQU 0x00000140" А программе ни по чем.. Маловато будет: 0x140 = 320 Цитата(fademike @ Mar 10 2013, 17:30)  При дальнейшем увеличении - ошибка(( Нет ошибки, ставил 0x1000
|
|
|
|
|
Mar 10 2013, 15:41
|
Участник

Группа: Участник
Сообщений: 73
Регистрация: 26-10-05
Пользователь №: 10 125

|
А сколько ОЗУ на плате?
|
|
|
|
|
Mar 10 2013, 15:43
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(fademike @ Mar 10 2013, 19:30)  И, если не сложно, подскажите мне, пожалуйста, литературу! Достаточный набор: ARM926EJ-S Technical Reference Manual Datasheet на процессор Хелп компилятора Но все это нужно честно изучать. Цитата(fademike @ Mar 10 2013, 19:30)  Увеличил уже до "USR_Stack_Size EQU 0x00000140" А программе ни по чем.. При дальнейшем увеличении - ошибка(( 0x140 = 320 байт, а нужно много больше. Какая ошибка?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|