vitmeat 0 22 марта, 2011 Опубликовано 22 марта, 2011 · Жалоба В общем имеется у меня платка LPCExpresso, с lpc1343 на борту, давно купленная за кровные 750руб. Никакие keil'ы, iar'ы, code red'ы, меня категорически не устраивают, как и eclipse в принципе. Выбор IDE я хочу сделать самостоятельно. А вот компилятор я хочу gcc. Есть от klen'а, есть Yagarto, есть Codesourcery G++. Так вот: Не могу сообразить, как собрать первый проект с cortex'овским cmsis'ом. (CMSISv1p30_LPC13xx) Нужен как минимум makefile и скрипты для линкера, а также правильная инициализация при старте. - это я правильно понимаю? Есть у кого нибудь пример для сабжа. Ну или может кто объяснит, что да как. Или даст адресок, где можно об этом почитать. Натыкался вот на это в интернете. http://www.microbuilder.eu/Projects/LPC134...enceDesign.aspx Но там все как-то перепахано и simple example от туда не получается выдрать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 22 марта, 2011 Опубликовано 22 марта, 2011 · Жалоба Здесь смотрели? А здесь? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vitmeat 0 22 марта, 2011 Опубликовано 22 марта, 2011 · Жалоба Да, смотрел, спасибо. Копал довольно долго, но там в основном если и есть какие примеры, то для их среды на code red, или для keil'овского uVision'а, то есть всякие IDE. А makefile'ы в Example Projects созданы средой и имеют соответствующее предупреждение ################################################################################ # Automatically-generated file. Do not edit! ################################################################################ И вообще высылаю сайту NXP лучики паноса, ибо гуглом не гуглится, а ихними поисками находятся постоянно 100500 страниц одного и того же, как бы ты не уточнял запрос. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 23 марта, 2011 Опубликовано 23 марта, 2011 · Жалоба Копал довольно долго, но там в основном если и есть какие примеры, то для их среды на code red, или для keil'овского uVision'а, то есть всякие IDE. А makefile'ы в Example Projects созданы средой и имеют соответствующее предупреждение ################################################################################ # Automatically-generated file. Do not edit! ################################################################################ Эти предупреждения касаются тех, кто пользуется средами. Если Вы пользоваться не собираетесь, то можете смело вымарать комментарии и пользоваться на первых порах имеющимися мейкфайлами и скриптами, которые и в африке останутся мейкфайлами и скриптами. Когда немного разберётесь можете продолжить самообучение на базе ну хоть этой статьи, а также имеющейся в интернете документации по линкеру и утилите make. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ivan1180 0 25 марта, 2011 Опубликовано 25 марта, 2011 (изменено) · Жалоба Вам сюда = LPC1343 Code Base У меня тоже есть плата за 750р, я половину от нее (с чужим JTAG) отпили ножовкой по металлу ;) Изменено 25 марта, 2011 пользователем Arischenko Ivan Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vitmeat 0 27 марта, 2011 Опубликовано 27 марта, 2011 · Жалоба Да, родной jtag я уже отпилил. Имеется в наличии какой то клон j-link'а, вот его и прикручу. Но для начала надо хоть что нибудь скомпилировать. Как я уже говорил имеется стойкая неприязнь ко всем навязываемым IDE. Вам сюда = LPC1343 Code Base Тут весьма сложно для начала. То есть, я не понимаю что там происходит при сборке (что и от чего зависит), и это мне не нравится. Хочется во всем разобраться. Надеялся на то, что тут у кого нибудь имеется совсем простенький пример makefile и ld скрипта для lpc13xx. Если в makefile'ах я еще что-то понимаю, то с ld я не сталкивался. И нужен ли он, ld-скрипт, вообще, может он в CMSIS'е есть? можете продолжить самообучение на базе ну хоть этой статьи Там не про cortex'ы, я так понял что cortex'ы довольно сильно отличаются от arm7tdmi. Да и к тому же там все как то объясняется через одно место, типа: для работы процессора нужна низкоуровневая инициализация low_level_init(), вот она. В ней эта строка обозначает то, а та строка обозначает это. то же самое и для ld-скриптов. Меня больше интересует, где это взять для конкретного процессора, в частности моего, а уж дальше я надеюсь разберусь там, где да что. Если есть еще какие мануалы, я буду рад. P.S. Обзавелся еще платкой с stm32f103cbt6, может с этим чипом у меня заладится. Хотя, как я думал, между кортексами окромя переферии разницы нет. Оказывается не так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adventurer 0 28 марта, 2011 Опубликовано 28 марта, 2011 · Жалоба Как я уже говорил имеется стойкая неприязнь ко всем навязываемым IDE Это конечно дело вкуса и удобности, но вот интересно дебаг вы тоже будете с помощью консоли ? Насколько я понимаю Вы только начинаете работать с этой платой. Так почему же для начала не использовать готовые сеймплы от производителя ? Меня больше интересует, где это взять для конкретного процессора, в частности моего, а уж дальше я надеюсь разберусь там, где да что. Если есть еще какие мануалы, я буду рад. К плате LPCExpresso на сайте NXP имеется код, который поможет Вам запустить и попробовать, именно специфические для процессора вещи, инициализацию периферии, клокинга, тем более, что Вы используете стандартную плату. Процедура же компиляции в gcc и использования мейкфайлов ИМХО не очень отличаются между разными процессорами, тем более подобной архитектуры будь то Cortex или ARM7TDMI. В инете можно найти масу примеров майкфайлов, как сложной так и более понятной структуры. Отличия в основном будут в файле линкера, разметка секций памяти. Но я думаю что можно найти lds файл для Вашего проца и разобраться. Кстати, тоже жду на LPCExpresso от NXP и тоже привык работать с makefile + gcc, правда на мой взгляд гораздо удобнее тогда использовать связку gcc + makefile +Eclipse и нормальной редактор и дебагер можно подцепить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vitmeat 0 28 марта, 2011 Опубликовано 28 марта, 2011 · Жалоба Да, я попробовал пользоваться этим code red. Спасибо, больше желания нет. Говорю, среду я выберу. Благо хватает альтернатив, это и code::blocks, и codelite. Наверняка еще разных IDE можно найти тот же ваш любимый eclipse (на котором code red и построена). Мне сейчас важно откомпилить какой нибудь хеллоу ворд, а уж потом озаботится средой, и перейти на любую другую среду поддерживающую gcc и makefile не составит труда. Я просто надеялся, что может кто уже работает с этим процом, и поделится хелло вордом для него, что ускорит изучение. Но видимо не судьба. Буду сам рыть интернет и по чуть чуть все изучать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ivan1180 0 28 марта, 2011 Опубликовано 28 марта, 2011 (изменено) · Жалоба Да, родной jtag я уже отпилил. Имеется в наличии какой то клон j-link'а, вот его и прикручу. Но для начала надо хоть что нибудь скомпилировать. Как я уже говорил имеется стойкая неприязнь ко всем навязываемым IDE. А что в том примере навязано? Там есть makefile based project, соответственно его упрощением можно хоть получить "hello worrd", даже приведены gdb скрипты. Проект никак не привязан к среде разработки, я с ним работал и в Eclipse и в CodeLite. Более на сайте все подробно разобрано, отдают полные исходники : проект, скрипт линкера, скрипт GDB, пояснения к makefile. У меня проект поехал сразу и с первого раза, тем более что периферия совпадает с предыдущей линейкой от NXP. Если есть желание - я завтра могу свой демонстрационный проект посмотреть и отдать. Изменено 28 марта, 2011 пользователем Arischenko Ivan Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krom 0 13 мая, 2011 Опубликовано 13 мая, 2011 · Жалоба Рабочий Makefile для сборки библиотеки CMSYS для LPC1768. Правда, для работы в линуксе. ######################################################################## # Makefile to create FirmWare Library for LPC17xx ######################################################################## TCHAIN = arm-elf TCHAIN_VER = 4.6.1 TCHAIN_ROOT = /usr/local MCU = cortex-m3 OPT = 0 CMCORE = CM3 DEVICE = LPC17xx DEBUG = dwarf-2 CSTANDARD = -std=gnu99 TARGET = lib$(DEVICE) PROJECT = DEV_LPC17xx PROJ_ROOT = ~/MPrjs/CortexM3/$(PROJECT) EXTRAINCDIRS = ######################################################################## # (FWLIB) SOURCE AND HOCEADERS LOCATIONS ######################################################################## FWLIB_ROOT =~/MPrjs/CortexM3/LPC1700CMSIS FWLIB_SRC_DIR =$(FWLIB_ROOT)/Drivers/source FWLIB_INC_DIR =$(FWLIB_ROOT)/Drivers/include ######################################################################## # (CMCORE) SOURCE AND HEADERS LOCATIONS ######################################################################## CMCORE_DIR =$(FWLIB_ROOT)/Core/$(CMCORE)/CoreSupport DEVICE_DIR =$(FWLIB_ROOT)/Core/$(CMCORE)/DeviceSupport/NXP/$(DEVICE) ######################################################################## # C-Sources ######################################################################## SRC = $(PROJ_ROOT)/lpc17xx_libcfg.c SRC += $(FWLIB_SRC_DIR)/lpc17xx_gpio.c SRC += $(FWLIB_SRC_DIR)/lpc17xx_adc.c #SRC += $(FWLIB_SRC_DIR)/lpc17xx_gpio.c SRC += $(FWLIB_SRC_DIR)/lpc17xx_nvic.c SRC += $(FWLIB_SRC_DIR)/lpc17xx_pinsel.c SRC += $(FWLIB_SRC_DIR)/lpc17xx_spi.c SRC += $(FWLIB_SRC_DIR)/lpc17xx_timer.c SRC += $(FWLIB_SRC_DIR)/lpc17xx_uart.c SRC += $(FWLIB_SRC_DIR)/lpc17xx_clkpwr.c SRC += $(FWLIB_SRC_DIR)/lpc17xx_rtc.c SRC += $(FWLIB_SRC_DIR)/lpc17xx_ssp.c SRC += $(FWLIB_SRC_DIR)/lpc17xx_systick.c ######################################################################## # Assembler-Sources ######################################################################## ASRC = #CDEFS = CDEFS = -D__BUILD_WITH_EXAMPLE__ CFLAGS = $(CDEFS) CFLAGS += -mthumb CFLAGS += -Wall CFLAGS += -O$(OPT) CFLAGS += -mapcs-frame CFLAGS += -D__thumb2__=1 CFLAGS += -msoft-float CFLAGS += -mfpu=vfp CFLAGS += -mfloat-abi=soft CFLAGS += -mno-sched-prolog CFLAGS += -fno-hosted #CFLAGS += -mtune=cortex-m3 #CFLAGS += -march=armv7-m #CFLAGS += -mfix-cortex-m3-ldrd CFLAGS += -ffunction-sections CFLAGS += -fdata-sections CFLAGS += -g$(DEBUG) CFLAGS += $(CSTANDARD) #CFLAGS += -Wstrict-prototypes #CFLAGS += -Wundef #CFLAGS += -Wa,-adhlns=$(<:%.c=%.lst) #CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) CFLAGS += -D__BUILD_WITH_EXAMPLE__=1 CFLAGS += -I $(FWLIB_INC_DIR) -I $(CMCORE_DIR) -I $(DEVICE_DIR) ASFLAGS = -Wa,-adhlns=$(<:%.S=%.lst),-g$(DEBUG) ASFLAGS += -mthumb -Dgcc -DBUILD_ALL AFLAGS += -I $(FWLIB_INC_DIR) -I $(CMCORE_INC_DIR) CC = $(TCHAIN_ROOT)/bin/$(TCHAIN)-gcc AS = $(TCHAIN_ROOT)/bin/$(TCHAIN)-as AR = $(TCHAIN_ROOT)/bin/$(TCHAIN)-ar LD = $(TCHAIN_ROOT)/bin/$(TCHAIN)-gcc NM = $(TCHAIN_ROOT)/bin/$(TCHAIN)-nm OBJDUMP = $(TCHAIN_ROOT)/bin/$(TCHAIN)-objdump OBJCOPY = $(TCHAIN_ROOT)/bin/$(TCHAIN)-objcopy READELF = $(TCHAIN_ROOT)/bin/$(TCHAIN)-readelf RANLIB = $(TCHAIN_ROOT)/bin/$(TCHAIN)-ranlib SIZE = $(TCHAIN_ROOT)/bin/$(TCHAIN)-size SHELL = /bin/sh REMOVE = /bin/rm -f REMOVEDIR = /bin/rm -rf # Define all object files. OBJ = $(SRC:%.c=%.o) $(ASRC:%.S=%.o) # Define all listing files. LST = $(SRC:%.c=%.lst) $(ASRC:%.S=%.lst) # Combine all necessary flags and optional flags. # Add target processor to flags. ALL_CFLAGS = -mcpu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) ALL_ASFLAGS = -mcpu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) # target for make all -> just create go to target lib all: lib %.o : %.c $(CC) -c $(ALL_CFLAGS) $< -o $@ %.o : %.S $(CC) -c $(ALL_ASFLAGS) $< -o $@ lib: $(OBJ) $(AR) -crs $(TARGET).a $(OBJ) # Target: clean project. clean : $(REMOVE) $(SRC:.c=.s) $(REMOVE) $(SRC:.c=.d) $(REMOVE) $(OBJ) $(REMOVE) $(LST) $(REMOVE) $(TARGET).a $(REMOVEDIR) .dep # Create object files directory # $(shell mkdir $(OBJDIR) 2>/dev/null) # Include the dependency files. -include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) # Listing of phony targets. .PHONY : all build clean lib Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vitmeat 0 13 мая, 2011 Опубликовано 13 мая, 2011 (изменено) · Жалоба Ага спасибо =) Программа минимум для меня выполнена ( моргание светодиодом ) Благодаря интернетам собрал солянку -> /* link.ld - GNU ld script */ SEARCH_DIR(.); ENTRY(reset); /* точка входа программы */ OUTPUT_ARCH(arm); OUTPUT_FORMAT("elf32-littlearm","elf32-bigarm","elf32-littlearm"); /* */ MEMORY /* Начальные адреса и размеры оперативной и флешь памяти */ { flash (rx) : ORIGIN = 0x0, LENGTH = 0x8000 /* размер флешь LENGTH = 32K */ ram (rwx) : ORIGIN = 0x10000000, LENGTH = 0x2000 /* размер опреативной памяти LENGTH = 8K */ } SECTIONS /* куда какую информацию размещать */ { /*. = flash; */ .text : /* размещение самой программы (исполняемый код) */ { /*. = ALIGN(4) */ /* оператор точка определяет текущий адрес, оператор ALIGN(4) – предписываем компоновщику выравнивать адреса по 4 байта */ KEEP(*(.vector_table)) /* таблица векторов прерывания в начале флешь памяти, KEEP */ *(.text*) /* исполняемый код */ *(.rodata*) /* константы */ } > flash /* размещаем во флешь*/ _etext = .; /* */ /*. = ram; */ .data : /* размещение ненулевых данных */ { _data = .; /* */ *(.data*) /* */ _edata = .; /* */ } > ram AT>flash /* */ .bss : /* */ { _bss = .; /* */ *(.bss*) /* */ _ebss = .; /* */ } > ram /* */ /*_ram_top = ram;*/ /*_stack_top = _ram_top;*/ _stack_size = 200; /* */ _stack_top = 0x10000000 + 0x2000; /* */ _stack_begin = _stack_top - _stack_size;/* */ . = _stack_begin; /* */ ._stack : /* */ { . = . + _stack_size; /* */ } > ram /* */ } /* startup.c */ void reset(void); extern void main(void); extern unsigned long _stack_top; __attribute__ ((section(".vector_table"))) void (* const vectors[128])(void) = { (void *) &_stack_top, reset }; void reset(void) { /* copy the .data section from flash to RAM */ /* zero the .bss section */ main(); while(1); } #========================================================== # File: Makefile for Cortex-M3 # Date: 2011-01-02 #========================================================== OPTIMIZATION = s #---------------------------------------------------------- SRC_C = startup.c SRC_C += lpc1343_hello.c #---------------------------------------------------------- #CROSS_PATH = C:/gcc/arm/Sourcery/ CROSS_PATH = C:/gcc/arm/yagarto/ #CROSS_PATH = C:/gcc/arm/kgp-arm-eabi_x86-64/ LD_SCRIPT = link.ld TOOLCHAIN = arm-none #TOOLCHAIN = arm-kgp #CROSS = $(CROSS_PATH)/bin/arm-none-eabi- CROSS = $(CROSS_PATH)/bin/$(TOOLCHAIN)-eabi- INCLUDES += -I$(CROSS_PATH)/$(TOOLCHAIN)-eabi/include INCLUDES += -I$(CROSS_PATH)/$(TOOLCHAIN)-eabi/include/lib #---------------------------------------------------------- FLAGS_C = $(INCLUDES) -I. FLAGS_C += -O$(OPTIMIZATION) FLAGS_C += -Wall FLAGS_C += -c FLAGS_C += -fmessage-length=0 FLAGS_C += -fno-builtin FLAGS_C += -ffunction-sections FLAGS_C += -fdata-sections FLAGS_C += -msoft-float FLAGS_C += -mapcs-frame FLAGS_C += -D__thumb2__=1 FLAGS_C += -mno-sched-prolog FLAGS_C += -fno-hosted FLAGS_C += -mtune=cortex-m3 FLAGS_C += -mcpu=cortex-m3 FLAGS_C += -mthumb FLAGS_C += -mfix-cortex-m3-ldrd FLAGS_LD = -Xlinker FLAGS_LD += --gc-sections FLAGS_LD += -mcpu=cortex-m3 FLAGS_LD += -mthumb FLAGS_LD += -static FLAGS_LD += -nostdlib #---------------------------------------------------------- all: clean target.elf %.elf: $(SRC_C:%.c=target/%.o) @echo Linking: $@ @$(CROSS)gcc $(FLAGS_LD) -T'$(LD_SCRIPT)' -o 'target/$@' $^ $(LD_LIB) @echo '-----------------------------------------------------------' @$(CROSS)size 'target/target.elf' @$(CROSS)objcopy -O binary 'target/target.elf' 'target/target.bin' @$(CROSS)objcopy -O ihex 'target/target.elf' 'target/target.hex' @$(CROSS)objdump -h -S -z 'target/target.elf' > 'target/target.lss' @$(CROSS)nm -n 'target/target.elf' > 'target/target.sym' @rm -f target/*.o $(SRC_C:%.c=target/%.o): target/%.o: %.c @echo Compiling: $< @$(CROSS)gcc $(FLAGS_C) -c $< -o $@ clean: @echo '-----------------------------------------------------------' @rm -f target/*.* .PHONY : all clean ну и собственно сам код, без CMSIS, еще не вкурил как ей пользоваться. /* lpc1343_hello.c */ #define LED_BIT 7 #define DELAY 35E+4 #define GPIO0DIR 0x50008000 #define GPIO0DATA 0x50000000 #define LED_MASK (GPIO0DATA + (1 << (LED_BIT+2))) #define LED_SET_DATA (1 << (LED_BIT+2)) #define LED_CLR_DATA ~(1 << (LED_BIT+2)) void delay(int n) { int i; for(i=0; i < n; i++) {__asm("nop");} } int main() { int *p = (int *)GPIO0DIR; // port 0 // GPIO 0 data direction register // set pin0_7 as output *p |= (1 << LED_BIT); //int *led = (int *)(GPIO0DATA + (1 << (LED_BIT+2))); // port 0 bit 7 int *led = (int *)LED_MASK; while (1) { // *led = 0xFFFFFFFF;//~0; *led = LED_CLR_DATA; delay(500000); //*led = 0; *led = LED_SET_DATA; delay(500000); } return 0; } да и сейчас другой проект на linux embeded поэтому раскуриваю маны по линуксу Изменено 14 мая, 2011 пользователем IgorKossak [codebox] !!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться