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

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

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

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

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

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


 
Опции темы
Непрочитано 23.02.2018, 12:31  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,260
Сказал спасибо: 11,170
Сказали Спасибо 3,860 раз(а) в 2,930 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Препроцессор, линкёр...

akegor, таки лучше заложить основы в концепции от авторов, усугубить особенностями конкретной среды и пользоваться.
Личные особенности лучше не привносить - сложнее будет с библиотеками и чужим кодом работать.
Реклама:
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 23.02.2018, 12:42  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,121
Сказал спасибо: 2,569
Сказали Спасибо 11,944 раз(а) в 5,991 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Препроцессор, линкёр...

mike-y-k, так об этом жеж и говорю - "сначала читать".
Про личные - если для себя, то как удобней. Если в компашке - лучше единая генеральская линия. А если понял, что почем, то никакой разницы, особенно, в современных ИДЕ, которые подсказывают где и что лежит.

Просматривая чужие варианты, пришел к тому, что у каждого (индивидуала или коллектива) свой стандарт и подходы. В мелочах, конечно. И этот стандарт позволяет работать "на автомате", не отвлекаясь по мелочам.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 23.02.2018, 16:54  
ampy
Гражданин KAZUS.RU
 
Регистрация: 22.07.2007
Адрес: Владивосток
Сообщений: 984
Сказал спасибо: 435
Сказали Спасибо 375 раз(а) в 197 сообщении(ях)
ampy на пути к лучшему
По умолчанию Re: Препроцессор, линкёр...

Сообщение от akegor Посмотреть сообщение
Несогласен относительно начальных значений. Начальные значения в заголовочном файле удобней. Типа паблика в плюсах. Но тут тоже надо делать разницу между "текущими" (проще модифицировать) и "типа библиотечными" или стандартными из набора среды разработки (или стандартных библиотек к чипу) - там нехрен ковыряться, можно только посмотреть.
Тут вы правы в части того, что я упустил про константы. Очень часто в заголовочных файлах содержится множество констант. Обычно в виде #define. Но переменные - нет. Переменные должны быть объявлены extern, т.е. определяться (и инициализироваться) в другом месте. Т.е. в заголовке можно написать

extern int power;

но не

int power = 127;

или

int power;
ampy вне форума  
Непрочитано 03.03.2018, 20:53  
NewWriter
Заблокирован
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,221 раз(а) в 1,319 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Препроцессор, линкёр...

По просьбе топикстартера.
Касательно вообще структуры проекта, инклюдов и связей. В общем случае, схема решаемой задачи будет такова:


То есть, есть main, из которого запускается инит хардвара самого МК, портов, из него же посылается команда включения дисплея, и из него же отправляются в дисплей какие-то сообщения, а так же в этот же main приходят дешифрованные нажатия кнопок клавиатуры, уже в виде конечных действий.

Формированием строки сообщения занимается модуль io, относящийся к категории middleware. Этот же модуль распознает нажатые кнопки. Классически, это функции printf и scanf, подогнанные по реализации непосредственно под текущую задачу.

Ну а управляет дисплеем драйвер дисплея. Причем он поделен на два уровня - верхний уровень формирует управляющие комбинации, а нижний уровень непосредственно передает сигналы на порты МК.
Однако, в зависимости от дисплея и от МК, можно не разделять на два уровня, а вполне обойтись одним.
Та же ситуация и с клавиатурой. В зависимости от реализации клавиатуры и требуемой универсальности, могут различаться и уровни разделения функционала. Самый нижний уровень всегда работает непосредственно с портами и обеспечивает распознавание нажатий кнопок. Уровень повыше координирует работу низкого уровня, выдавая команды "проверить состояние ног", и исходя из их состояния, решает вопрос о том, была ли нажата кнопка, фильтрует дребезг и фиксирует факт срабатывания кнопки, передавая на более высокие уровни код нажатой кнопки.

Подводя итог схемы, можно сказать, что если из main нам надо вывести в дисплей что-то, то мы можем написать printf("Voltage: %d", value); а дальше модуль io самостоятельно составит массив значений в формате интерфейса дисплея, самостоятельно переведя числовой тип value в последовательность ANSI, и затем через драйвер дисплея подергает ножками в нужном порядке, выводя полную строку.
Это - наиболее универсальный способ, при котором строка printf вообще не зависит от того, какой конкретно дисплей подключен - хоть двустрочник, хоть графический TFT или OLED.

