Форум программистов  
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 28.07.2017, 18:43   #1
Aoizora
Форумчанин
 
Аватар для Aoizora
 
Регистрация: 11.11.2016
Сообщений: 233
Репутация: 107
По умолчанию 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, 18:49   #2
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 14,624
Репутация: 2887

icq: 512-7шесть5
skype: alexp.frl
По умолчанию

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

Непонятно что мешает добавить их в Makefile.
Alex11223 вне форума   Ответить с цитированием
Старый 28.07.2017, 21:11   #3
Aoizora
Форумчанин
 
Аватар для Aoizora
 
Регистрация: 11.11.2016
Сообщений: 233
Репутация: 107
По умолчанию

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

Код:

# 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, 21:13   #4
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 10,146
Репутация: 1601

icq: 216409213
По умолчанию

Прописать правильный путь к файлу
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 01.08.2017, 05:34   #5
alexzk
Участник клуба
 
Регистрация: 12.04.2017
Сообщений: 598
Репутация: 145
По умолчанию

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

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

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

https://github.com/alexzk1/ios_linux

Последний раз редактировалось alexzk; 01.08.2017 в 05:40.
alexzk вне форума   Ответить с цитированием
Старый 01.08.2017, 08:29   #6
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 14,624
Репутация: 2887

icq: 512-7шесть5
skype: alexp.frl
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
Плюсов море - билд скрипт получается процедурным, а не декларативным.
так это ж минус.
Цитата:
Сообщение от alexzk Посмотреть сообщение
Кросс-компиляция делается сменой 1 строчки компилера.
А в Makefile не так что ли?
Alex11223 вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с периферией ARM F100RBT6B без библиотеки CMSIS Aoizora Микроконтроллеры, робототехника, схемотехника, 3D принтеры 4 18.07.2017 23: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




08:28.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru