Программная среда Code Master 96

Модераторы: gurzzza, pip, _sva_

tikhonov
Сообщения: 31
Зарегистрирован: 10 июл 2015, 15:49

Re: Программная среда Code Master 96

Сообщение tikhonov » 14 мар 2016, 12:48

И еще насчет учебной "робототехнике"
.
В феврале этого года в Воронеже на базе ВГУ прошел РОБОАРТ-2016
(http://roboart.umi.ru/roboartfest/ http://robot.ksdk.ru/news.php).
Этот фестиваль собрал в этом году - В ДВА(!) РАЗА больше участников, чем в прошлом.
Приняло участие: школьников - 837, студентов и преподавателей - 192, представителей различных компаний и предприятий города - 56.
Выставку роботов, соревнования по робототехническим дисциплинам, мастер-классы и другие мероприятия в рамках фестиваля,
посетило 10835 жителей Воронежа! В фестивале приняли участие представители
Воронежской, Липецкой, Белгородской, Волгоградской, Ростовской, Курской, Тамбовской, Челябинской областей и г. Москвы

А представителей НИИЭТ на открытии - просто не было. И это, как мне кажется - не есть правильно...

Ибо - к сожалению - на РОБОФЕСТ - используются в основном "ардуино" с англоязычными оболочками разработки.
.
Как мне кажется, при соответствующей постановке вопроса - НИИЭТ мог-бы занять определенную нишу
в этой области импорто-замещения, выпустив небольшие учебные платы на основе ваших процессоров
- в мини-форм-факторе - типа "discovery",
(http://www.compel.ru/lib/ne/2010/6/4-mi ... 8-s-nulya/)
(http://bsvi.ru/tag/stm32/) - заменив USB-на СОМ...
- И эти платки удобно-бы было использовать как заготовки для реальных проектов
в промышленности и образователном процессе. Не, - ну а вдруг?!
8-)
Ну - и комплектовать их оболочкой CodeMaster с примерами РВ-проектов для РВ-управления.
- да дать рекламу, да выбить инвестиции от районных и/или федеральных властей и минобрнауки...
для внедрения комплектов в школы под курс реальной информатики, а не того Win-дебилизма, который преподают там сейчас
с полным отрывом от основ программирования, когда никто не знает - что такое регистр, память, процессор и поток ввода-вывода.
.
Утопия?

_mark.sam_
Администратор
Сообщения: 41
Зарегистрирован: 12 фев 2015, 11:19

Re: Программная среда Code Master 96

Сообщение _mark.sam_ » 14 июн 2016, 11:08

Ваше пожелание и предложение очень ценно для нас. В настоящее время такое направление прорабатывается.
технический специалист АО "НИИЭТ"

_mark.sam_
Администратор
Сообщения: 41
Зарегистрирован: 12 фев 2015, 11:19

Программная среда Code Master 96

Сообщение _mark.sam_ » 14 июн 2016, 11:11

Доступна новая версия среды Code Master-96. Подробности на http://www.niiet.ru/programming-tools/programming
технический специалист АО "НИИЭТ"

sazonovsv
Сообщения: 48
Зарегистрирован: 02 сен 2014, 15:35

Границы паяти внешнего ПЗУ

Сообщение sazonovsv » 07 окт 2016, 20:44

Пытаюсь задать область внешнего ПЗУ. По умолчанию это диапазон 0х2000-0хFFFF.
В проекте в настройках микроконтроплера в разделе "Физическая память" изменяю нижную границу диапазона.
Компилирую (~200 байт, рабочий !!!!) проект и получаю сообщение о фатальной ошибке:
Линковка:
Fatal[L27]: No free room in address space 'CODE' for segment '??STD_LOC_SEG'

Это происходит при задании любого значения нижней границы памяти для кода, отличного от 0х2000.
Проверены значения 0х2010, 0х2018, 0х2080, 0х3000.
При изменении верхней границы диапазона ошибок нет.
Что я делаю неправильно?

xmas
Сообщения: 7
Зарегистрирован: 28 окт 2014, 14:52

Re: Программная среда Code Master 96

Сообщение xmas » 08 окт 2016, 13:13

Согласно описанию кода ошибки L27:
Fatal L27 No free room in address space <addr_space> for segment <seg>

Линкер не может разместить сегмент seg в допустимом диапазоне адресов для адресного пространства addr_space. Например, допустимое пространство уже использовано для размещения других перемещаемых сегментов, так что перемещаемый сегмент seg не может быть размещен; или адреса абсолютных сегментов находятся вне диапазона адресов соответствующего адресного пространства. В смешанных C/ассемблерных проектах рекомендуется по возможности использовать для передачи значений от одной функции к другой не статические переменные, которые занимают память все время выполнения программы, а параметры функций.
Предположу, что вы столкнулись именно с:
адреса абсолютных сегментов находятся вне диапазона адресов соответствующего адресного пространства
Сообщение об ошибке возникает потому, что сегмент '??STD_LOC_SEG' - это сегмент стандартной библиотеки, который размещается по абсолютным адресам, например, 0x2000. Задав нижнюю границу 0x3000, Вы задаете нижнюю границу для адресного пространства 'CODE' 0x3000, а линкеру при этом в стандартной библиотеке явно указано разместить сегмент '??STD_LOC_SEG' по адресам, которые теперь в пространство 'CODE' не входят.


Теперь к самому вопросу.
Пытаюсь задать область внешнего ПЗУ. По умолчанию это диапазон 0х2000-0хFFFF.
В проекте в настройках микроконтроплера в разделе "Физическая память" изменяю нижную границу диапазона.
На примере МК 1874ВЕ7Т могу сказать, что размещение по адресам 0x2000 жизненно важно для корректной работы программы. В качестве аргумента таблица из технического описания:
Т аб л и ц а 5.2 – Назначение ячеек памяти специального назначения
Назначение Диапазон адресов
Младшие векторы прерываний 2000h – 2013h
Байт конфигурации кристалла CCB 2018h
Старшие векторы прерываний 2030h – 203Fh
Векторы прерываний PTS 2040h – 205Dh
Вектор прерывания DEBUG 2060h
Векторы прерываний общего назначения 2062h – 207Fh, 205Eh – 205Fh, 2019h – 202Fh, 2014h – 2017h
Конечно согласно тому же техническому описанию для МК реализована дополнительная возможность:
После сброса микроконтроллера выполнение программы начинается с адреса,
загружаемого в счетчик команд. По умолчанию значение адреса – 2080h.
Кроме этого, реализована возможность старта программы с адреса 9000h. Для этого
во время сброса микроконтроллера следует удерживать на выводе VPR низкий уровень
сигнала.
Но мне с этим работать не приходилось.

sazonovsv
Сообщения: 48
Зарегистрирован: 02 сен 2014, 15:35

Re: Границы паvяти внешнего ПЗУ

Сообщение sazonovsv » 11 окт 2016, 18:36

xmas писал(а):Согласно описанию кода ошибки L27:
Fatal L27 No free room in address space <addr_space> for segment <seg>

Линкер не может разместить сегмент seg в допустимом диапазоне адресов для адресного пространства addr_space. Например, допустимое пространство уже использовано для размещения других перемещаемых сегментов, так что перемещаемый сегмент seg не может быть размещен; или адреса абсолютных сегментов находятся вне диапазона адресов соответствующего адресного пространства. В смешанных C/ассемблерных проектах рекомендуется по возможности использовать для передачи значений от одной функции к другой не статические переменные, которые занимают память все время выполнения программы, а параметры функций.
Предположу, что вы столкнулись именно с:
адреса абсолютных сегментов находятся вне диапазона адресов соответствующего адресного пространства
Сообщение об ошибке возникает потому, что сегмент '??STD_LOC_SEG' - это сегмент стандартной библиотеки, который размещается по абсолютным адресам, например, 0x2000. Задав нижнюю границу 0x3000, Вы задаете нижнюю границу для адресного пространства 'CODE' 0x3000, а линкеру при этом в стандартной библиотеке явно указано разместить сегмент '??STD_LOC_SEG' по адресам, которые теперь в пространство 'CODE' не входят.
Здравствуйте!
Ответ не совсем понятен или совсем не понятен)
1) программа только на С. Два цикла обращения к внешней памяти и счетчик до 100000. Стандартные библиотеки не используются. Файлы прилагаются.
2) Аргумент из Тех.Описания (таблица 5.2) не проходит, т.к. речь идет о сегменте CODE, а не о сегменте DATA, который размещается в ОЗУ.
3) И ссылаясь на Тех.Описание – первый адрес программы -0х2080, адреса от 0х0000 до 0х1FFF не доступны, логично не использовать адреса от 0х2000 до 0х207F. Разве не так?
4) Если всё дело в линкере, то можно ли каким-либо способом самому указать линкеру стартовый адрес размещения библиотеки ?
Вложения
Proba.zip
(559 байт) 48 скачиваний