Я как бы не знаю, надо ли писать и выкладывать программные тексты, поскольку не уверен, поймет ли затею топикстартер. Да и задача абстрактная. Да и еще тот факт, что я работаю в другой среде разработки и вообще с другими МК, отчего аппаратные особенности отличаются. В том числе и вообще по способу написания кода, да и по реализации даже высокоуровневых функций.
Тут вроде бы уже писали, что такое заголовочники и интерфейсы модулей.
Правда, как я заметил, некоторые представители "старой школы" (или как их еще назвать?) любят спихивать все заголовочники в один бальшой-пребальшой заголовочник и пихать его куда попало.
Как я уже писал в соседней теме, особенность языка Си не позволяет на уровне языка управлять связями, отсюда видимо и родился стиль пихания куда попало без разбора в одну кучу. Он не является ошибочным на уровне языка, язык это просто не отслеживает, но ошибочный он именно по логике.
Хотя... наверно именно из-за отсутствия жесткого контроля со стороны языка и появилось столько вариантов написания проги. И нельзя однозначно сказать, какой из вариантов более правильный.
Вобщем, тут ваапсче... я так подумал, что просто нет смысла приводит один вариант. Пишите так, как вам понятнее. В любом случае, это вы поймете сами после набивания собственных шишек.

PS. Касательно названия темы.
Строго говоря, препроцессор - это расшифровыватель всяких #define, #ifdef, макросов, typedef, вобщем, текстовых замен и переопределений.
А линкер - это формирователь объектных файлов, отслеживающий связи между файлами, ищущий все вхождения, ссылки.
Ну и еще есть непосредственно компилятор, который просматривая слинкованные объектные файлы, переводит текст на языке Си в машинные коды согласно набору инструкций МК.
И еще есть скрипты загрузчика, по которым распределяется память ОЗУ и ПЗУ, определяются адреса и способы хранения.

Последний раз редактировалось NewWriter; 03.03.2018 в 21:22.
NewWriter вне форума  
Непрочитано 04.03.2018, 05:15  
Bill
Гражданин KAZUS.RU
 
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 341 раз(а) в 202 сообщении(ях)
Bill на пути к лучшему
По умолчанию Re: Препроцессор, линкёр...

Сообщение от NewWriter Посмотреть сообщение
А линкер - это формирователь объектных файлов
А я всегда думал, что линкер - это "формирователь" единой программы из уже имеющихся объектных файлов. А "формирователями" объектных файлов являются компилятор и ассемблер. Или нет?
Bill вне форума  
Сказали "Спасибо" Bill
mike-y-k (04.03.2018)
Непрочитано 04.03.2018, 13:10  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,260
Сказал спасибо: 11,170
Сказали Спасибо 3,860 раз(а) в 2,930 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Препроцессор, линкёр...

Перед утверждениями некоторым стоит просто даже в wiki заглянуть .

Препроцессор - обработчик дополнительны инструкций, преобразующий их в код для компилятора.
Компилятор (ассемблер его разновидность) - преобразователь исходного кода в машинные команды в объектном коде.
Линкер - сборщик объектного кода в исполняемый код нужного формата. Тут уже и сами исполняемые файлы, и динамические библиотеки, и прошивки,…

А по вопросу о структуре кода и содержимом файлов заголовков стоит для образования посмотреть несколько проектов на GitHub, kernel.org,… желательно с большими коллективами разработчиков.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 04.03.2018, 19:04  
NewWriter
Заблокирован
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,221 раз(а) в 1,319 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Препроцессор, линкёр...

Гыыы.. Да я специально наоборот написал, чтобы проверить, не вымерли ли еще тут люди, шарящие в тематических вопросах ))) А то форум совсем задохся, как я вижу. Только с Алегиром вон бодаются извечно, да политику мусолят, и всё так же обсуждают старенький копировщик домофонных ключей
NewWriter вне форума  
Непрочитано 04.03.2018, 19:10  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,121
Сказал спасибо: 2,569
Сказали Спасибо 11,944 раз(а) в 5,991 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Препроцессор, линкёр...

Сообщение от NewWriter Посмотреть сообщение
специально наоборот написал, чтобы проверить
как проверяют написанное. Как-то, большого желания не возникло читать длинную портянку о том, что и так давным-давно...
Значит - надо проверять шутников, а то вопрошающие примут хрень
Видео:
за чистую монету.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.

Последний раз редактировалось akegor; 06.03.2018 в 08:33.
akegor вне форума  
Непрочитано 06.03.2018, 06:43  
Bill
Гражданин KAZUS.RU
 
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 341 раз(а) в 202 сообщении(ях)
Bill на пути к лучшему
По умолчанию Re: Препроцессор, линкёр...

Сообщение от NewWriter Посмотреть сообщение
Гыыы.. Да я специально наоборот написал, чтобы проверить, не вымерли ли еще тут люди, шарящие в тематических вопросах ))) А то форум совсем задохся, как я вижу. Только с Алегиром вон бодаются извечно, да политику мусолят, и всё так же обсуждают старенький копировщик домофонных ключей
Т.е. ваше длиннейшее "спаслание" - всего лишь шутка?
Bill вне форума  
Непрочитано 06.03.2018, 08:14  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: Препроцессор, линкёр...

Сообщение от Bill Посмотреть сообщение
Т.е. ваше длиннейшее "спаслание" - всего лишь шутка?
Да опиСался он))

А оправдание про проверку - эт пародия на нашего местного юродивого Алегюра, который глупые вопросы задает, оказывается, чтоб проверить, есть ли ещё на форуме спецы, или он самый крутой
AR_Favorit вне форума  
 

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

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

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

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


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


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