Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Программная инженерия > Микроконтроллеры, робототехника, схемотехника, 3D принтеры
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2017, 17:43   #1
Aoizora
Заблокирован
 
Регистрация: 11.11.2016
Сообщений: 261
По умолчанию GNU ARM автоматический поиск .c файлов библиотеки

Свою проблему попробую описать мейкфайлом и исходным кодом:

Код:
# Processor type
PTYPE = STM32F10X_MD_VL

# Tool path
TOOLROOT=/usr/bin

# Library path
LIBROOT=/usr/stm32

# Tools
CC=$(TOOLROOT)/arm-none-eabi-gcc
LD=$(TOOLROOT)/arm-none-eabi-ld
AR=$(TOOLROOT)/arm-none-eabi-ar
AS=$(TOOLROOT)/arm-none-eabi-as

# Code paths
DEVICE=$(LIBROOT)/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x
CORE=$(LIBROOT)/Libraries/CMSIS/CM3/CoreSupport
PERIPH=$(LIBROOT)/Libraries/STM32F10x_StdPeriph_Driver
TEMPLATE=$(LIBROOT)/Libraries/STM32F10x_StdPeriph_Template

# Compilation flags
CFLAGS+= -mcpu=cortex-m3 -mthumb
CFLAGS+= -I$(DEVICE) -I$(CORE) -I$(PERIPH)/inc -I$(PERIPH)/src
CFLAGS+= -I$(TEMPLATE)
#CFLAGS+= -D"assert_param(expr)=((void)0)"
#CFLAGS+= -D$(PTYPE)

# Startup code
STARTUP = startup.o

# Object files
OBJS= $(STARTUP) main.o
#OBJS+= stm32f10x_gpio.o stm32f10x_rcc.o 

all: main

main: startup.o main.o
	$(LD) -T mem.ld $(OBJS) -o main.elf
	arm-none-eabi-objcopy main.elf main.bin -O binary

boot.o: boot.S
	$(AS) boot.S -o boot.o

startup.o: startup.c
	$(CC) -c $(CFLAGS) startup.c

main.o: main.c
	$(CC) -c $(CFLAGS) main.c

install: main.bin
	st-flash erase
	st-flash write main.bin 0x08000000
clean:
	rm -rf *.o main.elf main.bin
Код:
#define STM32F10X_MD_VL
#define USE_FULL_ASSERT
//#define assert_param(expr) ((void)0)

#include <stm32f10x_conf.h>
//#include <stm32f10x.h>
//#include <stm32f10x_rcc.h>
//#include <stm32f10x_gpio.h>
#include <stm32f10x_rcc.c>
#include <stm32f10x_gpio.c>

void Delay(uint32_t nTime);

int main(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;

	// Enable peripheral clocks
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

	// Configure pins
	GPIO_StructInit(&GPIO_InitStructure);
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Mode =  GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_Init(GPIOC, &GPIO_InitStructure);

	//Configure SysTick timer
	if (SysTick_Config(SystemCoreClock / 1000))
		while (1);

	while (1)
	{
		static int ledval = 0;

		GPIO_WriteBit(GPIOC, GPIO_Pin_0,  ledval ? Bit_SET : 
Bit_RESET);
		ledval = 1 - ledval;

		Delay(250);
	}
}

static __IO uint32_t TimingDelay;

void Delay(uint32_t nTime)
{
	TimingDelay = nTime;
	while (TimingDelay != 0);
}

void SysTick_Handler(void)
{
	if (TimingDelay != 0x00)
		--TimingDelay;
}

#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{
	while (1);
}
#endif
Как видно, код библиотеки у меня располагается в /usr/stm32, а IDE я презираю. Возникла проблема с компиляцией функций библиотеки, потому что я не знаю, как заставить компилятор автоматически искать .c-файлы, соответствующие хедерам, и подхватывать их на лету. Я поступил мерзко и заинклудил их в main.c как хедер.

Можно ли обойтись без #include .c-файлов? Какие изменения для этого сделать в мейкфайле и исходнике?
Aoizora вне форума Ответить с цитированием
Старый 28.07.2017, 17:49   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А IDE причем тут?

Непонятно что мешает добавить их в Makefile.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 28.07.2017, 20:11   #3
Aoizora
Заблокирован
 
Регистрация: 11.11.2016
Сообщений: 261
По умолчанию

Изменил мейлфайл таким образом:

Код:
# Processor type
PTYPE = STM32F10X_MD_VL

# Tool path
TOOLROOT=/usr/bin

# Library path
LIBROOT=/usr/stm32

