![]() |
Модераторы: PILOT, ManiaK, Mazzi |
![]() ![]() ![]() |
|
BorisA |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 4.7.2005 Репутация: нет Всего: нет |
Уважаемые коллеги!
Я не программист, но мне нужно поставить задачу программистам. Помогите, пожалуй-ста! Нужно написать программу под DOS 6.22 для контроллера ввода/вывода. Хочеться струк-турировать программу аналогично тому, как это делается для многозадачных операцион-ных систем с тем, чтобы при необходимости изменить кусок программы, не менять ее це-ликом. Как я вспоминаю, если программу на C разбить на несколько текстовых файлов, то при компиляции они образуют различные объектные файлы, которые линковщик потом свя-зывает друг с другом. Так ли это? Можно ли таким образом образовать объектные файлы, аналогичные задачам для Windows или QNX? Ну, например "Чтение входных сигналов", "Обработка", Работа с портами", "Синхрониза-ция времени" и т.д. Если можно, то в какой последовательности будут выполняться коды соответствующих текстовых файлов исходных текстов (другими словами - сами объектные файлы). Можно ли изменить эту последовательность и как? Спасибо, Борис. Просьба отправить ответ на адрес [email protected] |
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: нет Всего: 62 |
Тема перемещена из раздела "Алгоритмы"
|
|||
|
||||
vadims |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 8.6.2005 Репутация: нет Всего: 17 |
Программа состоит из набора функций
Функции можно разбить по категориям, типа - Входные сигналы - Работа с портами - Временные - и тд Каждую категорию реализовать в отдельном файле Откомпилировать исходные файлы – получить объектные Из объектных файлов создать библиотеку Теперь пишутся функции верхнего уровня, те основная функция main и функции реализующие логику программы, вызываемые из main – они вызывают функции нижнего уровня, те что в библиотеке В этом варианте компоноваться (присоединяться) к исполняемому модулю будут только те объектные файлы, в которых есть хоть одна функция, вызываемая на верхнем уровне – остальные (не используемые в данной программе) модули будут игнорироваться. В процессе отладки функций нижнего уровня создавать библиотеку не надо – подключать к проекту прямо исходные модули. В библиотеку их перемещать только когда все функции данного модуля будете считать отлаженными А выполнятся будут уж в той последовательности в которой Вы их будете вызывать ![]() Вот как-то так -------------------- Cpu not found ! Press any key for software emulation. |
|||
|
||||
BorisA |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 4.7.2005 Репутация: нет Всего: нет |
Уважаемый коллега!
Большое спасибо за внимание к моим нуждам. Несколько уточняющих вопросов. Нужно ли вызываемый текстовый файл в целом оформлять как функцию или процедуру, или достаточно иметь в нем, как Вы пишете, хотя бы одну вызываемую функцию? В последнем, случае что будет с невызываемыми из этого файла функциями, они откомпилируются в объектный файл? Что такое библиотека для DOS, неужто .DLL? С уважением, BorisA. |
|||
|
||||
vadims |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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. |
|||
|
||||
BorisA |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 4.7.2005 Репутация: нет Всего: нет |
Большое спасибо - все предельно понятно. Борис.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)" | |
|
На данный раздел помимо Правил форума распространяются текже следующие правила:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |