реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> lpc13xx + gcc
vitmeat
сообщение Mar 22 2011, 16:07
Сообщение #1





Группа: Участник
Сообщений: 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 от туда не получается выдрать.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Mar 22 2011, 21:30
Сообщение #2


Шаман
******

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



Здесь смотрели?
А здесь?
Go to the top of the page
 
+Quote Post
vitmeat
сообщение Mar 22 2011, 21:59
Сообщение #3





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



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


И вообще высылаю сайту NXP лучики паноса, ибо гуглом не гуглится, а ихними поисками находятся постоянно 100500 страниц одного и того же, как бы ты не уточнял запрос.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Mar 23 2011, 08:43
Сообщение #4


Шаман
******

Группа: Модераторы
Сообщений: 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.
Go to the top of the page
 
+Quote Post
Arischenko Ivan
сообщение Mar 25 2011, 05:01
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 112
Регистрация: 29-10-06
Пользователь №: 21 768



Вам сюда = LPC1343 Code Base

У меня тоже есть плата за 750р, я половину от нее (с чужим JTAG) отпили ножовкой по металлу wink.gif

Сообщение отредактировал Arischenko Ivan - Mar 25 2011, 05:02
Go to the top of the page
 
+Quote Post
vitmeat
сообщение Mar 27 2011, 18:43
Сообщение #6





Группа: Участник
Сообщений: 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, может с этим чипом у меня заладится. Хотя, как я думал, между кортексами окромя переферии разницы нет. Оказывается не так?
Go to the top of the page
 
+Quote Post
adventurer
сообщение Mar 28 2011, 06:42
Сообщение #7


Участник
*

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



Цитата
Как я уже говорил имеется стойкая неприязнь ко всем навязываемым IDE

Это конечно дело вкуса и удобности, но вот интересно дебаг вы тоже будете с помощью консоли ?
Насколько я понимаю Вы только начинаете работать с этой платой. Так почему же для начала не использовать готовые сеймплы от производителя ?
Цитата
Меня больше интересует, где это взять для конкретного процессора, в частности моего, а уж дальше я надеюсь разберусь там, где да что.
Если есть еще какие мануалы, я буду рад.


К плате LPCExpresso на сайте NXP имеется код, который поможет Вам запустить и попробовать, именно специфические для процессора вещи, инициализацию периферии, клокинга, тем более, что Вы используете стандартную плату.

Процедура же компиляции в gcc и использования мейкфайлов ИМХО не очень отличаются между разными процессорами, тем более подобной архитектуры будь то Cortex или ARM7TDMI. В инете можно найти масу примеров майкфайлов, как сложной так и более понятной структуры. Отличия в основном будут в файле линкера, разметка секций памяти. Но я думаю что можно найти lds файл для Вашего проца и разобраться.

Кстати, тоже жду на LPCExpresso от NXP и тоже привык работать с makefile + gcc, правда на мой взгляд гораздо удобнее тогда использовать связку gcc + makefile +Eclipse и нормальной редактор и дебагер можно подцепить.
Go to the top of the page
 
+Quote Post
vitmeat
сообщение Mar 28 2011, 16:16
Сообщение #8





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



Да, я попробовал пользоваться этим code red. Спасибо, больше желания нет.
Говорю, среду я выберу. Благо хватает альтернатив, это и code::blocks, и codelite. Наверняка еще разных IDE можно найти тот же ваш любимый eclipse (на котором code red и построена). Мне сейчас важно откомпилить какой нибудь хеллоу ворд, а уж потом озаботится средой, и перейти на любую другую среду поддерживающую gcc и makefile не составит труда.
Я просто надеялся, что может кто уже работает с этим процом, и поделится хелло вордом для него, что ускорит изучение.
Но видимо не судьба. Буду сам рыть интернет и по чуть чуть все изучать.
Go to the top of the page
 
+Quote Post
Arischenko Ivan
сообщение Mar 28 2011, 16:19
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Krom
сообщение May 13 2011, 10:07
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 27-06-05
Из: Россия
Пользователь №: 6 324



Рабочий 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
Go to the top of the page
 
+Quote Post
vitmeat
сообщение May 13 2011, 10:21
Сообщение #11





Группа: Участник
Сообщений: 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] !!!
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 00:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01491 секунд с 7
ELECTRONIX ©2004-2016