xmas
Сообщения: 7
Зарегистрирован: 28 окт 2014, 14:52

Re: Программная среда Code Master 96

Сообщение xmas » 11 окт 2016, 18:55

Здравствуйте)
Я не представитель компании. Просто решил поделиться соображениями. Возможно я в чем-то заблуждаюсь.

Вы используете стандартные библиотеки, просто не подозреваете об этом:) Чтобы их не использовать, надо проделать очень серьезную работу. Как минимум на ассемблере:
1) задать значение регистра CCR микроконтроллера
2) проинициализировать вектора прерываний
3) написать код по сохранению и восстановлению контекста при входе в обработчики прерываний
4) явно указать точку старта программы
5) очистить стек
6) инициализировать секции bss и data (сегмент DATA)
7) передать управление на Си код main()
Кроме этого надо отказаться от среды CodeMaster, написать свой makefile и напрямую использовать макроассемблер, компилятор и линкер.

Ваша программа начинает свою жизнь где-то на 7-ом пункте.

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

sazonovsv
Сообщения: 48
Зарегистрирован: 02 сен 2014, 15:35

Re: Программная среда Code Master 96

Сообщение sazonovsv » 12 окт 2016, 18:01

xmas писал(а):Здравствуйте)
Я не представитель компании. Просто решил поделиться соображениями. Возможно я в чем-то заблуждаюсь.

