|
Cortex M4F проблема с памятью |
|
|
|
Apr 14 2015, 05:28
|
Участник

Группа: Участник
Сообщений: 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):  . Подскажите пожалуйста,что копать,куда смотреть.
|
|
|
|
|
 |
Ответов
|
Apr 23 2015, 11:46
|
Участник

Группа: Участник
Сообщений: 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) } } Карта памяти в приложении. И моя программа с приветствием миру заработала при любых комбинациях и размерах областей памяти и ее содержимого. О чудо,подумал я! И на всякий случай решил удостовериться что ничего не работало. Я снова скомпилировал проект,но уже со стандартными настройками...такой какой был раньше и не работал. И он ЗАРАБОТАЛ Что это? И что я сделал этим разбиение памяти?
Mem_map_SCATTER.txt ( 995 байт )
Кол-во скачиваний: 105
|
|
|
|
|
Apr 23 2015, 12:06
|
Участник

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

|
Цитата(aaarrr @ Apr 23 2015, 11:56)  Можете привести map от неработающего варианта? Он чуть выше уже был
|
|
|
|
|
Apr 23 2015, 12:18
|
Участник

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

|
Цитата(aaarrr @ Apr 23 2015, 13:10)  Вот тут интересно было бы узнать значение SP при входе в main(). Это можно как-то без отладчика сделать? И факт в том,что сейчас с этой картой памяти он работает!  И кстати тот проект,который вначале темы, работает всегда. Но когда я все это ставлю на rtx, та же лажа,что и раньше((
Сообщение отредактировал vanek18 - Apr 23 2015, 12:21
|
|
|
|
|
Apr 23 2015, 12:28
|
Гуру
     
Группа: Свой
Сообщений: 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)  И факт в том,что сейчас с этой картой памяти он работает!  С той, с которой не работал раньше?
|
|
|
|
|
Apr 24 2015, 05:16
|
Участник

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

|
Цитата(aaarrr @ Apr 23 2015, 12:28)  С той, с которой не работал раньше? Да,именно та,которая не работала,изменил лишь однажды распределение памяти. И все. В приложении значения SP и map при распределении памяти *.sct и автоматически соответственно.
SP.txt ( 1.73 килобайт )
Кол-во скачиваний: 192
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|