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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> stm32f4discovery+scmRTOS4, Вопрос чайника: можно ли запустить?
Legath
сообщение May 11 2012, 11:04
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 30-12-10
Из: Рязань
Пользователь №: 61 958



Можно ли как то запустить версию порта от cortex-m3?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 11 2012, 11:09
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Можно, работает без каких-либо доработок.
Можете взять примеры для STM32F2XX (GCC), они вообще должны заработать сразу.

ЗЫ. Естественно, плавучку использовать можно только в одной задаче.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Legath
сообщение May 11 2012, 12:51
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 30-12-10
Из: Рязань
Пользователь №: 61 958



Цитата(AHTOXA @ May 11 2012, 15:09) *
Можно, работает без каких-либо доработок.
Можете взять примеры для STM32F2XX (GCC), они вообще должны заработать сразу.

ЗЫ. Естественно, плавучку использовать можно только в одной задаче.

А скрипт линковки какой взять? Из примеров платы или от ОС?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 11 2012, 13:59
Сообщение #4


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



От ОС конечно. Прямо целиком пример берите.
Ну или могу выложить мигалку светодиодами непосредственно для STM32F4DISCOVERY. Надо?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Legath
сообщение May 11 2012, 15:31
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 30-12-10
Из: Рязань
Пользователь №: 61 958



Цитата(AHTOXA @ May 11 2012, 17:59) *
От ОС конечно. Прямо целиком пример берите.
Ну или могу выложить мигалку светодиодами непосредственно для STM32F4DISCOVERY. Надо?

Благодарю, не надо. Это были уточняющие вопросы. Огромное Спасибо!
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 11 2012, 17:52
Сообщение #6


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Всегда пожалуйстаsm.gif
Забыл написать. Если захотите использовать плюшки M4F, и станете компилить для cortex-m4 (-mcpu=cortex-m4), то в OS_Target.h заругается на вот этой проверке:
Код
#ifndef __ARM_ARCH_7M__
#error "This file must be compiled for ARMv7-M (Cortex-M3) processor only."
#endif

Пока можно просто закомментировать её.
А потом, (я надеюсь, что скоро) появится нормальный порт для M4.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Legath
сообщение May 17 2012, 20:51
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 30-12-10
Из: Рязань
Пользователь №: 61 958



еще глупый вопрос: почему когда в скрипте линковки ставлю величину ram в 192к (сколько есть в контроллере) - сразу улетаю в дефолтный хендлер? я чего то не учитываю?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 18 2012, 03:58
Сообщение #8


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Видимо потому, что верхние 64К - это некая CCM (core coupled memory), которая не присоединена к bus matrix. То есть, любая попытка DMA-доступа к ней обречена на провал.
Кроме того, в RCC_AHB1ENR есть бит CCMDATARAMEN, возможно это означает, что надо включить тактирование этой CCM перед её использованием.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Legath
сообщение May 18 2012, 13:37
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 30-12-10
Из: Рязань
Пользователь №: 61 958



А там ошибки в sysinit нет? а то у меня возникла такая проблема?
http://electronix.ru/forum/index.php?showt...102811&st=0

В регистрах пока плохо разбираюсь
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 18 2012, 16:39
Сообщение #10


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



На STM32F4DISCOVERY кварц 8МГц, а в примерах (они для платы TE-STM32Fx07) - 25МГц. Это задаётся в makefile, строка
Код
    HSE_VALUE   = 25000000

, поменяйте на 8000000.
А в sysinit.cpp, чтобы заработало на 168МГц, надо задать:
Код
#define PLL_M      8
#define PLL_N      336

// SYSCLK = PLL_VCO / PLL_P
#define PLL_P      2

// USB OTG FS, SDIO and RNG Clock =  PLL_VCO / PLLQ
#define PLL_Q      7

