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

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

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

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

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

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


 
Опции темы

Препроцессор, линкёр...

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

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

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

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

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

extern int power;

но не

int power = 127;

или

int power;
ampy вне форума  
Непрочитано 03.03.2018, 20:53  
NewWriter
Почётный гражданин KAZUS.RUN
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
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.RUN
 
Регистрация: 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
Адрес: Москва СЗАО/МО
Сообщений: 12,285
Сказал спасибо: 11,860
Сказали Спасибо 4,159 раз(а) в 3,177 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Препроцессор, линкёр...

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

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

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

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

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

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

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

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

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

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

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

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


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.