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

 
 
 
Reply to this topicStart new topic
> Инициализация проектов, для легкого/быстрого переключения,Git
pokk
сообщение Oct 26 2016, 06:33
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 3-07-11
Пользователь №: 66 028



Добрый день уже, долго время мучаюсь с организацией инициализации проекта.
Дело в том что я хочу что бы, проект можно было ЛЕГКО переключать на разныех платах, т.е есть 2 платы с разным подключением периферии, но и есть общая часть которая работает по верх этой периферии и ей все равно как, как там периферия подключена, и даже все равно какой процессор стоит.

Текущая организация, проекта у меня состоит из .c .h модулей, где инициализация модуля(если требуется) находится в нем же.

В качестве упрошенного примера могу привести, подключение командной строки по USART, есть общий модуль, разбора команд(shell) совместно с инициализация USART и выводов. Что бы подключить его на другой плате теоретически надо только поменять выводы USART (Процессоры из одной серии).

Так вот хочу что бы было примерно так, есть один репозиторий проекта, 1 раз спортировал его на обе платы, а потом добавил пару команд в shell на одной плате закомител, переключился на другую плату, и там уже все изменения модуля Shell уже присутствуют, тоже изменил модуль shell, переключился опять на первую плату, и так далее постоянно, туда суда переключатся что бы можно было.

Пути решения, и что получилось:
1) Сделал 2 ветки для разных плат, но при изменении нескольких файлов не удобно применять.
2) При портировании, проекта оказалось не все так просто как изменить пару выводов, если смотреть на STM, то USART может сидеть на разных шинах, что тоже надо учитывать, ну и так же не много поплыли другие модули, типа изменился размер странице flash, из за разного объема flash, платах. В общем получилось что портирование, содержит в себе мелкие изменения, но во множестве файлов и как легко его переключать, пока не знаю.
3) В git нашёл команду submodules, ещё не особо разобрался что к чему, но по плану хотелось бы все общие модули, разделить на разные репозитория, и выкачивать, его при изменении, но тут возникает вопрос куда девать инициализацию, если все же она требуется модулю, и присутствует в нем.

Уже подумываю, о том что сделать отдельный файл инициализация проекта где будет настраиваться вся периферия,
тем самым, что бы спортировать его на другое устройство(плату), надо всего 1 файл поменять, но он будет здоровый сильно, и там черт ногу сломит, вот хотел бы спросить если ли ещё какие нибудь пути решения проблемы?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 26 2016, 06:43
Сообщение #2


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

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



Если это один проект с двумя (или более) вариантами исполнения, то ничего не надо разделять. Пусть всё лежит в одном репозитории.
Просто сделайте директории для каждого варианта реализации, и при сборке подключайте нужную.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
HardEgor
сообщение Oct 26 2016, 07:01
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 223
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925



Цитата(pokk @ Oct 26 2016, 13:33) *
Добрый день уже, долго время мучаюсь с организацией инициализации проекта.
Дело в том что я хочу что бы, проект можно было ЛЕГКО переключать на разныех платах, т.е есть 2 платы с разным подключением периферии, но и есть общая часть которая работает по верх этой периферии и ей все равно как, как там периферия подключена, и даже все равно какой процессор стоит.

Если хотите структуировать, то у вас должно быть три исходных проекта:
1. Инициализация оборудования первой платы
2. Инициализация оборудования второй платы
3. Общая часть

Далее делаем рабочие проекты
- сборка 1 и 3
- сборка 2 и 3
Go to the top of the page
 
+Quote Post
k155la3
сообщение Oct 26 2016, 07:01
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Посмотрите реализацию HAL у Ti в DriverLib евойном. Исользование одного кода под разные
target-процессоры. У ST наверное, похожая система.
Если выделить в своем софте уровни "абстракции", тотже HAL, и продумать интерфейсы между уровнями
- то вполне возможно.
Тотже компилятор С, с помощью настроек и набора .h,.lib,.def,etc обеспечивает генерацию кода под множество
разных чипов. А плата - по аналогии - тотже контроллер - процессор + периферия наразвес.

Насчет "Легко" - несколько сомнительно.

Я использую отладку кода для контроллера в PC. Использую элементарные #ifdef.

Что мешает сделать так:

#ifdef BOARD_ID1
#include "my_board1.h"
#else
#include "my_board2.h"
#endif

переменная BOADR_ID1 определяется в опциях проекта или по target-процессору.

Go to the top of the page
 
+Quote Post
pokk
сообщение Oct 26 2016, 08:03
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 3-07-11
Пользователь №: 66 028



Эх, т.е все же стоит из каждого модуля по выдирать инициализацию и сложить все в один файл ?
Что бы получилось
Цитата
1. Инициализация оборудования первой платы
2. Инициализация оборудования второй платы

Или
Цитата
#include "my_board1.h"

Это мне не очень нравится так как при копировании модуля, в новый проект придется рыскать по остальным проекта и искать где же там была инициализация его.
С вариантом Ifdef я начил делать но как уже писал при поритрования на одну плату получилось много мелких изменений разбросанных по всему проекту, так что не решился везде Ifdef пихать.
AHTOXA, вы имели ввиду, тоже самое что предложил k155la3, с вариантом ifdef, только настроить это в компиляторе?
Go to the top of the page
 
+Quote Post
k155la3
сообщение Oct 26 2016, 10:36
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Вот как компилятор 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".
Вы можете ввести свои макро-переменные препроцессору и по ним переключать что угодно.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 26 2016, 11:00
Сообщение #7


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

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



Цитата(pokk @ Oct 26 2016, 13:03) *
AHTOXA, вы имели ввиду, тоже самое что предложил k155la3, с вариантом ifdef, только настроить это в компиляторе?

Не совсем.
Вот, например, структура проекта:
Код
src
   var1
      adc.c
      spi.c
   var2
      adc.c
      spi.c
   main.c

В директории var1 лежат файлы, специфичные для первого варианта исполнения, в директории var2 - файлы, специфичные для второго варианта.
Общие файлы лежат в корне.
Для инициализации вы из main.c вызываете, скажем, функции init_adc(), init_spi(), и всё, что вам нужно. А реализации этих функция - соответственно в директории нужного модуля. При сборке проекта в зависимости от требуемого варианта реализации вы подключаете ту или иную директорию.


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


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(pokk @ Oct 26 2016, 09:33) *
Текущая организация, проекта у меня состоит из .c .h модулей, где инициализация модуля(если требуется) находится в нем же.


Уже подумываю, о том что сделать отдельный файл инициализация проекта где будет настраиваться вся периферия,
тем самым, что бы спортировать его на другое устройство(плату)


На ли понимать что у вас всего два файла .c и .h и теперь вы стали перед дилемой делать и ли нет третий файл? biggrin.gif

Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 17th June 2024 - 20:45
Рейтинг@Mail.ru


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