Ну и включить high performance mode:
Код
static inline void init_clocks()
{
    RCC->CR |= RCC_CR_HSEON;
    while (!(RCC->CR & RCC_CR_HSERDY));

    // Enable high performance mode, System frequency up to 168 MHz
    RCC->APB1ENR |= RCC_APB1ENR_PWREN;
    PWR->CR |= PWR_CR_PMODE;
...


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Legath
сообщение May 18 2012, 18:26
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 30-12-10
Из: Рязань
Пользователь №: 61 958



Огромное спасибо за оперативную помощь по переходу!
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Nov 30 2012, 04:21
Сообщение #12


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(AHTOXA @ May 11 2012, 19:59) *
Ну или могу выложить мигалку светодиодами непосредственно для STM32F4DISCOVERY. Надо?

Меня тут в личке попросили всё же выложить пример. Выкладываю.
Прикрепленный файл  scmRTOS_stm32f4_sample.zip ( 137.74 килобайт ) Кол-во скачиваний: 325


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Pat
сообщение Nov 30 2012, 08:31
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 27-05-05
Из: Энергодар
Пользователь №: 5 480



Цитата(AHTOXA @ Nov 30 2012, 06:21) *
Меня тут в личке попросили всё же выложить пример. Выкладываю.
Прикрепленный файл  scmRTOS_stm32f4_sample.zip ( 137.74 килобайт ) Кол-во скачиваний: 325


Это я просил.
Спасибо огромное.
Думаю будет, Вам, общая благодарность, если найдете время допилить порт под F4.

Еще раз Спасибо.

Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Dec 2 2012, 12:09
Сообщение #14


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Pat @ Nov 30 2012, 14:31) *
Думаю будет, Вам, общая благодарность, если найдете время допилить порт под F4.

Могу вас порадовать, порт уже задышал. На днях постараюсь выложить в репозиторий.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
viktory_93
сообщение Jun 15 2014, 21:01
Сообщение #15





Группа: Участник
Сообщений: 5
Регистрация: 15-06-14
Пользователь №: 81 956



Цитата(AHTOXA @ Nov 30 2012, 08:21) *
Меня тут в личке попросили всё же выложить пример. Выкладываю.
Прикрепленный файл  scmRTOS_stm32f4_sample.zip ( 137.74 килобайт ) Кол-во скачиваний: 325

Добрый день. Впервые пытаюсь запустить проекты на scmRTOS, использую Eclipse + Sourcey G++ Lite, получаю следующее:
c:\!Botva\8semestr\kursach\scmRTOS_stm32f4_sample\HelloLed>make
--- building HelloLed. defines: -DSTM32F4XX -DVER_MAJOR=0 -DVER_MINOR=1 -DHSE_VALUE=8000000
Ошибка в синтаксисе команды.
Ошибка в синтаксисе команды.
Ошибка в синтаксисе команды.
Ошибка в синтаксисе команды.
--- compiling ./src/sysinit.cpp...
"LC_MESSAGES" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
make[1]: *** [obj/sysinit.o] Error 1
make: *** [all] Error 2
причем ошибки не подсвечиваются и никак не выделяются. Подскажите, что это может быть и как с этим бороться, пожалуйста
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 16 2014, 04:58
Сообщение #16


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



У Sourcery make называется cs-make. Исправьте в настройках проекта.
Кстати, в репозитории есть более свежие примеры.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
viktory_93
сообщение Jun 19 2014, 14:48
Сообщение #17





Группа: Участник
Сообщений: 5
Регистрация: 15-06-14
Пользователь №: 81 956




