Программирование STM8

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Я про что и говорю. Сохраняются виртуальные регистры и выполняется дрочего по сбросу бита регистра статуса который всегда ноль.

Добавлено after 1 minute 31 second:
Щас времени нет. Попробую cosmic, но пока время мое кончилось на проект. Может на следующей неделе.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

Z_h_e, я тоже не пойму этой мастурбации. В SDCC пустой обработчик прерывания выглядит совершенно лаконично:

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

_EXTI_PORTA_IRQHandler:
;	EXTI_PORTA_IRQHandler.c: 53: }
	iret
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Надо будет ещё раз дизассемблер просмотреть. Может я где-то пропустил и все таки компилятор их где-то использует и зря бочку качу. Но действо по сбросу бита 6 СС совсем не ясно. Если я не прав буду, обязательно отпишусь. Сейчас физически не могу перепроверить.

Добавлено after 1 minute 23 seconds:
З.ы. на пустом обработчике тоже ничего не скидывает на стек.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Мудрый кот
Сообщения: 1856
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="Z_h_e",url="/forum/viewtopic.php?p=3683853#p3683853"]Я написал что не используются.[/uquote]
Наверное у Вас какой-то IAR не правильный. :))) Мой IAR_3.10 не сохраняет регистры если они не используются и нет вызовов внешних функций из ISR.
Приведите листинг вашей функции, а то гадать на кофейной гуще можно долго. Именно листинг (.lst-файл), а не исходник.

Добавлено after 4 minutes 33 seconds:
[uquote="Z_h_e",url="/forum/viewtopic.php?p=3683853#p3683853"]Я уже написал на асме обработчик и это решило проблему нехватки времени реакции на внешнее воздействие.[/uquote]
Если Вы написали на асме и оставили там вызов той функции, которая была в си-шном ISR (и из-за которой и сохранялись регистры), то тоже должны сохранить регистры. Иначе наступите потом на грабли за нарушение Calling conventions.
Реклама
Эиком - электронные компоненты и радиодетали
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

Z_h_e, что касается виртуальных регистров (точнее использования первых 256 байт памяти), тут уже больше вопросов к оптимизатору. Насколько разумно переписывать их в стек и обратно, вместо того, чтобы аллоцировать под рабочие переменные место в том же стеке и воспользоваться индексной адресацией от SP? Ни по размеру кода, ни по скорости выполенения разницы не будет. Мне больше по душе логика SDCC, живущего без виртуальных регистров, но размещающего в первых 256 байтах оперативки глобальные статические переменные, что позовяет эффективно обращаться к ним без использования индексных регистров X и Y.
А вот сброс 6-го бита CC меня тоже ввел в недоумение, на всех STM8 (S, AF, AL, L) - он всегда нулевой без вариантов.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Покопаюсь как будет возможность. Надеюсь упрется в банальную какую то хрень которую проглядел, по хорошему так и должно быть. Ну кроме cc, тут по-моему даже представить невозможно зачем сие нужно.

Добавлено after 3 minutes 21 second:
Про наличие виртуальных регистров тоже только в иаре и увидел. Тоже не вижу в них смысла.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Мудрый кот
Сообщения: 1856
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="Z_h_e",url="/forum/viewtopic.php?p=3683976#p3683976"]Ну кроме cc, тут по-моему даже представить невозможно зачем сие нужно.[/uquote]
Надо смотреть errata на все STM8 - возможно там есть ответ на этот вопрос. По-крайней мере вижу, что если внутри ISR отсутствует вызов функций, то и сброс 6-го бита тоже не производится.
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

jcxz, Вы были правы. Но проблема не в функции, а в командах деления и их прерывании.
Unexpected DIV/DIVW instruction result in ISR

Description
In very specific conditions, a DIV/DIVW instruction may return a false result when executed inside an interrupt service routine (ISR). This error occurs when the DIV/DIVW instruction is interrupted and a second interrupt is generated during the execution of the IRET instruction of the first ISR. Under these conditions, the DIV/DIVW instruction executed inside the second ISR, including function calls, may return an unexpected result.The applications that do not use the DIV/DIVW instruction within ISRs are not impacted.

Workaround
If an ISR or a function called by this routine contains a division operation, the following assembly code should be added inside the ISR before the DIV/DIVW instruction:
push cc
pop a
and a,#$BF
push a
pop cc
This sequence should be placed by C compilers at the beginning of the ISR using DIV/DIVW. The user can refer to the compiler documentation for details on the implementation and control of automatic or manual code insertion.
Что интересно, SDCC в этом случае поступает оригинальней, вставляя команду
div x, a
в начале прерывания. Мол, пусть она даст неправильный результат, но это меньше кода и, скорее всего, быстрее, чем последовательность из 5 команд.
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Что ж, надо будет перелопатить обработчик с учётом вышесказанной информации.
Что-то должно улучшиться. Поди на следующей неделе попробую.

Инфа полезная однозначно. Но заданный вопрос остался без ответа. Но скорее всего в иаре нельзя отключить автосохранение вирт регистров.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Мудрый кот
Сообщения: 1856
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="Z_h_e",url="/forum/viewtopic.php?p=3684281#p3684281"]Инфа полезная однозначно. Но заданный вопрос остался без ответа. Но скорее всего в иаре нельзя отключить автосохранение вирт регистров.[/uquote]
И опять за своё... Зачем???? :dont_know:
Ну допустим - отключите, и будут у вас при возникновении прерывания регистры фоновой программы разрушаться. Зачем это??
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

За тем чтобы знать, есть такая возможность в иаре или нет.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Мудрый кот
Сообщения: 1856
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="Z_h_e",url="/forum/viewtopic.php?p=3684349#p3684349"]За тем чтобы знать, есть такая возможность в иаре или нет.[/uquote]
Очевидно что нет, так как бессмысленные вещи, я думаю, они реализовывать не будут.
Родился
Сообщения: 6
Зарегистрирован: Чт апр 07, 2016 09:44:42

Сообщение nuisance »

Доброго времени суток.
Позвольте мяукнуть, надеюсь по теме. Если что модераторы поправят. Возможно есть смысл создать отдельную тему для совсем чайников (типа меня). :)
Тоже хочу погрузиться в мир МК и решил начать с STM8 (+STVD+COSMIC).
При компиляции появляется код ошибки
Спойлер----------- Project discover - STM8 Cosmic - Configuration Debug -------------

Compiling libraries\stm8s_stdperiph_driver\src\stm8s_clk.c...
cxstm8 +mods0 +debug -pxp +compact -pp -l -ilibraries\stm8_touchsensing_driver\inc -ilibraries\stm8s_stdperiph_driver\inc -iinc -i..\..\..\..\libraries\stm8_touchsensing_driver\inc -i..\..\..\..\libraries\stm8s_stdperiph_driver\inc -i..\..\inc -i"..\..\..\..\..\..\..\..\..\program files\stmicroelectronics\st_toolset\include" -i..\..\..\includes -i..\..\..\..\stm8sfwlib\fwlib\library\inc -i..\..\..\..\stm8_ts_lib\includes -i"D:\Program Files (x86)\COSMIC\CXSTM8_32K\Hstm8" -clDebug\ -coDebug\ libraries\stm8s_stdperiph_driver\src\stm8s_clk.c
libraries\stm8s_stdperiph_driver\src\stm8s_clk.c:
WIN execution failed
The command: "cxstm8 +mods0 +debug -pxp +compact -pp -l -ilibraries\stm8_touchsensing_driver\inc -ilibraries\stm8s_stdperiph_driver\inc -iinc -i..\..\..\..\libraries\stm8_touchsensing_driver\inc -i..\..\..\..\libraries\stm8s_stdperiph_driver\inc -i..\..\inc -i"..\..\..\..\..\..\..\..\..\program files\stmicroelectronics\st_toolset\include" -i..\..\..\includes -i..\..\..\..\stm8sfwlib\fwlib\library\inc -i..\..\..\..\stm8_ts_lib\includes -i"D:\Program Files (x86)\COSMIC\CXSTM8_32K\Hstm8" -clDebug\ -coDebug\ libraries\stm8s_stdperiph_driver\src\stm8s_clk.c" has failed, the returned value is: 2
exit code=2.

discover.elf - 1 error(s), 0 warning(s)
Есть желание научиться разбираться с этими кодами (ошибок). Где вообще про них рассказывается? Наверняка есть какой то мануал(ы). А так же интересуют все остальные формы общения с компиляторами (предполагаю,что принцип действия у них одинаковый). Хотелось бы, прежде чем обращаться за конкретными техническими советами, сначала разобраться в теории. Подскажите пожалуйста подходящую литературу (сайты).
Спасибо.
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

[uquote="nuisance",url="/forum/viewtopic.php?p=3720882#p3720882"]Где вообще про них рассказывается?[/uquote]
Обычно в документации к компилятору. Но тут странная ошибка:
WIN execution failed
типа виндовс не может запустить exe файл компилятора (cxstm8.exe).
Cosmic установлен стандартным путем? Т.е. скачан с сайта, установлен, потом запрос лицензии, французы присылают бесплатную лицензию, которую надо указать...
Начать можно было бы с создания простого проекта - в STVD хороший визард создания проекта. Там нужно потом только добавить заголовочный файл от производителя.
Пример, вижу для stm8 touchsensing - вполне возможно надо скачать посвежее версию с родного сайта, у меня Cosmic эти оба примера нормально компилирует:
https://www.st.com/en/embedded-software ... h-lib.html
Друг Кота
Аватара пользователя
Сообщения: 7114
Зарегистрирован: Сб янв 28, 2006 22:47:24

Сообщение Asmodey »

Отмечусь в теме чтобы не потерять.
Астролябия-сама меряет, было бы что мерять!!!
Родился
Сообщения: 6
Зарегистрирован: Чт апр 07, 2016 09:44:42

Сообщение nuisance »

[uquote="oleg110592",url="/forum/viewtopic.php?p=3721014#p3721014"]Cosmic установлен стандартным путем? Т.е. скачан с сайта, установлен, потом запрос лицензии, французы присылают бесплатную лицензию, которую надо указать...[/uquote]
Скачан стандартно. С родного сайта. Лицензия и всё такое... Установлен, не по умолчанию, а по моему усмотрению (в смысле путей установки).
Новые воркспейсы и проекты (пустые) создаёт и компилирует без ошибок.
Но я подумал, что в процессе ковыряния своими кривыми руками (мозгами) обязательно что-нибудь сломаю :) и тогда захочется откатить как было. Вот и скачал с родного сайта демо прогу, которая поставляется с дискавери. Пытаюсь её откомпилировать, чтобы, по мере надобности залить обратно.
В ходе экспериментов понял, что сначала надо освоить рабочую среду. Почитал мануал на Космик, но про ошибку с кодом 2 ничего не нашёл. Понял, что надо копать глубже, а вот где копать не знаю :(
Спасибо за совет. Попробую скачать новую версию заливки. О результатах сообщу.
Но вопрос про теорию остаётся открытым.

Добавлено after 53 minutes 2 seconds:
Скачал. Там приложение для STM8S207K6, а у меня на дискавери стоит STM8S105C6.
Это принципиально?
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

[uquote="nuisance",url="/forum/viewtopic.php?p=3721911#p3721911"]Скачал. Там приложение для STM8S207K6, а у меня на дискавери стоит STM8S105C6.
Это принципиально?[/uquote]
Работать скорее всего не будет, но для проверки правильности компиляции сгодится.
Скачал пример "Project discover" - Cosmic нормально компилирует, без ошибок. Если что, Cosmic установил в корень диска C:\ в папку C:\COSMIC.
Друг Кота
Аватара пользователя
Сообщения: 7114
Зарегистрирован: Сб янв 28, 2006 22:47:24

Сообщение Asmodey »

Как при отладке в IAR в окне кода вывести зеленую стрелочку, указывающую, какая строка программы выполняется после каждого шага? В окошке дизассемблера стрелочка есть, а в окне кода нет.
Астролябия-сама меряет, было бы что мерять!!!
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Нужно скомпилировать с добавлением отладочной информации.
Друг Кота
Аватара пользователя
Сообщения: 7114
Зарегистрирован: Сб янв 28, 2006 22:47:24

Сообщение Asmodey »

Да, действительно, поставил в настройках проекта галку "Generate debug information" и стрелочка появилась :)

VladislavS, благодарю.
Астролябия-сама меряет, было бы что мерять!!!
Ответить

Вернуться в «Разные вопросы по МК»