Сборка прошивок

nevkon
Offline
Зарегистрирован: 20.01.2015

Здравствуйте.

Есть устройство с прошивкой, прошивка открытая. Но прошивка прилизана настолько что при компиляции не тем что описано (gcc-avr (4.8.1), avr-libc (1.8.0), binutils-avr (2.24) (Debian 8.2))  не лезет в камень. Есть желание подобрать компилятор для форточки, который позволит впихнуть прошивку в камень. Хотел попробовать Atmel Studio 7, но требует регистрацию на сайте и письмо на подтверждение не приходит. Может посоветуете чего? Мне нужно немного изменить прошивку (значения в условиях).

Устройство: http://www.ab-log.ru/smart-house/ethernet/megad-328

Прошивка 3.40: http://www.ab-log.ru/page.php?Cat=110&ID=161&q=winavr

Также буду рад если подскажите как можно уменьшить разрядность на портах ADC6 & ADC7 на Atmega328p. Нужно для ускорения преобразования (в идеале лог. 0 и 1).

Заранее спасибо за ответы.

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

avrdude -p atmega328p -c usbasp -U flash:w:test.hex

Скачать hex

nevkon
Offline
Зарегистрирован: 20.01.2015

Вы предлагаете готовый hex, вы экстрасенс и угадали что мне надо было исправить в коде? Если полазите по сайту, то увидите что обновление прошивки идет по сети без программатора.

Если что не обижайтесь, я не издеваюсь. Просто я спрашиваю одно, а вы говорите другое. Как залить прошивку я знаю, поиском пользоваться умею.

Radjah
Offline
Зарегистрирован: 06.08.2014

Если код не влезает, то оптимищируй его или пиши на асме.

nevkon
Offline
Зарегистрирован: 20.01.2015

Код влезает, но у автора прошивки. У меня пока не получается скомпилировать так чтобы влезло. Поэтому и спрашиваю каким компилятором можно еще попробовать собрать прошивку.

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

nevkon пишет:

Код влезает, но у автора прошивки. У меня пока не получается скомпилировать так чтобы влезло. Поэтому и спрашиваю каким компилятором можно еще попробовать собрать прошивку.

какого размера у тебя получается хекс и чем ты собираешь?

nevkon
Offline
Зарегистрирован: 20.01.2015

avr-gcc - 4.8.2, avr-libc - 1.8.0, binutils-avr - 2.23.1, kubuntu trusty
Сборка идет через make, вывод:

avr-gcc -g -mmcu=atmega328p -Wall -W -Os -fno-split-wide-types -fno-tree-scev-cprop -mcall-prologues -Wl,-gc-section -fdata-sections -ffunction-sections -Wl,--relax -Os -c main.c
avr-gcc -g -mmcu=atmega328p -Wall -W -Os -fno-split-wide-types -fno-tree-scev-cprop -mcall-prologues -Wl,-gc-section -fdata-sections -ffunction-sections -Wl,--relax -Os -c ip_arp_udp_tcp.c
avr-gcc -g -mmcu=atmega328p -Wall -W -Os -fno-split-wide-types -fno-tree-scev-cprop -mcall-prologues -Wl,-gc-section -fdata-sections -ffunction-sections -Wl,--relax -Os -c enc28j60.c
avr-gcc -g -mmcu=atmega328p -Wall -W -Os -fno-split-wide-types -fno-tree-scev-cprop -mcall-prologues -Wl,-gc-section -fdata-sections -ffunction-sections -Wl,--relax -Os -c websrv_help_functions.c
avr-gcc -g -mmcu=atmega328p -Wall -W -Os -fno-split-wide-types -fno-tree-scev-cprop -mcall-prologues -Wl,-gc-section -fdata-sections -ffunction-sections -Wl,--relax -Os -c hw_dht.c
avr-gcc -g -mmcu=atmega328p -Wall -W -Os -fno-split-wide-types -fno-tree-scev-cprop -mcall-prologues -Wl,-gc-section -fdata-sections -ffunction-sections -Wl,--relax -o megad-328.elf -Wl,-Map,megad-328.map main.o ip_arp_udp_tcp.o enc28j60.o websrv_help_functions.o hw_dht.o
avr-objcopy -R .eeprom -O ihex megad-328.elf megad-328.hex 
avr-size megad-328.elf
text data bss dec hex filename
28388 1108 1280 30776 7838 megad-328.elf