Получилось примерно следущее в CoIDE
GCC HOME: C:\Program Files (x86)\GNU Tools ARM Embedded\4.8 2014q1\bin
compile:
[mkdir] Created dir: C:\CooCox\CoIDE\workspace\start_this\start_this\Debug\bin
[mkdir] Created dir: C:\CooCox\CoIDE\workspace\start_this\start_this\Debug\obj
[cc] 200
[cc] 9 total files to be compiled.
[cc] arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -Wall -ffunction-sections -g -O0 -c -DSTM32F407VG -DSTM32F4XX -DSUPPORT_CPLUSPLUS -DUSE_STDPERIPH_DRIVER -D__ASSEMBLY__ -IC:\CooCox\CoIDE\workspace\start_this -IC:\CooCox\CoIDE\workspace\start_this\cmsis_boot -IC:\CooCox\CoIDE\workspace -IC:\CooCox\CoIDE C:\CooCox\CoIDE\workspace\start_this\OS_Kernel.cpp C:\CooCox\CoIDE\workspace\start_this\startup-stm32f4xx.c C:\CooCox\CoIDE\workspace\start_this\sys.c C:\CooCox\CoIDE\workspace\start_this\main.cpp C:\CooCox\CoIDE\workspace\start_this\OS_Target_asm.S C:\CooCox\CoIDE\workspace\start_this\OS_Services.cpp C:\CooCox\CoIDE\workspace\start_this\usrlib.cpp C:\CooCox\CoIDE\workspace\start_this\sysinit.cpp C:\CooCox\CoIDE\workspace\start_this\OS_Target_cpp.cpp
[cc] Starting link
[cc] arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -g -Wl,-Map=start_this.map -O0 -Wl,--gc-sections -LC:\CooCox\CoIDE\configuration\ProgramData\start_this -Wl,-TC:\CooCox\CoIDE\configuration\ProgramData\start_this/arm-gcc-link.ld -g -o start_this.elf ..\obj\OS_Kernel.o ..\obj\startup-stm32f4xx.o ..\obj\sys.o ..\obj\main.o ..\obj\OS_Target_asm.o ..\obj\OS_Services.o ..\obj\usrlib.o ..\obj\sysinit.o ..\obj\OS_Target_cpp.o -lm -lgcc -lc -lrdimon -lstdc++
[cc] ..\obj\sys.o: In function `__cxa_pure_virtual':
[cc] C:\CooCox\CoIDE\workspace\start_this/sys.c:15: multiple definition of `__dso_handle'
[cc] c:/program files (x86)/gnu tools arm embedded/4.8 2014q1/bin/../lib/gcc/arm-none-eabi/4.8.3/armv7e-m/crtbegin.o:(.data+0x0): first defined here
[cc] ..\obj\startup-stm32f4xx.o:(.isr_vector+0x0): undefined reference to `_estack'
[cc] ..\obj\startup-stm32f4xx.o: In function `__Init_Data':
[cc] C:\CooCox\CoIDE\workspace\start_this/startup-stm32f4xx.c:257: undefined reference to `__ctors_start__'
[cc] C:\CooCox\CoIDE\workspace\start_this/startup-stm32f4xx.c:257: undefined reference to `__ctors_end__'
[cc] ..\obj\main.o: In function `Pin<(char)68, 12, (char)72, (PinSpeed)3>::SetPullUp(PullUpMode)':
[cc] C:\CooCox\CoIDE\workspace\start_this/pin_stm32F4xx.h:471: undefined reference to `Pin<(char)68, 12, (char)72, (PinSpeed)3>::BBBits'
[cc] C:\CooCox\CoIDE\workspace\start_this/pin_stm32F4xx.h:471: undefined reference to `Pin<(char)68, 12, (char)72, (PinSpeed)3>::BBBits'
[cc] C:\CooCox\CoIDE\workspace\start_this/pin_stm32F4xx.h:471: undefined reference to `Pin<(char)68, 12, (char)72, (PinSpeed)3>::BBBits'
[cc] ..\obj\main.o: In function `Pin<(char)68, 13, (char)72, (PinSpeed)3>::SetPullUp(PullUpMode)':
[cc] C:\CooCox\CoIDE\workspace\start_this/pin_stm32F4xx.h:471: undefined reference to `Pin<(char)68, 12, (char)72, (PinSpeed)3>::BBBits'
[cc] C:\CooCox\CoIDE\workspace\start_this/pin_stm32F4xx.h:471: undefined reference to `Pin<(char)68, 13, (char)72, (PinSpeed)3>::BBBits'
[cc] C:\CooCox\CoIDE\workspace\start_this/pin_stm32F4xx.h:471: undefined reference to `Pin<(char)68, 13, (char)72, (PinSpeed)3>::BBBits'
[cc] C:\CooCox\CoIDE\workspace\start_this/pin_stm32F4xx.h:471: undefined reference to `Pin<(char)68, 13, (char)72, (PinSpeed)3>::BBBits'
[cc] ..\obj\main.o: In function `Pin<(char)68, 14, (char)72, (PinSpeed)3>::SetPullUp(PullUpMode)':
[cc] C:\CooCox\CoIDE\workspace\start_this/pin_stm32F4xx.h:471: undefined reference to `Pin<(char)68, 13, (char)72, (PinSpeed)3>::BBBits'
[cc] C:\CooCox\CoIDE\workspace\start_this/pin_stm32F4xx.h:471: undefined reference to `Pin<(char)68, 14, (char)72, (PinSpeed)3>::BBBits'
[cc] C:\CooCox\CoIDE\workspace\start_this/pin_stm32F4xx.h:471: undefined reference to `Pin<(char)68, 14, (char)72, (PinSpeed)3>::BBBits'
[cc] C:\CooCox\CoIDE\workspace\start_this/pin_stm32F4xx.h:471: undefined reference to `Pin<(char)68, 14, (char)72, (PinSpeed)3>::BBBits'
[cc] ..\obj\main.o: In function `Pin<(char)68, 15, (char)72, (PinSpeed)3>::SetPullUp(PullUpMode)':
[cc] C:\CooCox\CoIDE\workspace\start_this/pin_stm32F4xx.h:471: undefined reference to `Pin<(char)68, 14, (char)72, (PinSpeed)3>::BBBits'
[cc] C:\CooCox\CoIDE\workspace\start_this/pin_stm32F4xx.h:471: undefined reference to `Pin<(char)68, 15, (char)72, (PinSpeed)3>::BBBits'
[cc] C:\CooCox\CoIDE\workspace\start_this/pin_stm32F4xx.h:471: undefined reference to `Pin<(char)68, 15, (char)72, (PinSpeed)3>::BBBits'
[cc] C:\CooCox\CoIDE\workspace\start_this/pin_stm32F4xx.h:471: undefined reference to `Pin<(char)68, 15, (char)72, (PinSpeed)3>::BBBits'
[cc] ..\obj\main.o: In function `run':
[cc] C:\CooCox\CoIDE\workspace\start_this/OS_Kernel.h:646: undefined reference to `Pin<(char)68, 15, (char)72, (PinSpeed)3>::BBBits'
[cc] ..\obj\main.o: In function `OS::process<(OS::TPriority)2, 600u>::exec()':
[cc] C:\CooCox\CoIDE\workspace\start_this/main.cpp:67: undefined reference to `Pin<(char)68, 12, (char)72, (PinSpeed)3>::GPIOx'
[cc] C:\CooCox\CoIDE\workspace\start_this/main.cpp:67: undefined reference to `Pin<(char)68, 13, (char)72, (PinSpeed)3>::GPIOx'
[cc] C:\CooCox\CoIDE\workspace\start_this/main.cpp:67: undefined reference to `Pin<(char)68, 14, (char)72, (PinSpeed)3>::GPIOx'
[cc] C:\CooCox\CoIDE\workspace\start_this/main.cpp:67: undefined reference to `Pin<(char)68, 15, (char)72, (PinSpeed)3>::GPIOx
[cc] collect2.exe: error: ld returned 1 exit status
[cc] '

