Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 10.05.2018, 23:51  
hacker7
Вид на жительство
 
Регистрация: 07.01.2007
Адрес: Ленинградская обл
Сообщений: 428
Сказал спасибо: 147
Сказали Спасибо 71 раз(а) в 56 сообщении(ях)
hacker7 на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

"Так вот вопрос - где та грань, которая будет самой правильной? "
Зависит от ситуации.
Смотря какой проект.
Если собирается с готовых кусков, то играем в те игры, какие там. Нужно корректно состыковать, чтобы работало, хоть это и некрасиво и неправильно, но если заработает, то и будет правильно.
Если делаю сам почти с 0 (а это на поверку куда удобнее и легче, чем кажется), то делаю три файла. Первый - это код в стиле старых первых Паскалей. main в конце, остальные процедуры в порядке, обратном использованию (т е те, на которые ссылаемся, выше). Второй файл - это собственный .h , в котором описаны глобальные переменные. Их немного. Третий файл - ещё один .h, в котором только константы, в т ч настроечные. Всякие системные stdio.h и т п тщательно инклудируем в соотв с инструкцией к оным, и не иначе. И не забываем, т к употребление библиотечных ф-ций БЕЗ соотв include может как бы пройти, на самлм деле будет незаметное неправильное с типами данных.
Реклама:
hacker7 вне форума  
Непрочитано 11.05.2018, 01:56  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,246
Сказал спасибо: 11,165
Сказали Спасибо 3,854 раз(а) в 2,925 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

CERGEI1982, своя ось - это просто очень много датчиков, иногда с совсем не очевидными связями… Так что после сотого датчика можно и повысить свой уровень.

Собственно все высокоуровневые обертки как раз и есть попытка изобразить для программиста некую операционную систему.

Дальше уже вопрос из начала hollywar - а нужно ли это?
Кому-то проще решать сразу и системные и прикладные задачи, а кому-то ближе прикладное программирование и проблемы с железом он предпочёл бы вынести из сферы своих интересов. Тут чисто вопрос о фломастерах, а о них спорить совершенно бессмысленно.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 11.05.2018, 07:37  
Исбанни
Прописка
 
Регистрация: 21.04.2018
Сообщений: 174
Сказал спасибо: 1
Сказали Спасибо 66 раз(а) в 53 сообщении(ях)
Исбанни на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

Сообщение от hacker7 Посмотреть сообщение
main в конце, остальные процедуры в порядке, обратном использованию
Весь код в одном файле - так далеко не разгонишься. Хватит только на примитивные мигалки или опрос датчика и УАРТ. А если больше, то это будет то, о чем писал Эдди - файл на 15-20 тысяч строк.
Сообщение от hacker7 Посмотреть сообщение
собственный .h , в котором описаны глобальные переменные.
Да, попробуйте инициализовать переменную в файле .h ))

В общем, я бы не стал так делать что-то, кроме тестового проектика для быстрой проверки чего-либо.
Исбанни вне форума  
Непрочитано 11.05.2018, 22:52  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,246
Сказал спасибо: 11,165
Сказали Спасибо 3,854 раз(а) в 2,925 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

STM32F0, достаточный для класса задач уровень абстракции системного уровня от прикладного - уже операционная система.
Собственно они и создаются для исключения ситуации со 101-ым .
Ну а если он не был учтён в исходной абстракции, то просто поправить ее под новые реалии.
Таки новое устройство или протокол в любой OS с достаточной долей вероятности требуют новых драйверов, смены API, протоколов ядра, компонентов ядра, самого ядра,…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 11.05.2018, 23:50  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,581
Сказал спасибо: 115
Сказали Спасибо 806 раз(а) в 583 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

mike-y-k, когда-то мне хотелось иметь линукс на МК. Сейчас же, когда есть дешевые процессоры, в этом смысла никакого нет: собираем аппаратную часть на МК безо всякого лишнего говна вроде ртосей, а все вычисление, сеть и т.п. оставляем почти полноценному компьютеру — одноплатнику.
__________________
Смерть бандеровской мразоте!
eddy на форуме  
Непрочитано 12.05.2018, 00:26  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,581
Сказал спасибо: 115
Сказали Спасибо 806 раз(а) в 583 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

Сообщение от STM32F0 Посмотреть сообщение
Даже СИ для разных МК со своими прибабахами.
Да ну нафиг! Это где же так? Разве что всякие типичные для конкретного компилятора прагмы...
__________________
Смерть бандеровской мразоте!
eddy на форуме  
Непрочитано 12.05.2018, 15:20  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,581
Сказал спасибо: 115
Сказали Спасибо 806 раз(а) в 583 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