Expl.: data=initialized data, bss=uninitialized data, text=code

К сожалению не могу понять где размер прошивки (есть подозрение что 30776 байт). Там в камне еще загрузчик висит для обновления по сети, сколько он весит не знаю.

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

nevkon пишет:

К сожалению не могу понять где размер прошивки (есть подозрение что 30776 байт). Там в камне еще загрузчик висит для обновления по сети, сколько он весит не знаю.

т.е.

ты прошивать не пробовал?

считать фьюзы с камня, что бы узнать, сколько выделено под загрузочную область не пробовал?

но, уже сомневаешься.

*по любому должно влезть -  в крайнем случае можно отрубить загрузчик и получить честные 32 кб флеша.

**кстати, а что за нафик в Makefile?

#DUDECPUTYPE=m88
MCU=atmega168 // незакоментированное?
nevkon
Offline
Зарегистрирован: 20.01.2015

Сейчас попробовал компилятор что идет с дуино иде, вывод:

   text    data     bss     dec     hex filename
  28326    1108    1280   30714    77fa megad-3.40/megad-328.elf
nevkon
Offline
Зарегистрирован: 20.01.2015

Прошивать пробовал, прошивальщик орет что прошивка слишком большая, насколько не уточняет.

Ага, проект у него начинался с того камня.

nevkon
Offline
Зарегистрирован: 20.01.2015

Вечером попробую прошить полученную прошивку и попробую повторить систему автора если не получится.

uni
uni аватар
Offline
Зарегистрирован: 24.09.2015

Чтобы размер показывался в "человеческом" виде нужно указать ключ для avr-size: --format=avr. Найти в Makefile правило для вывода размера (SIZE, ELFSIZE, ...) и добавить или изменить значение опции --format.

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

nevkon пишет:

Прошивать пробовал, прошивальщик орет что прошивка слишком большая, насколько не уточняет.

странно это всё - должно воткнуться, если только под загрузчик 2 кб не откушено.

отрубай загрузчик у камня или рой исходники, что там лишнего и что можно отключить - явно у автора не весь фарш юзается.

nevkon
Offline
Зарегистрирован: 20.01.2015

Поместилось. 1.6.0 кстати сделал меньший хекс чем 1.6.5. Так что все решаемо.

Осталось узнать как понизить разрядность АЦП (вот такой вот казус - обычно повышают разрядность, а мне надо ускорить обработку и надо знать всего лишь L или H на входе).

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

nevkon, зачем вам АЦП если нужен 0 или 1? Подключайтесь компаратором к этим пинам (А6 ,А7) ,  нужно настроить сранение с ареф, и читайте нужный вход. Больше 1 вольта  на нём или меньше.

nevkon
Offline
Зарегистрирован: 20.01.2015

Это я так понимаю код изменится? Можно пример кода?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

nevkon,

ADCSRA&=~(1<<ADEN); //отключить ацп
ADCSRB|=1<<ACME;//использовать мультиплексор
ADMUX=(1<<MUX2)|(1<<MUX1)|(1<<MUX0); //подключить вход А7 
ACSR=(0<<ACD)|(1<<ACBG); //включить компаратор, сравнивать с ареф
ACSR&(1<<ACO)? Serial.println('0') : Serial.println('1');

 

nevkon
Offline
Зарегистрирован: 20.01.2015

Спасибо, буду пробовать.