BUILD FAILED
Total time: 2 seconds
помогите исправить, пожалуйста

Сообщение отредактировал viktory_93 - Jun 19 2014, 14:49
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 19 2014, 18:01
Сообщение #18


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Я не знаком с CoIDE. Судя по всему, в проект кроме стартапа от примера включен стартап от CooCox. Вот они и дерутся.
Нужно настроить проект на линковку без использования какого-либо стартапа.
И скрипт линкера не тот.

Ну а вообще, чтобы минимально зависеть от используемой IDE, надо делать так (только что проделал это на голой Win XP в виртуалке):
  1. Качаем и ставим свежий gcc-arm-embedded.
    (не забываем поставить птичку "добавить путь в PATH" или что-то типа того)
  2. Качаем нужные части из msys (не знаю, зачем они нашинковали их на столько кусочков, но уж как есть.):
    Распаковываем их все в папку "C:\Program Files\GNU Tools ARM Embedded\4.8 2014q2\"
    То есть, make.exe, sh.exe и прочие утилиты должны попасть в папку "C:\Program Files\GNU Tools ARM Embedded\4.8 2014q2\bin"
  3. Качаем и ставим svn.
  4. Пуск - выполнить - cmd.
    Там пишем:
    Код
    C:
    cd C:\
    mkdir test
    cd test
    svn checkout http://svn.code.sf.net/p/scmrtos/code/trunk/Samples/CortexM4F/GCC/STM32F4XX STM32F4XX
    cd STM32F4XX
    switch.bat
    cd 1-EventFlag
    make

    (Я всё это делаю в файловом менеджере Far, там работать с командной строкой значительно удобнее)
  5. Убеждаемся в том, что компиляция проходит без ошибок.
  6. Теперь настраиваем любую интегрированную среду разработки на использование makefile. Всё.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
