| Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
Программисты, помогите с портированием!
27.10.2010, 20:50
|
|
|
Временная регистрация
Регистрация: 20.05.2010
Сообщений: 64
Сказал спасибо: 8
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Программисты, помогите с портированием!
Собрал себе Simple SD Audio Player по проекту Чана (проша от 11.10.2010). Не без помощи товарищей с этого форума, довел его до вполне автономного существования. Развел печатку, протравил, собрал, запустил.
Возникла необходимость девайс повторить, и как всегда ATtiny85 в наших магазинах кончилась. Взял 45ю, тем паче Чаном было написано что даже на 25 могет работать. Вот тут и началось...
При первой компиляции под 45:
|
Код:
|
AVR Memory Usage
----------------
Device: attiny45
Program: 6428 bytes (156.9% Full)
(.text + .data + .bootloader)
Data: 358 bytes (139.8% Full)
(.data + .bss + .noinit)
Build succeeded with 0 Warnings... |
Начал пляски с бубном и отключение всего что можно в Хедерах. Благо Чаном было предусмотрена возможность отключения фенечек по директивам препроцессора. Оставил так:
|
Код:
|
#define _USE_READ 1 /* 1:Enable pf_read() */
#define _USE_DIR 0 /* 1:Enable pf_opendir() and pf_readdir() */
#define _USE_LSEEK 0 /* 1:Enable pf_lseek() */
#define _USE_WRITE 0 /* 1:Enable pf_write() */
#define _FS_FAT12 0 /* 1:Enable FAT12 support */
#define _FS_FAT32 0 /* 1:Enable FAT32 support */ |
Полезли ошибки с обращениями в "отключенные" функции. Закомментил.
Всеравно много оказалось. Начал ручками еще кое-что вырезать, насколько знания в Си позволяют. Вырезал все функции работы с папками и FAT32.
Уменьшил размер буфера с 256 до 128 чтоб в оперативу влазило. И все использующие его функции.
В общем стало влезать. Но играть не хочет. Идут щелчки, похожие на кряканье и все. Железо проверил с 85 все норм.
Помогите кто может, два дня уже воюю, а победить никак не могу.
Видимо что-то где-то с указателями или ссылками пропустил (с ними у меня туго, особенно с механизмами ихней передачи и пр.) или закомментил что-то важное.
Думаю, не я один будут очень благодарен. Пока искал инфу, попадилсь другие форумы с теми же траблами.
З.Ы. И еще прикол, даже уменьшенная проша почему не запускается в Студийном пошаговом дебагере, пишет:
|
Код:
|
The contents of the objectfile exceeds the maximum program memory of the device |
|
|
|
|
27.10.2010, 21:19
|
|
|
Гражданин KAZUS.RUN
Регистрация: 08.07.2006
Сообщений: 883
Сказал спасибо: 119
Сказали Спасибо 1,108 раз(а) в 175 сообщении(ях)
|
Re: Программисты, помогите с портированием!
Сообщение от DimanVIP
|
|
Помогите
|
1. Используйте самый свежий компилятор GCC, он генерирует заметно более оптимальный код. Брать здесь http://www.atmel.no/beta_ware/, конкретно AVR Toolchain Installer for use with AVR Studio. Это продолжение замороженного проекта WinAVR
2. Используйте такие опции компилятора gcc:
-Os -fexpensive-optimizations -fshort-enums -fpack-struct -funsigned-char -funsigned-bitfields -fwhole-program -mrelax -ffunction-sections -fdata-sections
3. Используйте такие опции линковки:
3.а. Если линковщик вызывается напрямую:
--gc-sections -O1 -mrelax
3.б. Если линковщик вызывается косвенно через gcc:
-Wl,--gc-sections -Wl,-O1 -mrelax
Удачи!
__________________
.