В целом же предлагаю не гадать, а подождать официального ответа, особенно если для вас действительно важно иметь возможность по размещению кода программы, нижняя граница которого будет выше 0x2000.
Здравствуйте, добрый самаритянин)
Был введен в заблуждение и считал, что Вы представитель компании.
Поэтому двойное спасибо за участие, но мне кажется, что в некоторых пунктах Вы ошибаетесь))
К сожалению, официального ответа пока нет, может надо в иную ветку писать?

dav
Сообщения: 45
Зарегистрирован: 14 дек 2015, 09:21
Предприятие: АО НИИЭТ
Откуда: АО НИИЭТ, Воронеж

Re: Программная среда Code Master 96

Сообщение dav » 13 окт 2016, 15:53

sazonovsv писал(а): Здравствуйте, добрый самаритянин)
Был введен в заблуждение и считал, что Вы представитель компании.
Поэтому двойное спасибо за участие, но мне кажется, что в некоторых пунктах Вы ошибаетесь))
К сожалению, официального ответа пока нет, может надо в иную ветку писать?
Доброго времени суток!

1) Область ВНЕШНЕЙ памяти в диапазоне 0x2000 - 0x207F является необходимой для работы микроконтроллера, а именно:

0x2018 - 0x2019 -> Байт конфигурации кристалла CCB
(0x2000 - 0x200F), (0x2030 - 0x203F) - вектора прерывания INT0 - INT15
(0x2040 - 0x205D) - вектора прерывания PTS для INT0 - INT15
(0x2010 - 0x2011) - вектор прерывания SWTRAP (INT17)
(0x2012 - 0x2013) - вектор прерывания неподдерживаемого кода команды UNIOPCODE (INT18)
(0x2060 - 0x2061) - вектор прерывания модуля отладки INT16

2) Теперь рассмотрим какие диапазоны необходимы линкеру CodeMaster-96:
0x2018 - 0x2019 -> Байт конфигурации кристалла CCB
По адресам векторов прерывания, которые не задействованы в программе, CodeMaster-96 записывает адреса расположения программ - заглушек размером 3 байта "FA27FE" - 2 команды DI и SJMP (переход на себя - зацикливание)
Далее с адреса 0x2080 располагается неперемещаемый сегмент ??STD_LOC_SEG. Его размер зависит от выбранного микроконтроллера - с отладочным монитором ("... with Debug Monitor") или без (в этом случае возможна отладка по JTAG).
- если выбран микроконтроллер с отладочным монитором, то размер сегмента ??STD_LOC_SEG составит 12 байт. В этом случае размещается обработчик выбора перехода на выполнение кода отладочного монитора или на выполнение кода программы пользователя (функции main())
2080 LDB 1Ah,IOPORT0
2083 JBS 1Ah,6,2089h - проверка состояния входа P0.6
2086 LJMP ?DBG_MON_START
2089 LJMP ?START
- если выбран микроконтроллер без отладочного монитора, то размер сегмента ??STD_LOC_SEG составит 3 байта и будет содержать только команду перехода на метку ?START (функции main()): LJMP ?START

3) Если мы хотим разместить проект по альтернативному адресу 9000h, то достаточно в окне опций проекта ->Кофигурация: Debug -> Распределение памяти изменить адреса диапазона "Default": 0x2000 - 0x2082 (для микроконтроллера без отладочного монитора) или 0x2000 - 0x208B (для микроконтроллера с отладочным монитором).
Далее добавить новый диапазон с адресами 0x9000 - 0xFFFF

4) Теперь рассмотрим начальный момент работы контроллера после выхода из режима сброса:
- в момент выхода из сброса (по переднему фронту сигнала Reset) происходит захват конфигурации стартового адреса в зависимости от сигнала VPP (при VPP=1 - стартовый адрес 0x2080, при VPP=0 - стартовый адрес 0x9000)
- далее контроллер выставляет адрес 0x2018 и считывает конфигурацию CCB
- после этого в зависимости от комбинации стартового адреса, захваченной при выходе из состояния сброса, контроллер начинает осуществлять выборку команд
- если сформировался запрос на прерывание (от периферии или ядра) и соответствующее прерывание не маскировано в регистрах INT_MASK, INT_MASK1 - контроллер считывает адрес вектора прерывания из внешней памяти из соответствующего адреса и переходит на обработку прерывания.

sazonovsv
Сообщения: 48
Зарегистрирован: 02 сен 2014, 15:35

Выход из отладки под эмулятором

Сообщение sazonovsv » 19 окт 2016, 17:08

Здравствуйте!
Спасибо за обстоятельный ответ о диапазоне адресов Внешней памяти.
А теперь простите за дурацкий вопрос: как цивильно останавливать отладку под эмулятором, чтобы выйти из неё обратно в редактирование и компиляцию проекта. У меня получается почему-то только выключением CodeMastera

Ответить

Вернуться в «Микроконтроллеры семейства MCS-96»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость