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

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

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

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

Сообщение _mark.sam_ » 28 апр 2015, 12:03

В теме обсуждаются вопросы, связанные с работой в среде CodeMaster-96 для микроконтроллеров 1874ВЕ96Т, 1874ВЕ7Т и 1874ВЕ8Т.
На сегодняшний день добавлена поддержка отладки для ИС 1874ВЕ7Т через последовательные порты UART и SPI с помощью адаптера JEM-96.
Для ИС 1874ВЕ96Т и 1874ВЕ8Т добавлена поддержка режима отладки в новом JTAG-режиме.
технический специалист АО "НИИЭТ"

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

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

Сообщение xmas » 18 янв 2016, 21:51

Здравствуйте!

В ходе работы со средой Code Master 96 для отладки программ, написанных под 1874ВЕ7Т (1874ВЕ71Т) время от времени выявляются некоторые ошибки, а так же идеи о том, как можно было бы улучшить данную среду.
Хотелось бы понять, насколько Вам интересна такая обратная связь и по каким каналам эту информацию до Вас лучше всего доводить?

На данный момент у меня на рабочей машине стоит набор версий v1.22.00, v1.30.01, v1.31.00, последняя из них была установлена только сегодня.

Пример найденной ошибки:
Сегодня было обнаружено, что две последние из этих версий не поддерживают в режиме симулятора переход на вектор обработчика прерывания после ручной установки соответствующих битов в регистрах INT_MASK и INT_PEND окна Регистры.

Пример пожелания для следующей версии:
Реализуйте пожалуйста поддержку кодировки UTF-8 для файлов исходного текста. Очень больно смотреть на ресурсРпри отладке программ.

Еще нашу команду очень интересует вопрос истории изменения версий. Очень сложно при переходе с одной версии на другую сходу понять что же именно изменилось. Порой некоторые приятные вещи обнаруживаются слишком поздно:) Но особенно хочется понимать, что меняется от версии к версии в макроассемблере и компиляторе. Например, одинаково ли быстры и надежны компиляторы CMC-96 версий 2.00.140209, 2.00.150328 и 2.00.150427 ?

_sva_
Специалист
Сообщения: 202
Зарегистрирован: 12 ноя 2009, 17:42
Откуда: Воронеж
Contact:

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

Сообщение _sva_ » 19 янв 2016, 09:28

xmas писал(а): В ходе работы со средой Code Master 96 для отладки программ, написанных под 1874ВЕ7Т (1874ВЕ71Т) время от времени выявляются некоторые ошибки, а так же идеи о том, как можно было бы улучшить данную среду.
Хотелось бы понять, насколько Вам интересна такая обратная связь и по каким каналам эту информацию до Вас лучше всего доводить?
Обратная связь нам интересна. Данная тема для этого подходит. Пожелания по CodeMaster оперативно поступают команде, которая разрабатывает эту среду.

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

ошибка «СМС-96» при использовании директив #pragma asm

Сообщение tikhonov » 10 мар 2016, 09:06

