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

 
 
> Cortex M4F проблема с памятью
vanek18
сообщение Apr 14 2015, 05:28
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 30-01-15
Пользователь №: 84 841



Добрый день! Я работаю с процессором на ядре Cortex M4F. Среда разработки - Keil 4.23. Устройство для навигации. Проблема такая: при увеличении размера прошивки, начинаются глюки. Поясню. Отлаживаюсь я через uart. Вот как должна работать программа(вотразмер прошивки:Program Size: Code=29044 RO-data=652 RW-data=184 ZI-data=13048):
Прикрепленное изображение

Следующим шагом я раскомменчиваю вызов одной функции,размер кода увеличивается(Program Size: Code=35892 RO-data=652 RW-data=184 ZI-data=13048):
Прикрепленное изображение

Затем еще вызываю одну функцию(Program Size: Code=40528 RO-data=648 RW-data=184 ZI-data=13048):
Прикрепленное изображение.
Подскажите пожалуйста,что копать,куда смотреть.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Apr 15 2015, 18:56
Сообщение #2


Гуру
******

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



Для ARM выравнивание стека производится по границе двух слов (8 байт).

А топикстартеру лучше посмотреть map и проверить значение SP непосредственно перед вызовом printf().
Go to the top of the page
 
+Quote Post
vanek18
сообщение Apr 23 2015, 11:46
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 30-01-15
Пользователь №: 84 841



Цитата(aaarrr @ Apr 15 2015, 18:56) *
Для ARM выравнивание стека производится по границе двух слов (8 байт).

А топикстартеру лучше посмотреть map и проверить значение SP непосредственно перед вызовом printf().

Итак, выравнивание по границе не привело к успеху. Выравнивать кстати нужно по 8 байтам,там прям в starup.s это указано. Отладчик в моем проце отсутствует.


Цитата(Golikov A. @ Apr 15 2015, 11:56) *
А стэк пишется с конца, тут ничего не изменилось? То есть на самом деле размер стэка определяет адрес первого сохраняемого значения.
Смещение на 64 К не привило к падению, а что если размер стека увеличить на 64 К? Взять тот размер что работает и 64К прибавить?

Увеличение размера стека не помогло.
Я освоил scatter файл,и с его помощью разбил память,отдельно для стека,отдельно для кучи и все остальное пространство собственно для программы.
Вот так выглядит мой scatter
CODE
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************


LOAD_ROM 0x08000000 0x0005FFFF ; load region size_region
{
EXEC_ROM 0x08000000 0x0005FFFF ; load address = execution address
{
*.o (START, +First)
*(InRoot$$Sections)
.ANY (+RO )
}
HEAP_RAM 0x20000400 0x00007BFF ; Heap region Heap_size = 31K
{
*(HEAP)
}
SRAM 0x20008000 0x000FFFF ; RW region RW_size = 64K
{
.ANY (+RW +ZI)
}
STACK_RAM 0x20018000 0x00007FFF ; Stack region Stack_size = 32K
{
*(STACK)
}
}

Карта памяти в приложении.
И моя программа с приветствием миру заработала при любых комбинациях и размерах областей памяти и ее содержимого.
О чудо,подумал я!
И на всякий случай решил удостовериться что ничего не работало. Я снова скомпилировал проект,но уже со стандартными настройками...такой какой был раньше и не работал.
И он ЗАРАБОТАЛ laughing.gif
Что это? И что я сделал этим разбиение памяти?
Прикрепленный файл  Mem_map_SCATTER.txt ( 995 байт ) Кол-во скачиваний: 105
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 23 2015, 11:56
Сообщение #4


Гуру
******

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



Цитата(vanek18 @ Apr 23 2015, 14:46) *
И он ЗАРАБОТАЛ laughing.gif
Что это? И что я сделал этим разбиение памяти?

Можете привести map от неработающего варианта?
Go to the top of the page
 
+Quote Post
vanek18
сообщение Apr 23 2015, 12:06
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 30-01-15
Пользователь №: 84 841



Цитата(aaarrr @ Apr 23 2015, 11:56) *
Можете привести map от неработающего варианта?

Он чуть выше уже был
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 23 2015, 12:10
Сообщение #6


Гуру
******

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



Цитата(vanek18 @ Apr 23 2015, 15:06) *

Вот тут интересно было бы узнать значение SP при входе в main().
Go to the top of the page
 
+Quote Post
vanek18
сообщение Apr 23 2015, 12:18
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 30-01-15
Пользователь №: 84 841



Цитата(aaarrr @ Apr 23 2015, 13:10) *
Вот тут интересно было бы узнать значение SP при входе в main().

