This page create in CP1251

(L) CopyLeft 2002-2003

All source is freeware.

Все программы свободно распространяются в исходниках.

Все торговые марки являются собственностью их владельцев.

По всем вопросам обращайтесь по адресу: i80c386ex@narod.ru.

Инструментальные средства для Intel 80C386EX.

Все файлы на странице упакованы WinZip.

На этой странице представлены инструментальные средства, сделанные для вычислителей на Intel 80C386EX. Вычислители имеют название СВУ02 и СВУ03 (супервизорное устройство). Проект отлажен и запущен только для СВУ02. Но в текстах программ можно найти ветки, предназначенные для выполнения и/или трансляции на СВУ03.

Вычислитель работает в составе телекоммуникационного прибора (мультиплексора SDH).

В качестве транслятора используется Borland 5.02. Проект транслируется под ДОС. Модель памяти huge.

В проекте используется язык С++, в частности шаблоны template.

Программа функционирует в реальном режиме процессора.

На вычислитель установлена ОС UCOS http://www.ucos-ii.com/.

Трудоемкость проекта – 9 чел/мес. Из них затрачено на разработку инструментальных средств – 6 чел/мес.

Технология подготовки программ включает в себя:

  1. Трансляция и отладка программ в IDE Borland 5.02.
  2. Трансляция программ в пакетном режиме с помощью транслятора Borland 5.02. На этом этапе получался ассемблерные файлы.
  3. Трансляция полученных ассемблерных файлов в пакетном режиме с помощью транслятора Tasm 5.0 от Borland. На этом этапе получались объектные файлы.
  4. Линковка полученных объектных файлов с помощью линкера Tlink от Borland. На этом этапе получался ДОС-exe файл.
  5. Конвертация ДОС-exe файла в двоичный формат, пригодный для загрузки в ПЗУ. Для конвертации использовалась утилита exe2alf.exe. Ее исходники и описание можно загрузить здесь. Двоичный формат имеет расширение alf (absolute load format).
  6. Прошивка полученного двоичного файла в микросхему начального загрузчика (с помощью программатора) или загрузка рабочей программы во flash по протоколу Xmodem через COM порт (с помощью HyperTerminal из состава Windows)

Вычислитель имеет в своем составе:

  1. 500Кб динамического ОЗУ на микросхемах TMS44400. ОЗУ располагается в адресах с 0x00000 до 0x7ffff. Используется CS0.
  2. 500Кб flash на микросхемах Atmel AT49F080. Используется для хранения образа рабочей программы. Располагается в адресах с 0x80000 до 0xfffff. Используется CS1.
  3. 64Кб flash начальный загрузчик на микросхеме AT29C512. Располагается в адресах с 0x100000 до 0x10ffff. Используется UCS.
  4. 64Кб шина для связи с телекоммуникационным прибором. Располагается в адресах с 0x100000 до 0x10ffff. Используется CS3.
  5. Контроллер Ethernet. Располагается в адресах с 0x300 до 0x310 в пространстве адресов ВУ. Используется CS2.
  6. Регистр индикации. Располагается в адресах с 0x200 до 0x202 в пространстве адресов ВУ. Управляет четырьмя двухцветными светодиодами. Используется CS4.

Совместное адресное пространство разделяют начальный загрузчик и шина для связи с телекоммуникационным прибором. Чтобы обеспечить такой режим работы, блок UCS выключается после того, как начальный загрузчик запускает рабочую программу. После выключения блока UCS включался блок CS3.

Порт UCOS для huge модели памяти Intel 80C386EX можно загрузить здесь.

Startup для Intel 80C386EX можно загрузить здесь.

В рамках проекта были разработаны две программы. Одна - программа начального загрузчика и вторая - рабочая программа.

При использовании startup файла для программы начального загрузчика нужно сначала оттранслировать проект начального загрузчика, а затем скорректировать строку:

ORG PHSTARTADR-0cb70H ;correction address

Эта строка находится в конце файла start.asm в секции _CODESTOP. Вместо адреса 0cb70H нужно подставить адрес начала секции _CODESTOP из файла карты загрузки terminal.map. Это нужно для того, чтобы начальный JMP FAR PTR ABSSTART попал на адрес 0xfff0, с которого стартуют процессоры Intel. После коррекции указанной строки нужно повторно оттранслировать проект начального загрузчика. После повторной трансляции он пригоден для прошивки в ПЗУ.

При использовании startup файла для рабочей программы коррекция адреса не нужна, так как рабочая программа запускается по адресу, записанному в ее служебной структуре.

Функция main программы начального загрузчика содержится в файле terminal.

Функция main рабочей программы содержится в файле work02.

Описание рабочей программы и команд можно загрузить здесь.

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

Размер загружаемого двоичного файла программы начального загрузчика ~40Кб.

Размер загружаемого двоичного файла рабочей программы ~100Кб.

Проект состоит из модулей. Модули имеют имена utils*.cpp и utils*.h. Вместо звездочки стоит порядковый номер модуля. Обычно в одном модуле реализована одна функция. Например, работа с COM портом или с таймером.

Модули можно загрузить здесь.

