реклама на сайте
подробности

 
 
> ищу исходники intrinsic-функций IAR EW430, __bic_SR_register и __bic_SR_register_on_exit
sensor_ua
сообщение Jul 3 2008, 20:11
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



сабж.
остальные, думаю, аналогичны.
поискал в инклюдах полеченной EV-версии - не нашёл, гагль кучу мусора выдал, ну и варианты якобы аналогичных функций от mspgcc, CW. Хотелось бы посмотреть на вариант от IAR


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sensor_ua
сообщение Jul 4 2008, 07:11
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Криворукость нашлась. Но всё-равно хотелось бы хотя бы знать следующее - __bic_SR_register() делается с тупым запрещением/разрешением прерываний или через сохранение статуса, ну а __bic_SR_register_on_exit() просто не трогает GIE или как, "встраивается" в эпилог и её нужно использовать перед самым выходом или может вызываться в любом месте обработчика прерывания, или просто в любой критической секции (при уже запрещённых прерываниях)


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 4 2008, 07:47
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(sensor_ua @ Jul 4 2008, 10:11) *
__bic_SR_register() делается с тупым запрещением/разрешением прерываний или через сохранение статуса
Как вы себе это представляете? GIE живет в этом же регистре SR. Если я понимаю правильно, то __bic_SR_register(x) компилится в (к сожалению, проверить сейчас не на чем):
Код
    bic #x, SR;если х - константа

    mov &val, Rx
    bic Rx, SR; если х - переменная.
Где тут запрещать прерывания?

Цитата(sensor_ua @ Jul 4 2008, 10:11) *
, ну а __bic_SR_register_on_exit() просто не трогает GIE или как, "встраивается" в эпилог и её нужно использовать перед самым выходом или может вызываться в любом месте обработчика прерывания, или просто в любой критической секции (при уже запрещённых прерываниях)
А разве она встраивается не в точку использования? В точке использования компилятор знает, сколько байтов он положил на стек в процессе выполнения обработчика. Например, 4. Тогда __bic_SR_register_on_exit(х) выливается в bic #x, 4(SP). При выходе из прерывания на исполнении RETI это "подправленное" значение будет загружено в SR. Тут тоже запрещать прерывания негде.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 04:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01321 секунд с 7
ELECTRONIX ©2004-2016