Обнаружена ошибка компилятора «СМС-96» при использовании директив «#pragma asm …» в подпрограммах.
.
При вызове СИ-функции(«f1()»), содержащей ассемблерные команды в директивах «#pragma asm …» – код всех(!) этих ассемблерных команд повторяется(!!!) - столько раз, сколько раз встречается вызов этой функции («f1()») в коде головной программы(«main()»).
8-((
Пример:

Код: Выделить всё

int aaa=2,bbb=3;
void f1() {
#pragma asm LD  _CX,aaa
#pragma asm SUB _CX,bbb
}
void f2() {
#pragma asm LD  _CX,aaa
#pragma asm SUB _CX,bbb
}
void main()
{
  f1();
  f1();

  f2();
  f2();
  f2();
}
Убедиться в этом можно введя в проект указанный код и нажав закладку "mixed"
функция «f1» вызывается в теле «main» - ДВА раза, а функция «f2» - три раза - и ЕДИНСТВЕННОЕ вычитание, которое должна выполнять каждая из этих функций – зачем-то выполняется в них по ДВА и по ТРИ раза соответственно – вместо одного раза. 8-(((

Используемая мною версия CodeMaster-96:

Âåðñèÿ CodeMaster-96: 1.30.01
Ìèêðîêîíòðîëëåð: K1874BE7T Rev.2

%E0E0FFÏàêåò êîìïèëÿòîðà CMC-96
Àññåìáëåð CMA-96: 2.00.150427
Êîìïèëÿòîð CMC-96: 2.00.150427
Äàìïåð CMDUMP: 1.10.130812
Áèáëèîòåêàðü CMLIB: 1.09.130812
Ëèíêåð CMLINK: 1.13.150427

- насчет шрифтов - тоже странно.
Такой-вот "буфер обмена" 8-)

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

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

Сообщение tikhonov » 10 мар 2016, 09:17

И "насчет шрифтов"...
- Код с комментариями, написанными кириллицей - прекрасно передается через "буфер обмена" из "СМС-96" в "Word".
А вот в обратном направлении - из Word" в "СМС-96" - с вот-такими-вот "кракозябрами"...
(Как в предыдущем посте).
8-((

novikovfb
Сообщения: 16
Зарегистрирован: 01 сен 2011, 15:09

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

Сообщение novikovfb » 10 мар 2016, 10:05

tikhonov писал(а):И "насчет шрифтов"...
- Код с комментариями, написанными кириллицей - прекрасно передается через "буфер обмена" из "СМС-96" в "Word".
А вот в обратном направлении - из Word" в "СМС-96" - с вот-такими-вот "кракозябрами"...
попробуйте в обеих программах сделать текущей русскую раскладку клавиатуры, помогает с не-Unicode программами

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

Re: ошибка «СМС-96» при использовании директив #pragma asm

Сообщение dav » 10 мар 2016, 11:05

tikhonov писал(а):Обнаружена ошибка компилятора «СМС-96» при использовании директив «#pragma asm …» в подпрограммах.
.
При вызове СИ-функции(«f1()»), содержащей ассемблерные команды в директивах «#pragma asm …» – код всех(!) этих ассемблерных команд повторяется(!!!) - столько раз, сколько раз встречается вызов этой функции («f1()») в коде головной программы(«main()»).
8-((
Пример:

Код: Выделить всё

int aaa=2,bbb=3;
void f1() {
#pragma asm LD  _CX,aaa
#pragma asm SUB _CX,bbb
}
void f2() {
#pragma asm LD  _CX,aaa
#pragma asm SUB _CX,bbb
}
void main()
{
  f1();
  f1();

  f2();
  f2();
  f2();
}
Убедиться в этом можно введя в проект указанный код и нажав закладку "mixed"
функция «f1» вызывается в теле «main» - ДВА раза, а функция «f2» - три раза - и ЕДИНСТВЕННОЕ вычитание, которое должна выполнять каждая из этих функций – зачем-то выполняется в них по ДВА и по ТРИ раза соответственно – вместо одного раза. 8-(((
Компилятор формирует код без вызова функций (путем вставки содержимого кода функции) только при включенном режиме оптимизации.
В приведенном примере вызываемые функции содержат по 2 команды, поэтому на этапе оптимизации компилятор принимает решение об inline-подстановке данных функций.
Если необходим именно вызов функции, то есть два пути решения:
1) отключить оптимизацию компилятора (Проект->Настройки активного проекта->Конфигурация->Компилятор->Оптимизация), т.е. установить уровень 0
2) с помощью директивы "#pragma inline -" сообщить компилятору никогда не производить inline-подстановку данной функции.
Следующий код осуществит вызов функций:

Код: Выделить всё

    int aaa=2,bbb=3;
    void f1() {
    #pragma asm LD  _CX,aaa
    #pragma asm SUB _CX,bbb
    }
    void f2() {
    #pragma asm LD  _CX,aaa
    #pragma asm SUB _CX,bbb
    }

    #pragma inline - f1
    #pragma inline - f2
    void main()
    {
      f1();
      f1();

      f2();
      f2();
      f2();
    }

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

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

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

Вы писали...
"...
Компилятор формирует код без вызова функций (путем вставки содержимого кода функции) только при включенном режиме оптимизации.
В приведенном примере вызываемые функции содержат по 2 команды, поэтому на этапе оптимизации компилятор принимает решение об inline-подстановке данных функций.
..."
.
-Если-бы все было именно ТАК - то я-бы абсолютно НЕ ВОЗРАЖАЛ...
Ибо в этом случае - "MIXED"-режим показывал-бы ТРИ ЭКЗЕМПЛЯРА ассемблерного кода ф-ии "ААА()" - В "ГОЛОВНОЙ"(!) программе
.
Объясняю подробнее...
- ЕСЛИ - код Си-функции "void ААА(void){...}" состоит из ТРЕХ "asm"-операторов, которые обозначим: asm_1, asm_2, asm_3
и в "головной" программе эта функция вызывается ДВА раза:
void AAA(void){
asm_1
asm_2
asm_3
}
main(){
AAA();
AAA();
}
- ТОГДА - при "инлайн"(как Вы пишете)-подстановке "MIXED"-режим (по-идее) должен-бы был показать
ДВА экземпляра(!) ИНЛАЙН-подстановки asm-кода ф-ии ААА() - в коде "головной" программы - а именно:
void AAA(void){
asm_1
asm_2
asm_3
}
AAA();
asm_1
asm_2
asm_3
AAA();
asm_1
asm_2
asm_3
.
.
Но В РЕАЛЬНОСТИ - "MIXED"-режим показывает СОВЕРШЕННО ИНУЮ (совершенно дикую!) КАРТИНУ. А именно:
Вместо ДВУХ экземпляров(!) ИНЛАЙН-подстановки asm-кода ф-ии ААА() - в коде "головной" программы(см.выше):
Мы видим УДВАИВАНИЕ(!!) КАЖДОГО(!!!) asm-оператора в коде функции ААА()(см.ниже),
что, согласитесь, совершенно - НЕ ОДНО И ТО ЖЕ...
8-(((
- поскольку в ЭТОМ случае КАЖДЫЙ ВЫЗОВ функции ААА() будет работать СОВЕРШЕННО ИНАЧЕ, чем планировалось...
Так, если оператор "asm1" фунции ААА() - наращивал некую переменную "на 1", то теперь он будет наращивать ее уже "на 2",
а поскольку в "головной" программе ф-ия "AAA() со вздвоенными операторами" - вызывается ДВАЖДЫ
- то итоговое (за два вызова ф-ии ААА()) увеличение переменной будет уже на "на 2", а "на 4"... - почувствуйте разницу.
- И это результат "вздваивания" только ОДНОГО оператора ф-ии ААА(),
и таких asm-операторов в функции ААА() - ТРИ - и "вздваивается" - КАЖДЫЙ(!) ИЗ НИХ :
.
void AAA(void){
asm_1
asm_1

asm_2
asm_2

asm_3
asm_3
}
AAA();
AAA();
.
- и никакой "инлайн"-подстановкой тут, согласитесь, - и "НЕ ПАХНЕТ".
Это прямое ИЗУВЕЧИВАНИЕ исходного алгоритма, указанного программистом.
Причем такое "изувечивание", обойти последствия которого - программисту - НИКАК НЕ УДАСТСЯ.
8-(

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

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

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

Возможно, что объектный/испоолняемый код при этом генерируется "правильный",
но даже если это и так, то-уж в любом случае "MIXED"-листинг программы
генерируется совершенно "дикий" и в лучшем случае - вводящий программиста в заблуждение, близкое к панике.
8-))

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

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

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

И есть еще вопрос.
- В списке примеров проектов - имеется пример "Hello Word".
По описанию, добавленному разработчиками к проекту - этот проект необходимо запускать на Отладочной Плате,
с подключенном к ней по СОМ-кабелю ПЭВМ, с запущенной не ней программой гипертерминала, подключенной на этой СОМ-порт.
.
Все это замечательно и реально работает.
.
Но нет-ли в программном эмуляторе МК 1874ВЕ... ВОЗМОЖНОСТИ эмуляции гипертерминала,
так, чтобы указанный проект можно было выполнять на ПЭВМ - БЕЗ использования ОП.
.
Наличие такой возможности могла-бы резко поднять ценность
такого простого и понятного инструмента - как "Codemaster-96"
для его использования в Отечественных Учебных Программах, обучающих основам программирования
Си+ассемблер+архитектура процессора+организация памяти+организация проекта+методика отладки и тд.
.
- Ведь, к сожалению, ОтладочнаяПлата, как и сам-ваш процессор (в металло-керамике)
- стоит ОЧЕНЬ ДОРОГО даже для Вуза, не говоря уже о школах...
.
А использование "Code-master" в учебных программах - может(теоретически) поднять - и СПРОС на Ваши процессоры
- например всвязи с взрывным ростом интереса к робототехнике

Ответить

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

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

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