Это можно как-то без отладчика сделать?
И факт в том,что сейчас с этой картой памяти он работает! wacko.gif
И кстати тот проект,который вначале темы, работает всегда.
Но когда я все это ставлю на rtx, та же лажа,что и раньше((

Сообщение отредактировал vanek18 - Apr 23 2015, 12:21
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 23 2015, 12:28
Сообщение #8


Гуру
******

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



Цитата(vanek18 @ Apr 23 2015, 15:18) *
Это можно как-то без отладчика сделать?

Можно как-нибудь так:
Код
int main(void)
{
     unsigned int sp = __current_sp();

     ...
     for(int a = 0; a < 8; a++)
     {
         unsigned int n = sp >> 28;

         uart_putc(n > 9 ? n + 'A' - 10 : n + '0');
         sp <<= 4;
     }
}


Цитата(vanek18 @ Apr 23 2015, 15:18) *
И факт в том,что сейчас с этой картой памяти он работает! wacko.gif

С той, с которой не работал раньше?
Go to the top of the page
 
+Quote Post
vanek18
сообщение Apr 24 2015, 05:16
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 30-01-15
Пользователь №: 84 841



Цитата(aaarrr @ Apr 23 2015, 12:28) *
С той, с которой не работал раньше?

Да,именно та,которая не работала,изменил лишь однажды распределение памяти. И все.
В приложении значения SP и map при распределении памяти *.sct и автоматически соответственно.
Прикрепленный файл  SP.txt ( 1.73 килобайт ) Кол-во скачиваний: 192
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- vanek18   Cortex M4F проблема с памятью   Apr 14 2015, 05:28
- - Golikov A.   проверьте размер стэка, потом кучи... Я думаю дело...   Apr 14 2015, 05:34
|- - vanek18   Цитата(Golikov A. @ Apr 14 2015, 05:34) п...   Apr 14 2015, 06:29
|- - johnshadow   Цитата(vanek18 @ Apr 14 2015, 09:29) С ра...   Apr 14 2015, 06:49
- - Golikov A.   А у вас случаем нигде не настроено так что програм...   Apr 14 2015, 08:15
|- - vanek18   Цитата(Golikov A. @ Apr 14 2015, 09:15) А...   Apr 14 2015, 09:48
|- - johnshadow   Цитата(vanek18 @ Apr 14 2015, 12:48) А во...   Apr 15 2015, 08:53
- - Golikov A.   А почему у вас IRAM зарезан? на 0х400? А вы на фу...   Apr 14 2015, 10:58
|- - seniorandre   У меня такое было по молодости. Я тогда неправильн...   Apr 14 2015, 11:06
||- - seniorandre   Цитата(seniorandre @ Apr 14 2015, 14:06) ...   Apr 23 2015, 17:35
|- - vanek18   Цитата(Golikov A. @ Apr 14 2015, 10:58) А...   Apr 15 2015, 04:55
- - Golikov A.   ЦитатаЯ тогда неправильный размер для переменной х...   Apr 14 2015, 11:14
|- - seniorandre   ну да в лоб сделал что подобное, потом инкремент и...   Apr 14 2015, 11:22
- - Golikov A.   0x200026b0 0x00001000 Zero RW 2 ...   Apr 15 2015, 05:00
|- - vanek18   Цитата(Golikov A. @ Apr 15 2015, 05:00) 0...   Apr 15 2015, 05:33
- - редактор   Может данные в UART идут из локального буфера, поэ...   Apr 15 2015, 06:09
|- - vanek18   Цитата(редактор @ Apr 15 2015, 06:09) Мож...   Apr 15 2015, 06:24
- - Golikov A.   на кучу нет, можно вообще без нее, А стек какой-то...   Apr 15 2015, 07:52
|- - vanek18   Цитата(Golikov A. @ Apr 15 2015, 07:52) н...   Apr 15 2015, 09:49
- - scifi   Цитата(vanek18 @ Apr 15 2015, 12:49) Итак...   Apr 15 2015, 10:15
- - Golikov A.   ЦитатаКакой ужас! Как можно так жить? К чему э...   Apr 15 2015, 10:54
|- - vanek18   Цитата(Golikov A. @ Apr 15 2015, 10:54) А...   Apr 15 2015, 11:34
- - scifi   Кстати, выстрел наугад: у меня когда стек не был в...   Apr 15 2015, 11:50
|- - johnshadow   Цитата(scifi @ Apr 15 2015, 14:50) Кстати...   Apr 15 2015, 18:48
- - Golikov A.   А стэк пишется с конца, тут ничего не изменилось?...   Apr 15 2015, 11:56
- - Golikov A.   ЦитатаСдается что у Вас все таки проблема по работ...   Apr 23 2015, 17:46


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 16:56
Рейтинг@Mail.ru


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