Рабочее место разработки прошивок для МК AVR — различия между версиями
Vooon (обсуждение | вклад) (→Софт для разработки прошивок - WinAVR) |
Vooon (обсуждение | вклад) м |
||
Строка 52: | Строка 52: | ||
Для сборки проекта используется утилита make<ref>[http://www.linux.org.ru/books/GNU/Gmake.htm Эффективное использование GNU make]</ref>. | Для сборки проекта используется утилита make<ref>[http://www.linux.org.ru/books/GNU/Gmake.htm Эффективное использование GNU make]</ref>. | ||
Она выполняет правила, записанные в файле '''Makefile'''. | Она выполняет правила, записанные в файле '''Makefile'''. | ||
− | + | Его можно написать вручную, а можно воспользоваться программой из состава WinAVR | |
− | Ниже пример | + | Ниже пример '''Makefile''' для сборки тестового проекта: |
'''Makefile''': | '''Makefile''': | ||
Строка 99: | Строка 99: | ||
$(addsuffix .eep,$(target)): elf | $(addsuffix .eep,$(target)): elf | ||
− | -$(objcpy) -j .eeprom --set-section-flags=.eeprom="alloc,load" | + | -$(objcpy) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ |
--change-section-lma .eeprom=0 --no-change-warnings -O ihex \ | --change-section-lma .eeprom=0 --no-change-warnings -O ihex \ | ||
$(addsuffix .elf,$(target)) $(addsuffix .eep,$(target)) 2>>$(cclog) | $(addsuffix .elf,$(target)) $(addsuffix .eep,$(target)) 2>>$(cclog) | ||
Строка 105: | Строка 105: | ||
#- create coff file ---------------------------------------------------------------------------------- | #- create coff file ---------------------------------------------------------------------------------- | ||
− | coffconv := $(objcpy) --debugging --change-section-address .data-0x800000 \ | + | coffconv := $(objcpy) --debugging --change-section-address .data-0x800000 \ |
− | --change-section-address .bss-0x800000 | + | --change-section-address .bss-0x800000 \ |
− | --change-section-address .noinit-0x800000 | + | --change-section-address .noinit-0x800000 \ |
--change-section-address .eeprom-0x810000 | --change-section-address .eeprom-0x810000 | ||
Строка 240: | Строка 240: | ||
=== Тестовый проект на МК (мигаем светодиодами) === | === Тестовый проект на МК (мигаем светодиодами) === | ||
Здесь будет рассмотрен тестовый проект мигающий светодиодами. | Здесь будет рассмотрен тестовый проект мигающий светодиодами. | ||
+ | |||
+ | == См. также == | ||
+ | <references /> |
Версия 04:26, 20 декабря 2007
На этой странице мы укажем все необходимое, чтобы быстро начать разработку прошивок для МК "AVR"
Содержание
Софт для разработки прошивок - WinAVR
В качестве основного инструмента выбираем WinAVR.
Порядок скачки и установки
- Скачать последнюю версию с сайта: winavr.sourceforge.net SF download page;
- Запустить файл;
- Дождаться окончания установки отвечая по пути на все вопросы;
- Запустить среду разработки и загрузить в неё тестовый проект, скомпилировать и убедиться, что всё ок.
Тестовый проект (мигаем светодиодами)
Моргаем светодиодами на порту B
main.c: <source lang="c">/**
* \version main.cpp, v 0.0.1 5/11/2007 12:31 vovan */
/**
*/
- include <avr/io.h>
- include <util/delay.h>
- include <inttypes.h>
/**
* main() */
int main(void) { char i; DDRB = 0xFF; PORTB = 0x00;
while(1) { for(i = 0; i < 100; i++) _delay_ms(10); PORTB = 0xFF; for(i = 0; i < 100; i++) _delay_ms(10); PORTB = 0x00; } return 0; } </source>
Для сборки проекта используется утилита make[1]. Она выполняет правила, записанные в файле Makefile. Его можно написать вручную, а можно воспользоваться программой из состава WinAVR
Ниже пример Makefile для сборки тестового проекта:
Makefile: <source lang="bash"> target := main f_cpu := 14745600UL mcu := atmega32 src_dirs := . cc := avr-g++ objcpy := avr-objcopy cflags := -Wall -g -O2 -DF_CPU=$(f_cpu) -mmcu=$(mcu) lflags := -Wl -g -mmcu=$(mcu) cclog := compile.log doxylog := doxy.log programmer := uisp -dprog=abb -dlpt=/dev/parport0 --erase --upload --verify if=./$(addsuffix .hex,$(target)) size := avr-size xmlconf := project.xml
- - do not need to edit -------------------------------------------------------------------------------
rm := rm -rf doxygen := doxygen VPATH := $(src_dirs) search := $(addsuffix /*.cpp,$(src_dirs)) ELFSIZE := $(size) --mcu=$(mcu) --format=avr $(addsuffix .elf,$(target))
- -----------------------------------------------------------------------------------------------------
all: elf hex eep rmlogifclean size
- - create elf file -----------------------------------------------------------------------------------
elf: $(addsuffix .elf,$(target))
$(addsuffix .elf,$(target)): $(notdir $(patsubst %.cpp,%.o, $(wildcard $(search)))) $(cc) $(lflags) $^ -o $(addsuffix .elf,$(target)) 2>>$(cclog)
- - create hex file -----------------------------------------------------------------------------------
hex: $(addsuffix .hex,$(target))
$(addsuffix .hex,$(target)): elf $(objcpy) -R.eeprom -O ihex $(addsuffix .elf,$(target)) $(addsuffix .hex,$(target)) 2>>$(cclog)
- - create eep file -----------------------------------------------------------------------------------
eep: $(addsuffix .eep,$(target))
$(addsuffix .eep,$(target)): elf -$(objcpy) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ --change-section-lma .eeprom=0 --no-change-warnings -O ihex \ $(addsuffix .elf,$(target)) $(addsuffix .eep,$(target)) 2>>$(cclog)
- - create coff file ----------------------------------------------------------------------------------
coffconv := $(objcpy) --debugging --change-section-address .data-0x800000 \ --change-section-address .bss-0x800000 \ --change-section-address .noinit-0x800000 \ --change-section-address .eeprom-0x810000
coff: elf $(coffconv) -O coff-avr $(addsuffix .elf,$(target)) $(addsuffix .cof,$(target)) 2>>$(cclog) extcoff: elf $(coffconv) -O coff-ext-avr $(addsuffix .elf,$(target)) $(addsuffix .cof,$(target)) 2>>$(cclog)
- - create o file -------------------------------------------------------------------------------------
%.o: %.cpp $(cc) $(cflags) $(addprefix -I,$(src_dirs)) -MD -c $< 2>>$(cclog)
- - create doxygen documentation ----------------------------------------------------------------------
dox: $(rm) $(doxylog) $(cog) Doxyfile $(doxygen) 2>> $(doxylog)
- - create program chip -------------------------------------------------------------------------------
program: $(programmer)
- - see size of program (WIN only) --------------------------------------------------------------------
size: if [ `echo ${OS} | grep "win" -i` ]; then echo; $(ELFSIZE); fi
- - clean garbage -------------------------------------------------------------------------------------
garbage: $(rm) $(wildcard *.d) $(wildcard *.o) $(cclog) $(doxylog) $(wildcard *.DBK) $(wildcard *.PWI) rmlogifclean: if [ `du $(cclog) | cut -f1 ` -eq '0' ]; then echo rm log; $(rm) $(cclog); fi if [ `du $(doxylog) | cut -f1 ` -eq '0' ]; then echo rm log; $(rm) $(doxylog); fi
- - clean and deep clean ------------------------------------------------------------------------------
clean: $(rm) $(addsuffix .elf,$(target)) $(addsuffix .hex,$(target)) $(wildcard *.d) $(wildcard *.o) \ $(wildcard *.hex) $(cclog) $(doxylog) $(wildcard *.DBK) $(wildcard *.PWI) deepclean: $(rm) $(addsuffix .elf,$(target)) $(addsuffix .hex,$(target)) $(wildcard *.d) $(wildcard *.o) \ $(wildcard *.hex) $(cclog) $(doxylog) doc $(wildcard *.DBK) $(wildcard *.PWI) $(cog) -x
- -----------------------------------------------------------------------------------------------------
include $(wildcard *.d) </source>
Софт для симуляции выполнения прошивок на МК - VMLAB
В качестве основного пакета для эмуляции МК "AVR" был выбран VMLAB.
Порядок скачки и установки
Здесь будет описан порядок установки и проверки симулятора.
Тестовый проект (мигаем светодиодами)
Здесь будет описан порядок запуска тестового проекта.
Программатор для прошивки МК
Здесь не существует варианта, который мы могли бы рекоммендовать однозначно. Диапазон решений сильно отличается по цене, надежности и трудозатратам которые нужно вложить в программатор, если делать его самому. Основные три варианта приведены ниже, выбрать из них предстоит вам самим:
Вариант решения | Внешний вид | Комментарий | Приблизительная стоимость | Где взять |
---|---|---|---|---|
Самодельный программатор "5 проводков" для LPT-порта | Может "сжечь" LPT-порт на материнской плате;
Самый дешевый и быстрый вариант; |
от 3$ | Собрать самому | |
Самодельный программатор с буфером для LPT-порта | Менее быстрый, зато более надежный вариант; | от 7$ | Собрать самому | |
Готовый программатор AVR910 для COM-порта | Файл:AVRProgrammerCOM-AVR910 small.jpg | Очень надежный вариант | от 25$ | Купить в радиотоварах |
Минимальное железо кроме программатора нужное для экспериментов
В этом разделе мы расскажем что вам будет нужно, чтобы начать разработку прошивок для МК AVR и как всё это собрать воедино и запустить тестовый проект.
Минимальный рекомендуемый набор для разработки устройств на МК
В минимальном рекомендуемом варианте, кроме программатора, вам потребуются комплектующие общей стоимостью порядка 20$:
Правила подключения к МК питания и других обязательных элементов обвязки
Здесь будет сказано как подключить к МК питание, ресет и т.п.
Тестовый проект на МК (мигаем светодиодами)
Здесь будет рассмотрен тестовый проект мигающий светодиодами.