# Tools
CC=$(TOOLROOT)/arm-none-eabi-gcc
LD=$(TOOLROOT)/arm-none-eabi-ld
AR=$(TOOLROOT)/arm-none-eabi-ar
AS=$(TOOLROOT)/arm-none-eabi-as

# Code paths
DEVICE=$(LIBROOT)/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x
CORE=$(LIBROOT)/Libraries/CMSIS/CM3/CoreSupport
PERIPH=$(LIBROOT)/Libraries/STM32F10x_StdPeriph_Driver
TEMPLATE=$(LIBROOT)/Libraries/STM32F10x_StdPeriph_Template

# Compilation flags
CFLAGS+= -mcpu=cortex-m3 -mthumb
CFLAGS+= -I$(DEVICE) -I$(CORE) -I$(PERIPH)/inc -I$(PERIPH)/src
CFLAGS+= -I$(TEMPLATE)
#CFLAGS+= -D"assert_param(expr)=((void)0)"
#CFLAGS+= -D$(PTYPE)

# Startup code
STARTUP = startup.o

# Object files
OBJS= $(STARTUP) main.o
OBJS+= stm32f10x_gpio.o stm32f10x_rcc.o

all: main

main: $(OBJS)
	$(LD) -T mem.ld $(OBJS) -o main.elf
	arm-none-eabi-objcopy main.elf main.bin -O binary

boot.o: boot.S
	$(AS) boot.S -o boot.o

startup.o: startup.c
	$(CC) -c $(CFLAGS) startup.c

main.o: main.c
	$(CC) -c $(CFLAGS) main.c

stm32f10x_rcc.o: $(PERIPH)/src/stm32f10x_rcc.c
	$(CC) -c $(CFLAGS) stm32f10x_rcc.c

stm32f10x_gpio.o: $(PERIPH)/src/stm32f10x_gpio.c
	$(CC) -c $(CFLAGS) stm32f10x_gpio.c

install: main.bin
	st-flash erase
	st-flash write main.bin 0x08000000
clean:
	rm -rf *.o main.elf main.bin
Изменения выделил. Теперь при сборке получаю ошибку:

Цитата:
/usr/bin/arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -I/usr/stm32/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x -I/usr/stm32/Libraries/CMSIS/CM3/CoreSupport -I/usr/stm32/Libraries/STM32F10x_StdPeriph_Driver/inc -I/usr/stm32/Libraries/STM32F10x_StdPeriph_Driver/src -I/usr/stm32/Libraries/STM32F10x_StdPeriph_Template stm32f10x_gpio.c
arm-none-eabi-gcc: error: stm32f10x_gpio.c: No such file or directory
arm-none-eabi-gcc: fatal error: no input files
compilation terminated.
Как исправить?
Aoizora вне форума Ответить с цитированием
Старый 28.07.2017, 20:13   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Прописать правильный путь к файлу
p51x на форуме Ответить с цитированием
Старый 01.08.2017, 04:34   #5
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Бг, а я, когда "презираю IDE" пишу баш скрипты (или перл, если нада и другие ОС), которые тупо вызывают компилер в нужном порядке. Плюсов море - билд скрипт получается процедурным, а не декларативным. Кросс-компиляция делается сменой 1 строчки компилера. Можно в 1-2 строчки тащить с инета либы и т.д.

...но это так, лирика.

Вот, кстати, красота - запустил скрипт - и готов проект под iOS на линукс, совсем думать и вспоминать не нада, через год:

https://github.com/alexzk1/ios_linux

Последний раз редактировалось alexzk; 01.08.2017 в 04:40.
alexzk вне форума Ответить с цитированием
Старый 01.08.2017, 07:29   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
Плюсов море - билд скрипт получается процедурным, а не декларативным.
так это ж минус.
Цитата:
Сообщение от alexzk Посмотреть сообщение
Кросс-компиляция делается сменой 1 строчки компилера.
А в Makefile не так что ли?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с периферией ARM F100RBT6B без библиотеки CMSIS Aoizora Микроконтроллеры, робототехника, схемотехника, 3D принтеры 4 18.07.2017 22:47
Автоматический поиск и заполнение таблицы Vladya Microsoft Office Excel 8 11.11.2013 12:11
Автоматический поиск и внедрение DLL в процесс nickolasjons C# (си шарп) 2 11.01.2013 11:25
Автоматический поиск значений в таблице Freesty1er Microsoft Office Excel 11 31.10.2011 22:44
автоматический импорт txt файлов в exel andreton Microsoft Office Excel 5 01.06.2010 01:29