Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объектные файлы, Объектные файлы 
:(
    Опции темы
BorisA
Дата 4.7.2005, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 4.7.2005

Репутация: нет
Всего: нет



Уважаемые коллеги!
Я не программист, но мне нужно поставить задачу программистам. Помогите, пожалуй-ста!
Нужно написать программу под DOS 6.22 для контроллера ввода/вывода. Хочеться струк-турировать программу аналогично тому, как это делается для многозадачных операцион-ных систем с тем, чтобы при необходимости изменить кусок программы, не менять ее це-ликом.
Как я вспоминаю, если программу на C разбить на несколько текстовых файлов, то при компиляции они образуют различные объектные файлы, которые линковщик потом свя-зывает друг с другом.
Так ли это?
Можно ли таким образом образовать объектные файлы, аналогичные задачам для Windows или QNX?
Ну, например "Чтение входных сигналов", "Обработка", Работа с портами", "Синхрониза-ция времени" и т.д.
Если можно, то в какой последовательности будут выполняться коды соответствующих текстовых файлов исходных текстов (другими словами - сами объектные файлы). Можно ли изменить эту последовательность и как?
Спасибо, Борис. Просьба отправить ответ на адрес [email protected]

PM MAIL   Вверх
podval
Дата 8.7.2005, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Где я? Кто я?
****


Профиль
Группа: Экс. модератор
Сообщений: 3094
Регистрация: 25.3.2002
Где: СПб

Репутация: нет
Всего: 62



Тема перемещена из раздела "Алгоритмы"
PM WWW ICQ   Вверх
vadims
Дата 8.7.2005, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 8.6.2005

Репутация: нет
Всего: 17



Программа состоит из набора функций
Функции можно разбить по категориям, типа
- Входные сигналы
- Работа с портами
- Временные
- и тд

Каждую категорию реализовать в отдельном файле

Откомпилировать исходные файлы – получить объектные
Из объектных файлов создать библиотеку

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

В процессе отладки функций нижнего уровня создавать библиотеку не надо – подключать к проекту прямо исходные модули. В библиотеку их перемещать только когда все функции данного модуля будете считать отлаженными

А выполнятся будут уж в той последовательности в которой Вы их будете вызывать smile

Вот как-то так



--------------------
Cpu not found ! Press any key for software emulation.
PM MAIL   Вверх
BorisA
Дата 11.7.2005, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 4.7.2005

Репутация: нет
Всего: нет



Уважаемый коллега!
Большое спасибо за внимание к моим нуждам.
Несколько уточняющих вопросов.
Нужно ли вызываемый текстовый файл в целом оформлять как функцию или процедуру, или достаточно иметь в нем, как Вы пишете, хотя бы одну вызываемую функцию?
В последнем, случае что будет с невызываемыми из этого файла функциями, они откомпилируются в объектный файл?
Что такое библиотека для DOS, неужто .DLL?
С уважением, BorisA.
PM MAIL   Вверх
vadims
Дата 12.7.2005, 02:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 8.6.2005

Репутация: нет
Всего: 17



Честно говоря, не очень понятно, что значит текстовый файл в целом оформлять как функцию. Но суть в следующем

В каждом исходном модуле содержится определенный вами набор функций, которые обычно логически связаны между собой, те при использование одной из функций модуля обычно используются и другие из этого же модуля
Возьмем к примеру функции работы с портами, пусть есть следующий набор функций – открыть/закрыть порт, прочитать/записать байт и прочитать/записать массив, тогда один из вариантов формирования библиотеки

Файл Ports1.cpp:
OpenPort
ClosePort

Файл Ports2.cpp:
ReadCharPort
ReadBufPort

Файл Ports3.cpp:
WriteCharPort
WriteBufPort

После компиляции получаем три объектных модуля Ports1.obj, Ports2.obj, Ports3.obj
Соберем их в библиотеку Ports.lib

Пусть приложение только читает байт из порта и выводит его на экран

void main( void )
{
char ch;

OpenPort( … );

ch = ReadCharPort( … );
printf( “%c\n”, ch );

ClosePort( … );
}

В этом случае в приложение, из библиотеки Ports.lib, скомпонуются только Ports1.obj и Ports2.obj . МодульPorts3.obj в исполняемый модуль не попадет.
Хотя функция ReadBufPort и не используется в программе, она все равно будет присоединена к исполняемому модулю, тк находиться в составе Ports2.obj, в котором есть используемая функция ReadCharPort

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

Что касается библиотек для DOS. В принципе в DOS тоже можно использовать динамические подгружаемые библиотеки (оверлеи). Но в вашем случае речь об этом не идет.
Полученные после компиляции объектные файлы надо собрать в библиотеку с помощью специальной утилиты (например для Borland C++ - Tlib.exe ). При компоновке необходимые файлы из этой библиотеки будут присоединены к исполняемому модулю.

Это сообщение отредактировал(а) vadims - 12.7.2005, 02:27


--------------------
Cpu not found ! Press any key for software emulation.
PM MAIL   Вверх
BorisA
Дата 12.7.2005, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 4.7.2005

Репутация: нет
Всего: нет



Большое спасибо - все предельно понятно. Борис.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0770 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.