В мире всего два типа людей: те у кого был ZX Spectrum, и те у кого его не было.
|
|
|
|
Сказали "Спасибо" alexgap
|
|
|
27.10.2010, 21:49
|
|
|
Временная регистрация
Регистрация: 20.05.2010
Сообщений: 64
Сказал спасибо: 8
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: Программисты, помогите с портированием!
Обязательно попробую.
Сейчас опции компилятора берутся из внешнего файла, созданного самим Чаном. Единственно в нем правлю камень на 45.
Делаю в Студии так: Edit current configuration option -› Use external makeFile -› Makefile_mo
Еще заметил пару очень странностей для меня:
1. В студии жму Ctrl + F7, вылазиет окошко: что 3 файлы были модифицированы, ребуилд прожект? -› жму ОК -› вылазиет окошко: что 3 файлы были модифицированы..... и так до бесконечности. Пока Нет не нажмешь.
2. Вырезал в main.c функцию delay500, теперь пошаговый дебаг начинается с середины main. Шо за нах? До этого как и положено начиналось с начала.
Пробовал просто комментить, всеравно курсор пошаговой отладки после монтирования FS вылезает на эти закоменченные строки и ходит по ним. Пятой точкой чую, что одних знаний Си тут будет мало.
|
|
|
|
27.10.2010, 21:54
|
|
|
Гражданин KAZUS.RUN
Регистрация: 08.07.2006
Сообщений: 883
Сказал спасибо: 119
Сказали Спасибо 1,108 раз(а) в 175 сообщении(ях)
|
Re: Программисты, помогите с портированием!
Сообщение от DimanVIP
|
|
Вырезал в main.c функцию delay500, теперь пошаговый дебаг начинается с середины main. Шо за нах? До этого как и положено начиналось с начала.
|
Скорее всего проект скомпилирован с включенными оптимизациями, отсюда и косяки у дебаггера.
Мой вам совет - возьмите ту прошивку, которая у вас уже работала, скомпилируйте ее для тини45 тем компилятором и с теми опциями, которые я вам советовал выше. Плюс поправьте размер буфера чтобы ОЗУ у вас хватало.
__________________
.

В мире всего два типа людей: те у кого был ZX Spectrum, и те у кого его не было.
|
|
|
|
27.10.2010, 22:31
|
|
|
Временная регистрация
Регистрация: 20.05.2010
Сообщений: 64
Сказал спасибо: 8
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: Программисты, помогите с портированием!
Взял старый проект. Он изначально меньше нового.
Ручками подправил MakeFile. Получается вот что:
|
Код:
|
rm -rf *.o sd8p_mo.elf *.eps *.bak *.a
rm -rf *.lst *.map
rm -rf sd8p_mo.hex
avr-gcc -gdwarf-2 -Wall -Os -mcall-prologues -fexpensive-optimizations -fshort-enums -fpack-struct -funsigned-char -funsigned-bitfields -mrelax -ffunction-sections -fdata-sections -mmcu=attiny45 -DF_CPU=16000000UL -DSTEREO=0 -c -o main.o main.c
avr-gcc -gdwarf-2 -Wall -Os -mcall-prologues -fexpensive-optimizations -fshort-enums -fpack-struct -funsigned-char -funsigned-bitfields -mrelax -ffunction-sections -fdata-sections -mmcu=attiny45 -DF_CPU=16000000UL -DSTEREO=0 -c -o pff.o pff.c
avr-gcc -gdwarf-2 -Wall -Os -mcall-prologues -fexpensive-optimizations -fshort-enums -fpack-struct -funsigned-char -funsigned-bitfields -mrelax -ffunction-sections -fdata-sections -mmcu=attiny45 -DF_CPU=16000000UL -DSTEREO=0 -c -o mmc.o mmc.c
avr-gcc -c -mmcu=attiny45 -I. -x assembler-with-cpp -Wa,-adhlns=asmfunc.lst,-gstabs -DF_CPU=16000000UL -DSTEREO=0 asmfunc.S -o asmfunc.o
avr-gcc -gdwarf-2 -Wall -Os -mcall-prologues -fexpensive-optimizations -fshort-enums -fpack-struct -funsigned-char -funsigned-bitfields -mrelax -ffunction-sections -fdata-sections -mmcu=attiny45 -DF_CPU=16000000UL -DSTEREO=0 -Wl,--gc-sections -Wl,-O1 -mrel
ax,-Map,sd8p_mo.map -o sd8p_mo.elf main.o pff.o mmc.o asmfunc.o
avr-objdump -h -S sd8p_mo.elf › sd8p_mo.lst
avr-objcopy -j .text -j .data -O ihex sd8p_mo.elf sd8p_mo.hex
avr-size -C --mcu=attiny45 sd8p_mo.elf
AVR Memory Usage
----------------
Device: attiny45
Program: 5060 bytes (123.5% Full)
(.text + .data + .bootloader)
Data: 362 bytes (141.4% Full)
(.data + .bss + .noinit)
Build succeeded with 0 Warnings... |
Так должно быть? Или что-то где-то сменить? Извиняюсь конечно за глупые вопросы, но с этим компилятором работаю впервые. Обычно все пишу в IARe.
Некоторые директивы позволили уменьшить размер Хекса байт на 360. Если юзать директиву -fwhole-program, то вылазит туева куча ошибок.
Попробую отдельно с этой проше поколдавать. Может чаво и получится.
|
|
|
|
27.10.2010, 23:02
|
|
|
Гражданин KAZUS.RUN
Регистрация: 08.07.2006
Сообщений: 883
Сказал спасибо: 119
Сказали Спасибо 1,108 раз(а) в 175 сообщении(ях)
|
Re: Программисты, помогите с портированием!
Сообщение от DimanVIP
|
|
Program: 5060 bytes (123.5% Full)
|
На 23 процента больше чем надо... Пробовали новый компилятор, или это результаты на том, который у вас уже стоял?
Из командной строки avr-gcc --version
И выложите сюда пожалуйста рабочие исх. прошивки, которую вы компилируете
__________________
.

