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

 
 
 
Reply to this topicStart new topic
> Проблемы с адресацией памяти. Atmega 64
tdi@013h
сообщение Feb 21 2011, 09:26
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 8-02-11
Пользователь №: 62 795



Продолжаю свои прогулки по саду граблей и костылей. Обновляю среду разработки, на этот раз под AVR.
Codeblocks 10.05 + avr-gcc 4.5.2

Проект билдится. На выходе имеем следующее.
Цитата
avr-size bin/Debug/Atmel_OB.elf
text......data.....bss......dec........hex... filename
47872....1744....1660....51272....c848 bin/Debug/Atmel_OB.elf


При билде этого же проекта с помощью avr-3.4.6(изначально эту версию методом плясок выбрали потому что собирала проект как надо) имеем
Цитата
avr-size bin/Debug/Atmel_OB.elf
text......data.....bss......dec........hex... filename
55110...720......1660....57490....e092 bin/Debug/Atmel_OB.elf


Собственно засада в секции data, туда почему-то запихивается слишком много данных(т.е пытается впихнуть всё в ОЗУ, которого столько просто нет).
Куда смотреть и кого бить канделябром, чтобы на avr-4.5.2 собиралось так же, как и на 3.4.6?

Сообщение отредактировал tdi@013h - Feb 21 2011, 09:29
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Feb 21 2011, 10:08
Сообщение #2


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



ну я бы для начала смотрел в .map файл и определялся что именно там сидит в .data... а потом уже по исходнику бы прикидывал что к чему....


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
tdi@013h
сообщение Feb 21 2011, 10:25
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 8-02-11
Пользователь №: 62 795



Авторы проекта говорят, что при неправильном билде в ОЗУ засовываются строковые константы.
Проект большой, памяти впритык. По идее эти константы должны писаться на flash.
Что конкретно искать в .map файле?(могу на общее обозрение выкинуть)

Код не мой, что в нём происходит пока представляю слабо.
Методом тыка выяснено, что при сокращении конструкции вида
Цитата
mcu_flash_char cError[] = "\r\nError in the programm...\r\n";

до состояния
Цитата
mcu_flash_char cError[] = "\r\nErr\r\n";

секция data сокращается как раз на 20 байт.

Сообщение отредактировал tdi@013h - Feb 21 2011, 10:15
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Feb 21 2011, 10:29
Сообщение #4


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



ну в .map файле будет видно что именно и сколько памяти занимает в какой секции.
выкладывайте.

Цитата
mcu_flash_char cError[] = "\r\nError in the programm...\r\n";

до состояния
Цитата
mcu_flash_char cError[] = "\r\nErr\r\n";

секция data сокращается как раз на 20 байт.

ну так странно вообще как оно во флеши раньше оказывалось то....

http://www.nongnu.org/avr-libc/user-manual...l#faq_rom_array

а кто такой этот mcu_flash_char??


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
tdi@013h
сообщение Feb 21 2011, 11:47
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 8-02-11
Пользователь №: 62 795



Цитата(sigmaN @ Feb 21 2011, 14:29) *
ну так странно вообще как оно во флеши раньше оказывалось то....

а кто такой этот mcu_flash_char??

Мопед не мой.
mcu_flash_char выдернул первый попавшийся на глаза кусок с "написанным_в_вот_таких кавычках_текстом"
Во влэшэ оно оказывалось методом "3 раза ку, 2 раза в бубен, внезапно собралось как надо".

Немалое количество кода перелопачивать придётся, следуя вашему методу (находил я его)
Надеялся, что оно как-то словом магическим матерным для компилятора вылечится.
ps
С контроллерами имею дело не более месяца, поэтому пока слабо представляю что и как происходит(по специализации я тупо-админ).

Вкурил код. Вроде все переменные описываются как сказано в ссылке 4 поста(по крайней мере конструкции оттуда используются). Мистика.
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Feb 21 2011, 12:24
Сообщение #6


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



поиск по всем файлам проекта по строке mcu_flash_char
надо найти, где определяется эта хренотень...
вообще, конечно странно, что предыдущая версия собирала как надо...


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
Юрий_СВ
сообщение Mar 9 2011, 01:27
Сообщение #7


Участник
*

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



Если компилируется и предупреждали о возможных проблеммах с размещением...

Значит mcu_flash_char, видимо, описан так :
#define mcu_flash_char const char

Так обычно пишут в книжках по Си, но в данном случае это не совсем верно.

Должно быть так:
#define mcu_flash_char PROGMEM const char

Сообщение отредактировал Юрий_СВ - Mar 9 2011, 01:30
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 20:54
Рейтинг@Mail.ru


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