в общем, поскольку жизненная ситуация складывается так, что вряд ли до поздней осени я смогу уделять много времени этому проекту, выкладываю все, что есть на сегодня в свободный доступ.
скачать архив можно здесь:
https://cloud.mail.ru/public/3Cg3%2FjS3dJTuju
в архиве исходники на Си,
avr-gcc версии не хуже 6.3.0
среди исходников есть и проект
PROTEUS 8.8 с необходимым файлом образа SD-карты
в папке
m328p готовый HEX-файл для прошивки и ELF для симуляции в протеусе. там же готовый
makefile - если тулчейн установлен корректно, достаточно просто в этой папке выполнить команду
make all и проект пересоберется.
если кто решит переносить проект в студию, сообщаю важное (оно есть в комментах внутри исходников, но кто ж их читает?)
1. собирать надо с такими опциями компилятора:
-Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -mcall-prologues -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega328p -DF_CPU=16000000UL
синим то, что можно и не задавать - размер flash позволяет на этом не экономить, но в
atmega16 при этом уже не влезет однозначно.
2. опции линкера при этом должны быть такими:
-Wl,-gc-sections -T PATH-PRJ/ld_script.x -Wl,--relax -mmcu=atmega328p
обратите внимание, что выделенный красным цветом параметр должен быть заменен на корректный путь вашего проекта!
3. остальные опции по вашему усмотрению
4. прошивка заметно уменьшается в размере при добавлении к опциям компилятора и линкера
-flto, но при этом в протеусе исчезнет возможность отладки по исходном коду.
5. фьюзы для микроконтроллера надо настроить на внешний кварц высокой частоты. байтовые значения фьюзов такие:
LOW=0xF7 HIGH=0xDF EXT=0x07
в архиве в папке DOC описание языка скриптов и самого плейера по минимуму, а так же принципиальная схема.
проект выкладывается
as-is, без каких либо гарантий. если у кого будут проблемы с кодом - постараюсь по мере сил помогать решать, но не обещаю, что это будет приоритетной моей задачей. по идее, все должно работать... по поводу скриптов помогать готов в обычном режиме.
симулятор, который я ранее выкладывал, матричные возможности не поддерживает, имейте ввиду.