В мире всего два типа людей: те у кого был ZX Spectrum, и те у кого его не было.
Последний раз редактировалось alexgap; 27.10.2010 в 23:08.
|
|
|
|
27.10.2010, 23:34
|
|
|
Временная регистрация
Регистрация: 20.05.2010
Сообщений: 64
Сказал спасибо: 8
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: Программисты, помогите с портированием!
avr-gcc (AVR_Toolchain_3.0_149) 4.4.3
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Перегрузить забыл комп.
Сейчас компилю старую прошу, получается так:
|
Код:
|
AVR Memory Usage
----------------
Device: attiny45
Program: 4020 bytes (98.1% Full)
(.text + .data + .bootloader)
Data: 218 bytes (85.2% Full)
(.data + .bss + .noinit)
Build succeeded with 0 Warnings... |
Вроде даже что-то пытается изобразить в звуке. Всмысле щелчки вроде отличаются.
Во вложении старая проша 'оригинал', и старая проша 'моя'.
|
|
|
|
28.10.2010, 00:52
|
|
|
Гражданин KAZUS.RUN
Регистрация: 08.07.2006
Сообщений: 883
Сказал спасибо: 119
Сказали Спасибо 1,108 раз(а) в 175 сообщении(ях)
|
Re: Программисты, помогите с портированием!
Сообщение от DimanVIP
|
|
Вроде даже что-то пытается изобразить в звуке. Всмысле щелчки вроде отличаются.
|
Вы забыли в асм файле asmfunc.S поправить длину очереди. Вот смотрите (выделено жирным):
|
Код:
|
...
3: ldiw r27,r26, Buff ;X = Buff + R25++
add r26, r25 ;
adc r27, r0 ;
inc r25 ;/
sbic _SFR_IO_ADDR(GPIOR0), 4 ;if 16bit, skip low byte
rcall rcv_spi ;/
4: lds r24, FifoCt ;wait while FIFO full
cpi r24, 255 ;
brcc 4b ;/
... |
Нужно 255 заменить на 149 (у вас длинна FIFO сейчас 150).
__________________
.

В мире всего два типа людей: те у кого был ZX Spectrum, и те у кого его не было.
|
|
|
|
Сказали "Спасибо" alexgap
|
|
|
28.10.2010, 14:08
|
|
|
Временная регистрация
Регистрация: 20.05.2010
Сообщений: 64
Сказал спасибо: 8
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: Программисты, помогите с портированием!
Изменил - не помогло. Проверил фьюзы, некоторые сбились. Подправил - не помогло.
Заодно возник вопрос, может их как-нить попробовать подправить?
Ставлю так:
Low: 11100001
││││└┴┴┴── CKSEL[3:0] Clock source selection
││└┴── SUT[1:0] Startup time selection
│└── CKOUT (0:Output system clock on the CLKO pin)
└── CKDIV8 Clock division ratio (1:1/1, 0:1/
High:11-11101
│││││└┴┴── BODLEVEL[2:0] (111:Off, 110:1.8, 101:2.7, 100:4.3, 011:2.3, 010:2.2, 001:1.9, 000:2)
││││└── EESAVE (Retain EEPROM at chip erase 1:No, 0:Yes)
│││└── WDTON (1:WDT normal, 0:WDT always on)
││└── SPIEN (1  isable ISP, 0:Enable ISP) *Available only HVS mode
│└── DWEN (On-Chip Debugging via RESET pin 1  isable, 0:Enable)
└── RSTDISBL (RESET pin 1:Enable, 0  isable(PORT))
Ext: -------1
└── SELFPRGEN *Refer to data sheet
Звук значительно меняется от размера буфера.
При отсутствующей флешке, идут просто одиночные щелчки с интервалом в примерно 1 с. Как и должно быть.
При буфере 150 идет "длинная очередь" щелчков.
При буфере 128 идут более редкие щелчки в перемешку с пищанием.
Кому интересно могу записать.
Значит флешку он все-таки видит, а косячит либо при чтении (скорей всего), либо уже при воспроизведении.
|
|
|
|
28.10.2010, 14:32
|
|
|
Заблокирован
Регистрация: 26.10.2010
Сообщений: 4
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Программисты, помогите с портированием!
Чудэсна! А разве длина буфера не должна быть кратна формату данных? Или пишем что попало?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:31.
|
|