viktory_93
сообщение Jun 20 2014, 04:29
Сообщение #19





Группа: Участник
Сообщений: 5
Регистрация: 15-06-14
Пользователь №: 81 956



Ура! Билдится! Спасибо
Знать бы теперь как отладку запустить(
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jun 20 2014, 08:02
Сообщение #20


Шаман
******

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



Я бы не стал ставить утилиты пакета MSYS в несвойственное им место. Тулчейн может обновиться. Другие среды и тулчейны могут использовать эти утилиты в своих целях. Мало ли ещё какие причины могут быть?
Лучше проинсталлировать MSYS стандартным способом с сохранением пути к нему в переменной PATH. А вот путь к тулчейну я в переменной PATH не сохраняю, а указываю в Project->Properties->C/C++ Build->Environment в переменной PATH (у меня Eclipse Luna, но и в других аналогичных IDE есть похожее). Так удобнее и при экспериментах с разными тулчейнами и с переносимостью проекта лучше.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 20 2014, 08:34
Сообщение #21


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(IgorKossak @ Jun 20 2014, 11:02) *
а указываю в Project->Properties->C/C++ Build->Environment в переменной PATH
А у меня путь к самому свежему компилятору прописан в PATH (что позволяет его вызывать из командной строки без полного указания пути), но при необходимости можно в makefile добавить в начало PATH путь к любому другому (подсмотрел у ReAl):

Код
# add $(TOOLCHAIN)/bin to PATH
ifneq ($(strip $(TOOLCHAIN)),)
  ifeq (,$(findstring;,$(PATH)))
    PATH := $(subst :,,/$(TOOLCHAIN)/bin):$(PATH)
  else
    PATH := $(subst /,\,$(TOOLCHAIN)/bin);$(PATH)
  endif
  export PATH
endif


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 20 2014, 10:03
Сообщение #22


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(IgorKossak @ Jun 20 2014, 14:02) *
Я бы не стал ставить утилиты пакета MSYS в несвойственное им место. Тулчейн может обновиться. Другие среды и тулчейны могут использовать эти утилиты в своих целях. Мало ли ещё какие причины могут быть?

Да, конечно лучше в отдельную папку. Просто я описывал как покороче.
Цитата(IgorKossak @ Jun 20 2014, 14:02) *
Лучше проинсталлировать MSYS стандартным способом с сохранением пути к нему в переменной PATH.

Дело в том, что я не нашёл на сайте mingw нормального инсталлятора MSYS. Самый последний инсталлятор - msys-1.0.11, от 2008 года. Дальше просто куча частей, разложенная в кучу архивов. Я решил, что лучше взять компоненты поновее.
Цитата(IgorKossak @ Jun 20 2014, 14:02) *
А вот путь к тулчейну я в переменной PATH не сохраняю, а указываю в Project->Properties->C/C++ Build->Environment в переменной PATH (у меня Eclipse Luna, но и в других аналогичных IDE есть похожее). Так удобнее и при экспериментах с разными тулчейнами и с переносимостью проекта лучше.

Считаю, что makefile должен работать самостоятельно, на завися от эклипсы. Поэтому все параметры сборки проекта - в нём. Это и для переносимости в том числе.
При экспериментах ничто не мешает мне задать в makefile путь к любому тулчейну, если занадобится. А дефолтные тулчейны - в PATH.

Цитата(Сергей Борщ @ Jun 20 2014, 14:34) *
А у меня путь к самому свежему компилятору прописан в PATH (что позволяет его вызывать из командной строки без полного указания пути), но при необходимости можно в makefile добавить в начало PATH путь к любому другому (подсмотрел у ReAl)


А чем это лучше, вот такого варианта:
Код
    TOOL    = arm-none-eabi-
    CC          = $(TOOL)gcc
    CXX         = $(TOOL)g++
    LD          = $(TOOL)g++

(при необходимости заменяем на:
Код
    TOOL    = /path/to/another/toolchain/arm-none-eabi-
    CC          = $(TOOL)gcc
...

)?



--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 20 2014, 10:16
Сообщение #23


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(AHTOXA @ Jun 20 2014, 13:03) *
А чем это лучше, вот такого варианта:
Тем, что не надо перечислять все используемые программы тулчейна, вероятно.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 20 2014, 11:09
Сообщение #24


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Так их в любом случае придётся перечислять, из-за префикса arm-none-eabi- sm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jun 20 2014, 11:26
Сообщение #25


Шаман
******

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



Цитата(AHTOXA @ Jun 20 2014, 13:03) *
Дело в том, что я не нашёл на сайте mingw нормального инсталлятора MSYS. Самый последний инсталлятор - msys-1.0.11, от 2008 года. Дальше просто куча частей, разложенная в кучу архивов. Я решил, что лучше взять компоненты поновее.

mingw-get-setup.exe Можно выбрать то, что нужно.
Цитата(AHTOXA @ Jun 20 2014, 13:03) *
Считаю, что makefile должен работать самостоятельно, на завися от эклипсы. Поэтому все параметры сборки проекта - в нём. Это и для переносимости в том числе.
При экспериментах ничто не мешает мне задать в makefile путь к любому тулчейну, если занадобится. А дефолтные тулчейны - в PATH.

Это безусловно, если собирать из командной строки. Но если в проект входят ещё и настройки среды (файлы .project, .cproject, что в последнее время сполошь и рядом делается), что удобно для индексатора и discovering, то на мой взгляд лучше по-моему.
Кроме того, "дефолтные тулчейны - в PATH" могут подложить свинью, поскольку оттуда трудно отследить какие именно инструменты вызываются. Например, у меня установлены две версии тулчейна от GCC ARM Embedded и один от CodeSourcery. Чтобы переключиться с одного на другой в Вашем варианте надо поменять переменную PATH и перелогиниться в системе (у меня по крайней мере так). В то время как используя мой вариант, не нужно даже среду перезапускать, а достаточно подправить переменную PATH в среде, при этом автоматически осуществляется редискаверинг и реиндексация.
Мне так показалось удобнее, но я не настаиваю.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 20 2014, 12:55
Сообщение #26


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(IgorKossak @ Jun 20 2014, 17:26) *
mingw-get-setup.exe Можно выбрать то, что нужно.

О, спасибо, я как-то проглядел. Хотя не люблю я эти веб-инсталляторы sm.gif
Цитата(IgorKossak @ Jun 20 2014, 17:26) *
Это безусловно, если собирать из командной строки. Но если в проект входят ещё и настройки среды (файлы .project, .cproject, что в последнее время сполошь и рядом делается), что удобно для индексатора и discovering, то на мой взгляд лучше по-моему.

В этом случае сложнее перетащить проект в другую IDE. В моём же варианте - настройки сборки проекта - в makefile, настройки среды - в .project, .cproject.
Цитата(IgorKossak @ Jun 20 2014, 17:26) *
Кроме того, "дефолтные тулчейны - в PATH" могут подложить свинью, поскольку оттуда трудно отследить какие именно инструменты вызываются. Например, у меня установлены две версии тулчейна от GCC ARM Embedded и один от CodeSourcery. Чтобы переключиться с одного на другой в Вашем варианте надо поменять переменную PATH и перелогиниться в системе (у меня по крайней мере так).

Нет, я говорил немного о другом. Я говорил о вызове с полным указанием пути к тулчейну.
То есть, дефолтный компилятор вызывается как arm-none-eabi-gcc, а компилятор из другого тулчейна - как C:/tools/cs/2011.09-69/arm-none-eabi-gcc.
При этом никаких изменений в PATH вносить не надо.
Впрочем, я тоже не настаиваю на этом вариантеsm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jun 20 2014, 13:16
Сообщение #27


Шаман
******

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



Цитата(AHTOXA @ Jun 20 2014, 15:55) *
То есть, дефолтный компилятор вызывается как arm-none-eabi-gcc, а компилятор из другого тулчейна - как C:/tools/cs/2011.09-69/arm-none-eabi-gcc.

О! Почти пришли к общему знаменателю. За исключением лишь того, что я не пользуюсь понятием "дефолтного" тулчейна, ибо не понимаю этой сущности. У меня тулчейн всегда конкретный, записанный с полным путём (в переменной PATH среды разработки, в системной же PATH - никаких путей к тулчейнам). Что же касается makefile, то указывать там полный путь, на мой взгляд - моветон, ибо совершенно не переносимо.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 20 2014, 15:24
Сообщение #28


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(IgorKossak @ Jun 20 2014, 19:16) *
О! Почти пришли к общему знаменателю.

Да, мы близки к этомуsm.gif
Дефолтный тулчейн - это, скажем, текущий стабильный. Вышел новый gcc-arm-embedded - я его протестировал, убедился в его работоспособности, и прописал в PATH. И с этого момента все проекты компилируются им.
Вам же, чтобы откомпилировать старые проекты новым тулчейном -- придётся менять настройки для каждого проекта.
(Хотя может быть вы как раз наоборот, не станете менять, ибо раз проект разработан с конкретной версией компилятора, то пусть с ней и сопровождается. В этом случае всё нормально.)
Что касаемо указания полного пути в makefile, то это делается только на время эксперимента, потом убирается. Так что на переносимость не влияет.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Jun 20 2014, 15:38
Сообщение #29


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(IgorKossak @ Jun 20 2014, 17:16) *
О! Почти пришли к общему знаменателю. За исключением лишь того, что я не пользуюсь понятием "дефолтного" тулчейна, ибо не понимаю этой сущности. У меня тулчейн всегда конкретный, записанный с полным путём (в переменной PATH среды разработки, в системной же PATH - никаких путей к тулчейнам). Что же касается makefile, то указывать там полный путь, на мой взгляд - моветон, ибо совершенно не переносимо.


Можно вызывать сборку и так:
Код
make ARCH=ARM CROSS_COMPILE=path_to_cross_compiler


У меня в Makefile есть такой кусок:
Код
# Toolchain specific options

CROSS_COMPILE = /opt/gcc-arm-none-eabi-4_7-2013q1/bin

# Toolchain prefix (arm-none-eabi- -> arm-none-eabi-gcc.exe)
TCHAIN_PREFIX = arm-none-eabi-

ifndef CROSS_COMPILE
CROSS_TOOLS = $(TCHAIN_PREFIX)
else
CROSS_TOOLS = $(CROSS_COMPILE)/$(TCHAIN_PREFIX)
endif

CC    = $(CROSS_TOOLS)gcc
...

Под Eclipse лень править вызовы для проекта с внешним makefile в Builder Settings, поэтому явно указан CROSS_COMPILE.
Можно убрать (закомментировать) путь к кросс-компилятору и использовать тот, который указан в путях (у меня нет такого).
По поводу переносимости - невелика правка, хуже когда весь проект даже в другую директорию переносится с усилием (по опыту работы с средствами разработки от TI).

P.S. А не следует ли кусок обсуждения про настройку makefile перенести в раздел GNU/OpenSource средства разработки для avr/arm/mips, где это собственно уже и имеется. Для полноты картины?


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jun 20 2014, 16:28
Сообщение #30


Шаман
******

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



Цитата(mdmitry @ Jun 20 2014, 18:38) *
P.S. А не следует ли кусок обсуждения про настройку makefile перенести в раздел GNU/OpenSource средства разработки для avr/arm/mips, где это собственно уже и имеется. Для полноты картины?

Хорошо бы, но это может сделать модератор именно этого раздела.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 11th August 2025 - 19:08
Рейтинг@Mail.ru


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