|
|
![Reply to this topic](style_images/1/t_reply.gif) ![Start new topic](style_images/1/t_new.gif) |
Инициализация проектов, для легкого/быстрого переключения,Git |
|
|
|
Oct 26 2016, 06:33
|
Частый гость
![*](style_images/1/pip.gif) ![*](style_images/1/pip.gif)
Группа: Участник
Сообщений: 91
Регистрация: 3-07-11
Пользователь №: 66 028
![](style_images/1/spacer.gif)
|
Добрый день уже, долго время мучаюсь с организацией инициализации проекта. Дело в том что я хочу что бы, проект можно было ЛЕГКО переключать на разныех платах, т.е есть 2 платы с разным подключением периферии, но и есть общая часть которая работает по верх этой периферии и ей все равно как, как там периферия подключена, и даже все равно какой процессор стоит.
Текущая организация, проекта у меня состоит из .c .h модулей, где инициализация модуля(если требуется) находится в нем же.
В качестве упрошенного примера могу привести, подключение командной строки по USART, есть общий модуль, разбора команд(shell) совместно с инициализация USART и выводов. Что бы подключить его на другой плате теоретически надо только поменять выводы USART (Процессоры из одной серии).
Так вот хочу что бы было примерно так, есть один репозиторий проекта, 1 раз спортировал его на обе платы, а потом добавил пару команд в shell на одной плате закомител, переключился на другую плату, и там уже все изменения модуля Shell уже присутствуют, тоже изменил модуль shell, переключился опять на первую плату, и так далее постоянно, туда суда переключатся что бы можно было.
Пути решения, и что получилось: 1) Сделал 2 ветки для разных плат, но при изменении нескольких файлов не удобно применять. 2) При портировании, проекта оказалось не все так просто как изменить пару выводов, если смотреть на STM, то USART может сидеть на разных шинах, что тоже надо учитывать, ну и так же не много поплыли другие модули, типа изменился размер странице flash, из за разного объема flash, платах. В общем получилось что портирование, содержит в себе мелкие изменения, но во множестве файлов и как легко его переключать, пока не знаю. 3) В git нашёл команду submodules, ещё не особо разобрался что к чему, но по плану хотелось бы все общие модули, разделить на разные репозитория, и выкачивать, его при изменении, но тут возникает вопрос куда девать инициализацию, если все же она требуется модулю, и присутствует в нем.
Уже подумываю, о том что сделать отдельный файл инициализация проекта где будет настраиваться вся периферия, тем самым, что бы спортировать его на другое устройство(плату), надо всего 1 файл поменять, но он будет здоровый сильно, и там черт ногу сломит, вот хотел бы спросить если ли ещё какие нибудь пути решения проблемы?
|
|
|
|
|
Oct 26 2016, 07:01
|
Гуру
![*](style_images/1/pip.gif) ![*](style_images/1/pip.gif) ![*](style_images/1/pip.gif) ![*](style_images/1/pip.gif) ![*](style_images/1/pip.gif) ![*](style_images/1/pip.gif)
Группа: Свой
Сообщений: 2 223
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925
![](style_images/1/spacer.gif)
|
Цитата(pokk @ Oct 26 2016, 13:33) ![*](style_images/1/post_snapback.gif) Добрый день уже, долго время мучаюсь с организацией инициализации проекта. Дело в том что я хочу что бы, проект можно было ЛЕГКО переключать на разныех платах, т.е есть 2 платы с разным подключением периферии, но и есть общая часть которая работает по верх этой периферии и ей все равно как, как там периферия подключена, и даже все равно какой процессор стоит. Если хотите структуировать, то у вас должно быть три исходных проекта: 1. Инициализация оборудования первой платы 2. Инициализация оборудования второй платы 3. Общая часть Далее делаем рабочие проекты - сборка 1 и 3 - сборка 2 и 3
|
|
|
|
|
Oct 26 2016, 08:03
|
Частый гость
![*](style_images/1/pip.gif) ![*](style_images/1/pip.gif)
Группа: Участник
Сообщений: 91
Регистрация: 3-07-11
Пользователь №: 66 028
![](style_images/1/spacer.gif)
|
Эх, т.е все же стоит из каждого модуля по выдирать инициализацию и сложить все в один файл ? Что бы получилось Цитата 1. Инициализация оборудования первой платы 2. Инициализация оборудования второй платы Или Цитата #include "my_board1.h" Это мне не очень нравится так как при копировании модуля, в новый проект придется рыскать по остальным проекта и искать где же там была инициализация его. С вариантом Ifdef я начил делать но как уже писал при поритрования на одну плату получилось много мелких изменений разбросанных по всему проекту, так что не решился везде Ifdef пихать. AHTOXA, вы имели ввиду, тоже самое что предложил k155la3, с вариантом ifdef, только настроить это в компиляторе?
|
|
|
|
|
Oct 26 2016, 10:36
|
Профессионал
![*](style_images/1/pip.gif) ![*](style_images/1/pip.gif) ![*](style_images/1/pip.gif) ![*](style_images/1/pip.gif) ![*](style_images/1/pip.gif)
Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848
![](style_images/1/spacer.gif)
|
Вот как компилятор IAR это использует Файл MSP430.h - "включатель" нужного чипа в проект Код /******************************************************************* * * * This file is a generic include file controlled by * * compiler/assembler IDE generated defines * * * *******************************************************************/
#ifndef __msp430 #define __msp430
#ifndef _SYSTEM_BUILD #pragma system_include #endif
#if defined (__MSP430C111__) #include "msp430c111.h"
#elif defined (__MSP430C1111__) #include "msp430c1111.h"
#elif defined (__MSP430C112__) #include "msp430c112.h"
#elif defined (__MSP430C1121__) #include "msp430c1121.h"
#elif defined (__MSP430C1331__) #include "msp430c1331.h"
...........
все типы поддерживаемые компилятором
........... При этом я в своем проекте в файлах .c .h не указываю процессор. Все файлы начинается на #include "MSP430.h" Тип процессора указан один раз, в опции проекта "target". Вы можете ввести свои макро-переменные препроцессору и по ним переключать что угодно.
|
|
|
|
|
Oct 26 2016, 11:00
|
![](https://electronix.ru/forum/uploads/av-29684.jpg)
фанат дивана
![*](style_images/1/pip.gif) ![*](style_images/1/pip.gif) ![*](style_images/1/pip.gif) ![*](style_images/1/pip.gif) ![*](style_images/1/pip.gif) ![*](style_images/1/pip.gif)
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684
![](style_images/1/spacer.gif)
|
Цитата(pokk @ Oct 26 2016, 13:03) ![*](style_images/1/post_snapback.gif) AHTOXA, вы имели ввиду, тоже самое что предложил k155la3, с вариантом ifdef, только настроить это в компиляторе? Не совсем. Вот, например, структура проекта: Код src var1 adc.c spi.c var2 adc.c spi.c main.c В директории var1 лежат файлы, специфичные для первого варианта исполнения, в директории var2 - файлы, специфичные для второго варианта. Общие файлы лежат в корне. Для инициализации вы из main.c вызываете, скажем, функции init_adc(), init_spi(), и всё, что вам нужно. А реализации этих функция - соответственно в директории нужного модуля. При сборке проекта в зависимости от требуемого варианта реализации вы подключаете ту или иную директорию.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
![Reply to this topic](style_images/1/t_reply.gif) ![Start new topic](style_images/1/t_new.gif) |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|