|
|
  |
lpc13xx + gcc |
|
|
|
Mar 22 2011, 16:07
|
Группа: Участник
Сообщений: 13
Регистрация: 22-01-11
Пользователь №: 62 402

|
В общем имеется у меня платка 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 от туда не получается выдрать.
|
|
|
|
|
Mar 22 2011, 21:59
|
Группа: Участник
Сообщений: 13
Регистрация: 22-01-11
Пользователь №: 62 402

|
Да, смотрел, спасибо. Копал довольно долго, но там в основном если и есть какие примеры, то для их среды на code red, или для keil'овского uVision'а, то есть всякие IDE. А makefile'ы в Example Projects созданы средой и имеют соответствующее предупреждение Код ################################################################################ # Automatically-generated file. Do not edit! ################################################################################ И вообще высылаю сайту NXP лучики паноса, ибо гуглом не гуглится, а ихними поисками находятся постоянно 100500 страниц одного и того же, как бы ты не уточнял запрос.
|
|
|
|
|
Mar 23 2011, 08:43
|

Шаман
     
Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221

|
Цитата(vitmeat @ Mar 22 2011, 23:59)  Копал довольно долго, но там в основном если и есть какие примеры, то для их среды на code red, или для keil'овского uVision'а, то есть всякие IDE. А makefile'ы в Example Projects созданы средой и имеют соответствующее предупреждение Код ################################################################################ # Automatically-generated file. Do not edit! ################################################################################ Эти предупреждения касаются тех, кто пользуется средами. Если Вы пользоваться не собираетесь, то можете смело вымарать комментарии и пользоваться на первых порах имеющимися мейкфайлами и скриптами, которые и в африке останутся мейкфайлами и скриптами. Когда немного разберётесь можете продолжить самообучение на базе ну хоть этой статьи, а также имеющейся в интернете документации по линкеру и утилите make.
|
|
|
|
|
Mar 27 2011, 18:43
|
Группа: Участник
Сообщений: 13
Регистрация: 22-01-11
Пользователь №: 62 402

|
Да, родной jtag я уже отпилил. Имеется в наличии какой то клон j-link'а, вот его и прикручу. Но для начала надо хоть что нибудь скомпилировать. Как я уже говорил имеется стойкая неприязнь ко всем навязываемым IDE. Цитата Вам сюда = LPC1343 Code Base Тут весьма сложно для начала. То есть, я не понимаю что там происходит при сборке (что и от чего зависит), и это мне не нравится. Хочется во всем разобраться. Надеялся на то, что тут у кого нибудь имеется совсем простенький пример makefile и ld скрипта для lpc13xx. Если в makefile'ах я еще что-то понимаю, то с ld я не сталкивался. И нужен ли он, ld-скрипт, вообще, может он в CMSIS'е есть? Цитата можете продолжить самообучение на базе ну хоть этой статьи Там не про cortex'ы, я так понял что cortex'ы довольно сильно отличаются от arm7tdmi. Да и к тому же там все как то объясняется через одно место, типа: для работы процессора нужна низкоуровневая инициализация low_level_init(), вот она. В ней эта строка обозначает то, а та строка обозначает это. то же самое и для ld-скриптов. Меня больше интересует, где это взять для конкретного процессора, в частности моего, а уж дальше я надеюсь разберусь там, где да что. Если есть еще какие мануалы, я буду рад. P.S. Обзавелся еще платкой с stm32f103cbt6, может с этим чипом у меня заладится. Хотя, как я думал, между кортексами окромя переферии разницы нет. Оказывается не так?
|
|
|
|
|
Mar 28 2011, 06:42
|
Участник

Группа: Участник
Сообщений: 25
Регистрация: 14-12-08
Пользователь №: 42 458

|
Цитата Как я уже говорил имеется стойкая неприязнь ко всем навязываемым IDE Это конечно дело вкуса и удобности, но вот интересно дебаг вы тоже будете с помощью консоли ? Насколько я понимаю Вы только начинаете работать с этой платой. Так почему же для начала не использовать готовые сеймплы от производителя ? Цитата Меня больше интересует, где это взять для конкретного процессора, в частности моего, а уж дальше я надеюсь разберусь там, где да что. Если есть еще какие мануалы, я буду рад. К плате LPCExpresso на сайте NXP имеется код, который поможет Вам запустить и попробовать, именно специфические для процессора вещи, инициализацию периферии, клокинга, тем более, что Вы используете стандартную плату. Процедура же компиляции в gcc и использования мейкфайлов ИМХО не очень отличаются между разными процессорами, тем более подобной архитектуры будь то Cortex или ARM7TDMI. В инете можно найти масу примеров майкфайлов, как сложной так и более понятной структуры. Отличия в основном будут в файле линкера, разметка секций памяти. Но я думаю что можно найти lds файл для Вашего проца и разобраться. Кстати, тоже жду на LPCExpresso от NXP и тоже привык работать с makefile + gcc, правда на мой взгляд гораздо удобнее тогда использовать связку gcc + makefile +Eclipse и нормальной редактор и дебагер можно подцепить.
|
|
|
|
|
Mar 28 2011, 16:16
|
Группа: Участник
Сообщений: 13
Регистрация: 22-01-11
Пользователь №: 62 402

|
Да, я попробовал пользоваться этим code red. Спасибо, больше желания нет. Говорю, среду я выберу. Благо хватает альтернатив, это и code::blocks, и codelite. Наверняка еще разных IDE можно найти тот же ваш любимый eclipse (на котором code red и построена). Мне сейчас важно откомпилить какой нибудь хеллоу ворд, а уж потом озаботится средой, и перейти на любую другую среду поддерживающую gcc и makefile не составит труда. Я просто надеялся, что может кто уже работает с этим процом, и поделится хелло вордом для него, что ускорит изучение. Но видимо не судьба. Буду сам рыть интернет и по чуть чуть все изучать.
|
|
|
|
|
Mar 28 2011, 16:19
|
Частый гость
 
Группа: Участник
Сообщений: 112
Регистрация: 29-10-06
Пользователь №: 21 768

|
Цитата(vitmeat @ Mar 27 2011, 21:43)  Да, родной jtag я уже отпилил. Имеется в наличии какой то клон j-link'а, вот его и прикручу. Но для начала надо хоть что нибудь скомпилировать. Как я уже говорил имеется стойкая неприязнь ко всем навязываемым IDE. А что в том примере навязано? Там есть makefile based project, соответственно его упрощением можно хоть получить "hello worrd", даже приведены gdb скрипты. Проект никак не привязан к среде разработки, я с ним работал и в Eclipse и в CodeLite. Более на сайте все подробно разобрано, отдают полные исходники : проект, скрипт линкера, скрипт GDB, пояснения к makefile. У меня проект поехал сразу и с первого раза, тем более что периферия совпадает с предыдущей линейкой от NXP. Если есть желание - я завтра могу свой демонстрационный проект посмотреть и отдать.
Сообщение отредактировал Arischenko Ivan - Mar 28 2011, 16:21
|
|
|
|
|
May 13 2011, 10:21
|
Группа: Участник
Сообщений: 13
Регистрация: 22-01-11
Пользователь №: 62 402

|
Ага спасибо =) Программа минимум для меня выполнена ( моргание светодиодом ) Благодаря интернетам собрал солянку -> CODE /* 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 /* */ } CODE /* 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); } CODE #========================================================== # 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, еще не вкурил как ей пользоваться. CODE /* 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 поэтому раскуриваю маны по линуксу
Сообщение отредактировал IgorKossak - May 14 2011, 18:45
Причина редактирования: [codebox] !!!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|