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

 
 
> использование пойнтера в прерывании, нуждаюсь в помощи
1921
сообщение Sep 29 2010, 12:56
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 29-09-10
Пользователь №: 59 820



Товарищи!
Подскажите, как можно в прерывании использовать ссылку на строку. В качестве входного параметра не получается - в С прерывания не имеют параметров.
Хотелось бы, чтобы работало примерно так: вызывается подпрограмма с входными параметрами void Prog1(char *P). Она настраивает чего-то и разрешает прерывания от UART. UART по прерываниям получает данные, которые должны складываться в String, на которую указывает P. Вопрос: как мне указать в обработчике прерывания эту вот ссылку? Что-то ничего у меня не получается...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MrYuran
сообщение Sep 29 2010, 12:58
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



В модуле с функциями для UART объявляете нужный указатель, с которым потом работает обработчик прерываний.
Ваша Prog1() заносит туда нужный адрес, в который сохраняется строка.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
1921
сообщение Sep 29 2010, 13:01
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 29-09-10
Пользователь №: 59 820



Цитата(MrYuran @ Sep 29 2010, 15:58) *
static переменная?

Это как? Я пока до таких высот не дошёл.
Go to the top of the page
 
+Quote Post
1921
сообщение Sep 29 2010, 13:09
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 29-09-10
Пользователь №: 59 820



Или подскажите, что вообще можно сделать с пойнтером. Как положить его значение в int и как произвольный int сделать пойнтером. Как-то в ассемблере с этим было попроще.
Go to the top of the page
 
+Quote Post
1921
сообщение Sep 29 2010, 13:20
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 29-09-10
Пользователь №: 59 820



что не получается: Пойнтер *P объявлен глобально, но создаётся впечатление, что при выходе из подпрограмма void Prog(char *P) он разрушается, т.к. из другой подпрограммы (в данном случае из обработчика прерывания) он не виден. Чисто теоретически это выглядит так: все операции с *P, типа *(P+i), P[i] внутри процедуры транслируются в команды косвенной адресации без сохранения значения пойнтера в каком-либо регистре. И я никак не могу сохранить или получить адрес String в глобальную переменную типа int, которую внутри прерывания можно было бы (если вообще можно?) использовать как пойнтер.

Имеется ввиду, можно ли сделать что-то типа
int k;
chap *P;
k=P;
....
char i=*k

Сообщение отредактировал 1921 - Sep 29 2010, 13:25
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 1921   использование пойнтера в прерывании   Sep 29 2010, 12:56
|- - MrYuran   Цитата(1921 @ Sep 29 2010, 17:01) Это как...   Sep 29 2010, 13:08
|- - MrYuran   Цитата(1921 @ Sep 29 2010, 17:09) Или под...   Sep 29 2010, 13:18
||- - MrYuran   Цитата(1921 @ Sep 29 2010, 17:20) Чисто т...   Sep 29 2010, 13:25
||- - MrYuran   Цитата(1921 @ Sep 29 2010, 17:20) Имеется...   Sep 29 2010, 13:30
||- - 1921   Можно, конечно, вывернуться через ж.. и написать k...   Sep 29 2010, 13:39
||- - MrYuran   Цитата(1921 @ Sep 29 2010, 17:39) k=P иде...   Sep 29 2010, 13:56
||- - Hoksmur   Попробуйте задействовать модификатор volatile- дол...   Oct 26 2010, 07:58
|- - 1921   Я просто по пикам помню, там пойнтеры лежали в опр...   Sep 29 2010, 13:28
- - rezident   Я видимо как-то слабо улавливаю проблему, но если ...   Sep 29 2010, 13:53
- - ih_   Цитата...Неужели нет никакой возможности получить ...   Oct 26 2010, 13:10
- - Hoksmur   Цитата(ih_ @ Oct 26 2010, 21:10) поинтер ...   Oct 27 2010, 02:37
- - Сергей Борщ   Цитата(Hoksmur @ Oct 27 2010, 05:37) Я хо...   Oct 27 2010, 08:22


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

 


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


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