Сообщение от STM32F0 Посмотреть сообщение
полтора компилятора
Нет кошерных компиляторов кроме gcc. Все остальное - шлак! SDCC я пользуюсь лишь из-за того, что нет порта gcc для STM8 (а начал я пользоваться sdcc еще в 2009-м что ли, когда PIC надо было по-быстренькому запрограммировать для управления шаговиком через CAN-шину — что под рукой было, от того и пришлось плясать).
__________________
Смерть бандеровской мразоте!
eddy на форуме  
Непрочитано 13.05.2018, 01:23  
parovoZZ
Почётный гражданин KAZUS.RU
 
Регистрация: 15.11.2010
Сообщений: 2,378
Сказал спасибо: 338
Сказали Спасибо 328 раз(а) в 253 сообщении(ях)
parovoZZ на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

Ну тогда такой вопрос.
Где же прописывать пины стандартных портов - SPI, USI, I2C, UART и пр.? И неотъемлемые пины SPI - CE? В файле SPI.h или в файле (ах) драйвера (ов) устройства (ов)?
parovoZZ вне форума  
Непрочитано 13.05.2018, 03:59  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,246
Сказал спасибо: 11,165
Сказали Спасибо 3,854 раз(а) в 2,925 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

Вот от качества серого вещества действительно многое зависит.
Если писать код строго на стандарте языка и все зависимое от конкретного железа выносить отдельно - получается минимум проблем при смене железа.
В таком варианте нужно только часть связанную с железом поправить, а не переписывать весь код.
Собственно спецификацию ANSI C/C89/ISO C сейчас поддерживают видимо все компиляторы, значительная часть поддерживает C99. Следование стандартам уже даёт минимизацию геморроя и гарантию переносимости.
Собственные исходники более чем 20 летней давности практически без правок использую… (K&R и ANSI C в чистом виде ).

parovoZZ, планируете только на конкретном МК или семействе - как удобно, планируете переносить или сделать для множества разнотипных - уже стоит подумать о способе вынесения аппаратно зависимой части отдельно и алгоритм писать строго на стандарте.
Собственно в make для этого определяется переменная архитектуры и ее значение в соответствующей переменной уже определяет куски, подставляемые препроцессором.
Да и для локальной версии такой подход вполне подходит - назначения ног вполне выносятся в make и нет необходимости иметь разный/поправляемый код для нескольких плат с разной разводкой или под разные корпуса…

PS В общем случае двух переменных ARCH и ARCH_V вполне хватит
Для множества ARCH типа STM32,MSP430
С наборами вариантов типа STM32F030_1,MSP430F2_4 можно иметь переносимый код без лишней головной боли, с настройкой при компиляции и получением результата в нужных папках. Дальше только залить и пользоваться…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…

Последний раз редактировалось mike-y-k; 13.05.2018 в 04:08.
mike-y-k вне форума  
Непрочитано 13.05.2018, 09:54  
Исбанни
Прописка
 
Регистрация: 21.04.2018
Сообщений: 174
Сказал спасибо: 1
Сказали Спасибо 66 раз(а) в 53 сообщении(ях)
Исбанни на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

Сообщение от parovoZZ Посмотреть сообщение
В файле SPI.h или в файле (ах) драйвера (ов) устройства (ов)?
Файл SPI.h - это уже и есть заголовочник драйвера интерфейса SPIю В принципе, можно в одной паре файлов совмещать драйвер подключаемого устройства (например, внешнего АЦП или дисплея) и драйвер интерфейса МК. Я это и показывал в коде еще в начале темы, на первой странице, оба варианта. как больше нравится, так и пишите.
Драйвер SPI содержит основные функции:
- SPI_Init
- SPI_Deinit
- SPI_Send
- SPI_Receive
- и макросы или инлайновые функции дергания CS.
Дефайны пинов выносить в SPI.h не нужно, поскольку они используются только в SPI.c.

Если не хотите слишком мелко дробить файлы, можете драйвер подключаемого устройства писать в одну пару файлов: device_drv.c, device_drv.h.
При этом дефайны пинов так же будут лежать только в device_drv.c, потому что они дальше нигде не нужны. Как бы поймите одну простую вещь: device_drv.h нужен только для связи драйвера устройства с остальной прогой, а значит, в него не надо пихать то, что больше нигде в проге использоваться не будет. Вам нигде, кроме этого драйвера, не будет нужен номер пина у MOSI.
Исбанни вне форума  
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OLED ssd1306 + STM32f030f4 miwutka Песочница (вопросы новичков) 195 07.01.2019 15:38
AVR Studio + CVAVR: директивы #include SwanSwan AVR 2 30.10.2016 18:50
Светодиоды "Straw Hat" - оптимальное использование mikesmith Отвлекитесь, эмбеддеры! 10 09.03.2014 02:28
usb cdc pic18f14k50 gromovi Proteus, KiCAD и другие ECAD 9 21.04.2013 15:31
В какой программе компелить код (подключение #include ) FedorChek Микроконтроллеры, АЦП, память и т.д 4 04.05.2009 20:00


Часовой пояс GMT +4, время: 20:08.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot