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

 
 
> Как сделать IJMP внутри программы на Си?
hakimulla
сообщение Mar 28 2012, 18:50
Сообщение #1





Группа: Новичок
Сообщений: 2
Регистрация: 4-01-11
Пользователь №: 62 006



Объясните, пожалуйста, как оформить индексный переход IJMP в программе
на Си.
Можно ли как-нибудь прочитать значение Program Counter (PC) для
AT90USB162?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Д_М
сообщение Aug 8 2012, 19:22
Сообщение #2


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

Группа: Участник
Сообщений: 121
Регистрация: 15-04-05
Из: Краснодар
Пользователь №: 4 185



Не надо использовать IJMP, так как это грубо и вульгарно,
особенно с точки зрения программирования на С.
Используйте ICALL
void (*ptr)(void);//объявление пременной типа указатель на фунцию типа void
(*ptr)();//вызов функции типа void косвенно, через адрес в перенной

А лучше оформить массив с адресами функций
__flash void (*hnd_I2C_steps [])(void) = {I2C_step_0, I2C_step_1, I2C_step_2,
I2C_step_3, I2C_step_4, I2C_step_5};

(*hnd_I2C_steps [I2C_step])();
Go to the top of the page
 
+Quote Post
ReAl
сообщение Aug 9 2012, 06:34
Сообщение #3


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(Д_М @ Aug 8 2012, 22:22) *
Не надо использовать IJMP, так как это грубо и вульгарно,
(*ptr)();//вызов функции типа void косвенно, через адрес в перенной
(*hnd_I2C_steps [I2C_step])();

По стандарту достаточно писать
Код
ptr();
hnd_I2C_steps[I2Cstep]();


А GNU-тые адреса меток и goto *ptr; отлично используются в соответствующей реализации protothreads.
И ничуть это не вульгарнее, чем адреса функций.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
Maik-vs
сообщение Aug 10 2012, 04:40
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101



Не вижу, чем ijmp отличается от goto?
ну хорошо, goto (label+index)

"IJMP: ...jump to the address pointed to by the Z pointer register ..."

Сообщение отредактировал Maik-vs - Aug 10 2012, 04:43
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- hakimulla   Как сделать IJMP внутри программы на Си?   Mar 28 2012, 18:50
- - _Артём_   Цитата(hakimulla @ Mar 28 2012, 21:50) Об...   Mar 28 2012, 19:27
|- - hakimulla   Цитата(_Артём_ @ Mar 28 2012, 22:27) Заче...   Mar 29 2012, 06:26
|- - Сергей Борщ   QUOTE (hakimulla @ Mar 29 2012, 09:26) Дл...   Mar 29 2012, 07:06
||- - ReAl   Цитата(Сергей Борщ @ Mar 29 2012, 10:06) ...   Mar 29 2012, 18:49
|- - =GM=   Цитата(hakimulla @ Mar 29 2012, 05:26) Дл...   Mar 29 2012, 09:20
|- - kolobok0   Цитата(hakimulla @ Mar 29 2012, 10:26) .....   Aug 9 2012, 06:18
- - hd44780   Цитата(hakimulla @ Mar 28 2012, 21:50) Об...   Mar 29 2012, 05:49
- - -SANYCH-   На языке С джампы можно сделать с помощью "go...   Mar 29 2012, 06:19
- - Alex11   Или поставьте параллельно ассемблерные метки: asm(...   Mar 29 2012, 15:23
- - prottoss   Вообще конечно это муть полная. Оптимизировать нуж...   Mar 29 2012, 16:54
- - alexeyv   В стандартной библиотеке Си есть файл setjmp.h, об...   Apr 3 2012, 02:59
- - Navovvol   нужно просто избавиться от злого _delay_ms(...);   Apr 3 2012, 13:00
|- - _Pasha   Цитата(Navovvol @ Apr 3 2012, 16:00) нужн...   Apr 5 2012, 13:40
- - kolobok0   Цитата(Maik-vs @ Aug 10 2012, 08:40)...   Aug 10 2012, 06:16


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

 


RSS Текстовая версия Сейчас: 26th June 2025 - 08:53
Рейтинг@Mail.ru


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