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

 
 
> 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
 
Start new topic
Ответов
vitmeat
сообщение May 13 2011, 10:21
Сообщение #2





Группа: Участник
Сообщений: 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 Текстовая версия Сейчас: 28th July 2025 - 21:32
Рейтинг@Mail.ru


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