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

 
 
> Как прочитать регистр из прогаммы на С, Максимально просто
b-volkov
сообщение Dec 9 2011, 12:35
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 137
Регистрация: 10-04-07
Из: г. Троицк
Пользователь №: 26 907



Надо переписать значение R14 в некую глобальную переменную. Можно это сделать строкой онлайн-ассемблера и какой? В ассемблере не силен, прпробовал поподбирать сам - не вышло.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vvppvv
сообщение Mar 9 2012, 06:22
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 3-07-05
Пользователь №: 6 485



Цитата(b-volkov @ Dec 9 2011, 16:35) *
Надо переписать значение R14 в некую глобальную переменную. Можно это сделать строкой онлайн-ассемблера и какой? В ассемблере не силен, прпробовал поподбирать сам - не вышло.


Сделать функцию, например:
Код
#pragma inline = forced
char cGetReg_R8 (void) {asm("mov  r16, r8");}


Использовать как обычно, например, вывести R8 в порт А:

Код
    212            PORTA = cGetReg_R8();
   \   00000000   2D08               mov  r16, r8
   \   00000002   BB0B               OUT     0x1B, R16


Просто и лаконично. Хотя компилятор вполне обоснованно ругается, что в функции отсутствует Return :-))

Если нужен именно 14 регистр, то заменить в функции R8 на R14 wink.gif
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 19 2012, 20:55
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



vvppvv

Попробовал по вышесказанному:
Код
volatile unsigned short SavedR2021;
#pragma inline = forced
unsigned short cGetReg_R2021(void) {
    asm("mov  r16, r20");
    asm("mov  r17, r21");
}
#pragma inline = forced
void cSetR2021(unsigned short new_value) {
    asm("mov  r20, r16");
    asm("mov  r21, r17");
}
int main()
{
    SavedR2021=cGetReg_R2021();
    PORTA^=0x11;
    PORTE=0x23;
    cSetR2021(SavedR2021+0xA5);
    PORTA^=0x11;
    TCCR0=5;
    TIMSK|=(1<<TOIE0);
    PORTE=0x23;
    cSetR2021(SavedR2021);
    .....


В SavedR2021 значение считывается, но строка
Код
cSetR2021(SavedR2021+0xA5);

не выполнилась (не увидел в дизассемблере ожидаемого значения).

То есть метод частично нерабочий?
Или где-то ошибка?

Сообщение отредактировал IgorKossak - Mar 20 2012, 14:22
Причина редактирования: Бездумное цитирование
Go to the top of the page
 
+Quote Post
Палыч
сообщение Mar 20 2012, 07:14
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(_Артём_ @ Mar 20 2012, 00:55) *
То есть метод частично нерабочий?
Или где-то ошибка?

Если уж дурить транслятор/оптимизатор, то - с умом:
Код
void cSetR2021(volatile unsigned short new_value) {
    asm("mov  r20, r16");
    asm("mov  r21, r17");
}

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- b-volkov   Как прочитать регистр из прогаммы на С   Dec 9 2011, 12:35
- - Палыч   Примерно так: Кодchar X; ......... asm("ST...   Dec 9 2011, 17:20
- - KRS   Цитата(b-volkov @ Dec 9 2011, 16:35)...   Dec 13 2011, 21:29
- - usav   b-volkov: Надо переписать значение R14 -----------...   Dec 14 2011, 17:24
- - _Артём_   Палыч Другое дело. Цитата(Палыч @ Mar 20 20...   Mar 20 2012, 09:41
- - _Артём_   Помогло но не совсем: Код#pragma inline = forced ...   Mar 20 2012, 14:21
- - Палыч   Цитата(_Артём_ @ Mar 20 2012, 18:21) Там ...   Mar 20 2012, 15:29
- - _Артём_   Цитата(Палыч @ Mar 20 2012, 17:29) ...   Mar 20 2012, 17:06
- - Палыч   Цитата(_Артём_ @ Mar 20 2012, 21:06) Ну п...   Mar 21 2012, 06:23
- - _Артём_   Цитата(Палыч @ Mar 21 2012, 08:23) Вы дол...   Mar 21 2012, 13:28
- - Сергей Борщ   QUOTE (_Артём_ @ Mar 21 2012, 15:28) Но и...   Mar 21 2012, 15:03
- - _Артём_   Цитата(Сергей Борщ @ Mar 21 2012, 17:03) ...   Mar 21 2012, 17:23
- - KRS   Цитата(Сергей Борщ @ Mar 21 2012, 19:03) ...   Mar 21 2012, 17:42
- - _Артём_   Цитата(KRS @ Mar 21 2012, 19:42) в послед...   Mar 21 2012, 18:07
- - KRS   Цитата(_Артём_ @ Mar 21 2012, 22:07) В 6-...   Mar 22 2012, 11:50


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

 


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


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