Программная среда Code Master 96
Модераторы: ea, Alis, pip, gurzzza, _sva_
-
- Администратор
- Сообщения: 40
- Зарегистрирован: 12 фев 2015, 11:19
Программная среда Code Master 96
В теме обсуждаются вопросы, связанные с работой в среде CodeMaster-96 для микроконтроллеров 1874ВЕ96Т, 1874ВЕ7Т и 1874ВЕ8Т.
На сегодняшний день добавлена поддержка отладки для ИС 1874ВЕ7Т через последовательные порты UART и SPI с помощью адаптера JEM-96.
Для ИС 1874ВЕ96Т и 1874ВЕ8Т добавлена поддержка режима отладки в новом JTAG-режиме.
На сегодняшний день добавлена поддержка отладки для ИС 1874ВЕ7Т через последовательные порты UART и SPI с помощью адаптера JEM-96.
Для ИС 1874ВЕ96Т и 1874ВЕ8Т добавлена поддержка режима отладки в новом JTAG-режиме.
технический специалист АО "НИИЭТ"
Re: Программная среда Code Master 96
Здравствуйте!
В ходе работы со средой 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 ?
В ходе работы со средой 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 ?
-
- Специалист
- Сообщения: 208
- Зарегистрирован: 12 ноя 2009, 17:42
- Откуда: Воронеж
- Контактная информация:
Re: Программная среда Code Master 96
Обратная связь нам интересна. Данная тема для этого подходит. Пожелания по CodeMaster оперативно поступают команде, которая разрабатывает эту среду.xmas писал(а): В ходе работы со средой Code Master 96 для отладки программ, написанных под 1874ВЕ7Т (1874ВЕ71Т) время от времени выявляются некоторые ошибки, а так же идеи о том, как можно было бы улучшить данную среду.
Хотелось бы понять, насколько Вам интересна такая обратная связь и по каким каналам эту информацию до Вас лучше всего доводить?
ошибка «СМС-96» при использовании директив #pragma asm
Обнаружена ошибка компилятора «СМС-96» при использовании директив «#pragma asm …» в подпрограммах.
.
При вызове СИ-функции(«f1()»), содержащей ассемблерные команды в директивах «#pragma asm …» – код всех(!) этих ассемблерных команд повторяется(!!!) - столько раз, сколько раз встречается вызов этой функции («f1()») в коде головной программы(«main()»).
8-((
Пример:
Убедиться в этом можно введя в проект указанный код и нажав закладку "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
- насчет шрифтов - тоже странно.
Такой-вот "буфер обмена"
.
При вызове СИ-функции(«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();
}
функция «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
- насчет шрифтов - тоже странно.
Такой-вот "буфер обмена"

Re: Программная среда Code Master 96
И "насчет шрифтов"...
- Код с комментариями, написанными кириллицей - прекрасно передается через "буфер обмена" из "СМС-96" в "Word".
А вот в обратном направлении - из Word" в "СМС-96" - с вот-такими-вот "кракозябрами"...
(Как в предыдущем посте).
8-((
- Код с комментариями, написанными кириллицей - прекрасно передается через "буфер обмена" из "СМС-96" в "Word".
А вот в обратном направлении - из Word" в "СМС-96" - с вот-такими-вот "кракозябрами"...
(Как в предыдущем посте).
8-((
Re: Программная среда Code Master 96
попробуйте в обеих программах сделать текущей русскую раскладку клавиатуры, помогает с не-Unicode программамиtikhonov писал(а):И "насчет шрифтов"...
- Код с комментариями, написанными кириллицей - прекрасно передается через "буфер обмена" из "СМС-96" в "Word".
А вот в обратном направлении - из Word" в "СМС-96" - с вот-такими-вот "кракозябрами"...
-
- Сообщения: 168
- Зарегистрирован: 14 дек 2015, 09:21
- Предприятие: АО НИИЭТ
- Откуда: АО НИИЭТ, Воронеж
Re: ошибка «СМС-96» при использовании директив #pragma asm
Компилятор формирует код без вызова функций (путем вставки содержимого кода функции) только при включенном режиме оптимизации.tikhonov писал(а):Обнаружена ошибка компилятора «СМС-96» при использовании директив «#pragma asm …» в подпрограммах.
.
При вызове СИ-функции(«f1()»), содержащей ассемблерные команды в директивах «#pragma asm …» – код всех(!) этих ассемблерных команд повторяется(!!!) - столько раз, сколько раз встречается вызов этой функции («f1()») в коде головной программы(«main()»).
8-((
Пример:Убедиться в этом можно введя в проект указанный код и нажав закладку "mixed"Код: Выделить всё
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(); }
функция «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();
}
Re: Программная среда Code Master 96
Вы писали...
"...
Компилятор формирует код без вызова функций (путем вставки содержимого кода функции) только при включенном режиме оптимизации.
В приведенном примере вызываемые функции содержат по 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-(
"...
Компилятор формирует код без вызова функций (путем вставки содержимого кода функции) только при включенном режиме оптимизации.
В приведенном примере вызываемые функции содержат по 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-(
Re: Программная среда Code Master 96
Возможно, что объектный/испоолняемый код при этом генерируется "правильный",
но даже если это и так, то-уж в любом случае "MIXED"-листинг программы
генерируется совершенно "дикий" и в лучшем случае - вводящий программиста в заблуждение, близкое к панике.
)
но даже если это и так, то-уж в любом случае "MIXED"-листинг программы
генерируется совершенно "дикий" и в лучшем случае - вводящий программиста в заблуждение, близкое к панике.

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