реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> ARM9 - Проблема с переменными
fademike
сообщение Mar 10 2013, 14:01
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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
 
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 10 2013, 14:07
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



А стека достаточно для двухкилобайтного массива?
Go to the top of the page
 
+Quote Post
fademike
сообщение Mar 10 2013, 14:19
Сообщение #3


Участник
*

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



Цитата(aaarrr @ Mar 10 2013, 18:07) *
А стека достаточно для двухкилобайтного массива?


Микроконтроллер: AT91SAM9G45. Кажись, должно хватать! Keil не жалуется!
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 10 2013, 14:26
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(fademike @ Mar 10 2013, 16:19) *
Кажись, должно хватать!

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

Цитата(fademike @ Mar 10 2013, 16:19) *
Keil не жалуется!

Как он должен жаловаться?
Попробуйте для интереса объявить массив Peremennaja килобайт на 100.
Go to the top of the page
 
+Quote Post
fademike
сообщение Mar 10 2013, 14:43
Сообщение #5


Участник
*

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



Цитата(_Артём_ @ Mar 10 2013, 18:26) *
Если выделить, то должно.


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


Как я понимаю, я выделил: В keil-е size: 0x8000 - это 32 кБ - Должно хватать..
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 10 2013, 14:45
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Вот выдержка из 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), думаю, должно быть понятно.
Go to the top of the page
 
+Quote Post
fademike
сообщение Mar 10 2013, 14:50
Сообщение #7


Участник
*

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



Цитата(aaarrr @ Mar 10 2013, 18:45) *
Что будет, когда стек наползет на main.o(.bss), думаю, должно быть понятно.


Значит, мне нужно подключать внешнее ОЗУ??
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 10 2013, 15:00
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(fademike @ Mar 10 2013, 18:50) *
Значит, мне нужно подключать внешнее ОЗУ??

Вообще, конечно нужно: 64кБайт - это очень мало в масштабах подобного процессора.
Но к расширению стека это отношения не имеет, он у вас жестко задан в SAM9G45.s
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 10 2013, 15:01
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(fademike @ Mar 10 2013, 16:50) *
Значит, мне нужно подключать внешнее ОЗУ??

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


Стек выделите побольше.
Go to the top of the page
 
+Quote Post
fademike
сообщение Mar 10 2013, 15:15
Сообщение #10


Участник
*

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



Объем стека это там - ISR_Stack_Size??
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 10 2013, 15:18
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(fademike @ Mar 10 2013, 19:15) *
Объем стека это там - ISR_Stack_Size??

Это один из стеков (для прерываний). Вашей программе достается USR_Stack_Size.
Go to the top of the page
 
+Quote Post
fademike
сообщение Mar 10 2013, 15:30
Сообщение #12


Участник
*

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



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

Увеличил уже до "USR_Stack_Size EQU 0x00000140" А программе ни по чем..
При дальнейшем увеличении - ошибка((
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 10 2013, 15:41
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
Fedor
сообщение Mar 10 2013, 15:41
Сообщение #14


Участник
*

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



А сколько ОЗУ на плате?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 10 2013, 15:43
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 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 байт, а нужно много больше. Какая ошибка?
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01472 секунд с 7
ELECTRONIX ©2004-2016