Описание модулей:

  1. utils0.h – типы, используемые в программе. Программа отлаживалась под разными платформами. В связи с этим тип int переопределен с помощью typedef. (отлажен)
  2. utils1.cpp, utils1.h – классы для работы с chip select unit (отлажен)
  3. utils2.cpp, utils2.h – функции-заглушки для new и delete (отлажен)
  4. utils3.cpp, utils3.h – не используется
  5. utils4.cpp, utils4.h – не используется
  6. utils5.cpp, utils5.h – не используется
  7. utils6.cpp, utils6.h – класс для работы с таймером (отлажен)
  8. utils7.cpp, utils7.h – класс для работы с контроллером прерываний (отлажен)
  9. utils8.cpp, utils8.h – структура для результатов работы (не отлажен)
  10. utils9.cpp, utils9.h – класс для работы с COM портом (отлажен)
  11. utils10.cpp, utils10.h – класс для работы с flash как с диском (не отлажен)
  12. utils11.cpp, utils11.h – функции memset и memcpy для UCOS (отлажен)
  13. utils12.cpp, utils12.h – класс кольцевого буфера (отлажен)
  14. utils13.cpp, utils13.h – тест ОЗУ (отлажен)
  15. utils14.cpp, utils14.h – работа с flash Atmel AT49F080 (отлажен)
  16. utils15.cpp, utils15.h – реализация huge pointer (отлажен)
  17. utils16.cpp, utils16.h – классы для хранения образов некоторых регистров внешних устройств в ОЗУ. Используются для манипулирования битами в словах. (отлажен)
  18. utils17.cpp, utils17.h – почтовый ящик на статически размещенном кольцевом буфере (отлажен)
  19. utils18.cpp, utils18.h – третий метод UCOS for Intel для входа и выхода из критической секции (отлажен). Необходим для utils17, т.к. в template Borland нельзя вставить asm команду.
  20. utils19.cpp, utils19.h – SLIP уровень для COM порта (не отлажен)
  21. utils20.cpp, utils20.h – класс wrapper для partition UCOS (не отлажен)
  22. utils21.cpp, utils21.h – программа обслуживания COM порта со встроенным на уровне обработчика прерывания SLIP протоколом (не отлажен)
  23. utils22.cpp, utils22.h – базовые классы для обобщенного канала со SLIP протоколом (не отлажен)
  24. utils23.cpp, utils23.h – базовые классы для обобщенного канала ввода-вывода (не отлажен)
  25. utils24.cpp, utils24.h – функции преобразования для SLIP протокола (не отлажен)
  26. utils25.cpp, utils25.h – базовые классы для создания позиционной диагностики (не отлажен)
  27. utils26.cpp, utils26.h – IP уровень (не отлажен)
  28. utils27.cpp, utils27.h – функции для смены порядка байт в слове и двойном слове (не отлажен)
  29. utils28.cpp, utils28.h – структуры для описания форматов IP и UDP (не отлажен)
  30. utils29.cpp, utils29.h – не используется
  31. utils30.cpp, utils30.h – параметры IP уровня (не отлажен)
  32. utils31.cpp, utils31.h – реализация протокола tftp (не отлажен)
  33. utils32.cpp, utils32.h – реализация функций strcpy, strcat и других библиотечных функций (отлажен)
  34. utils33.cpp, utils33.h – перевод форматов hex->bin и bin->hex (отлажен)
  35. utils34.cpp, utils34.h – задача, реализующая прием команд по COM порту и их выполнение. Эти команды доступны в рабочей программе и в программе начального загрузчика (отлажен)
  36. utils35.cpp, utils35.h – класс для работы с watchdog таймером (отлажен)
  37. utils36.cpp, utils36.h – реализация протокола Xmodem (отлажен)
  38. utils37.cpp, utils37.h – запрет и разрешение прерываний в обход сервисов UCOS (отлажен)
  39. utils38.cpp, utils38.h – класс для работы с комплектом микросхем SXT6051 и SXT6251. Этот комплект микросхем реализует мультиплексор SDH. (отлажен)
  40. utils39.cpp, utils39.h – функция main (отлажен)
  41. utils40.cpp, utils40.h – Дополнительные к utils34 команды. Эти команды доступны только в рабочей программе. (отлажен)
  42. utils41.cpp, utils41.h – класс для синтаксического разбора команды (отлажен)
  43. utils42.cpp, utils42.h – класс для запоминания конфигурации прибора
  44. utils43.cpp, utils43.h – работа с flash Atmel AT29C512 (отлажен)
  45. utils44.cpp, utils44.h – класс для описания битовых полей управления прибора (отлажен)
  46. utils45.cpp, utils45.h – адреса и смещения для работы с микросхемами SXT6051 и SXT6251 (отлажен)
  47. utils46.cpp, utils46.h – класс для работы с SSIO портом (отлажен)
  48. utils47.cpp, utils47.h – класс для работы с DMA каналом (отлажен)
  49. utils48.cpp, utils48.h – класс для помехоустойчивого кодирования блоковым кодом (12,8) c с исправлением одиночной ошибки (отлажен)
  50. utils49.cpp, utils49.h – задача фонового мониторинга и управления микросхемами SXT6051 и SXT6251 (отлажен)
  51. utils50.cpp, utils50.h – класс для работы с регистром индикации состояния прибора

 

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

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

Утилиту для конвертация ДОС-exe файла в двоичный формат загрузить здесь.

alfserv.h – заголовочный файл с описанием служебной структуры для alf формата. Используется в утилите для конвертации и в программе начального загрузчика для определения размера загружаемого файла. Его можно загрузить здесь.

def386ex.h – заголовочный файл с описанием адресов встроенной периферии процессора Intel 80C386EX. Его можно загрузить здесь.

Замечания к проекту:

  1. При добавлении некоторых заголовков utils*.h наблюдалась неправильная работа транслятора. Особенно, если в заголовках были классы или шаблоны классов с inline функциями-членами.
  2. Процессор работал на частоте 20Мгц.
  3. Загрузка по Xmodem проходила на скорости до 19200 включительно. На больших скоростях загрузка не проходила.

Сайт управляется системой uCoz