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

 
 
> использование пойнтера в прерывании, нуждаюсь в помощи
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
Ответов
ih_
сообщение Oct 26 2010, 13:10
Сообщение #2


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

Группа: Свой
Сообщений: 77
Регистрация: 2-04-08
Из: Россия, Киров
Пользователь №: 36 422



Цитата
...Неужели нет никакой возможности получить сам адрес той строки, на которую ссылается пойнтер...
поинтер и есть переменная, содержащая адрес
Код
// Работа #0 - "Инициализация"
typedef        unsigned char        byte;
// можно так
byte    myString[]="My string\n"; // это Ваша строка
// или так
byte    bigString[20]="My bigest string\n";    // и это Ваша строка больше

//typedef byte* pStr;
// это указатель на строку 'myString'
byte*        pMyString; // здесь мы будем хранить адрес строки 'myString'
// а это указатель на строку 'bigString'
byte*    pBigString;  // а здесь  адрес строки 'bigString'
// как Вы поняли размеры указателей одинаковы, и не зависят от длин строк

/ Теперь работа #1 - "Инициализация (поручение адресов переменных) указателей"
// получаем адрес строки 'mystring'
pMyString=&myString[0];    // обратите внимание на амперсанд (& - это амперсанд, оператор взятия адреса)
// получаем адрес строки 'bigString'
pBigString=&bigString[0]; // значение номера элемента массива может быть и не нулевым

// Теперь работа #2 - "Копирование указателей"
// получаем адрес пятого символа в строке 'bigString'
pBigString=&bigString[4];
// присваиваем указатель указателю
pMyString=pBigString; // теперь они оба являются одинаковыми ссылками на одну и туже строку 'igest string\n'

// Теперь работа #3 - "Присвоение значение через указатель"
// сначала берем адрес - это уже Вы умеете
pMyString=&myString[6];
// затем  присваиваем значение переменной, ссылкой на которую - есть указатель
*pMyString='O'; // теперь переменная 'mуString' содержит 'My strOng'
// обратите внимание на звездочку (* - звездочка, оператор взятия значения)
// а теперь присваиваем значению одной переменной, значение другой.
*pMyString=*pBigString;// Теперь  переменная 'mуString' снова содержит 'My string'

// Выводы:
// - все четыре примера это была относительная адресация, а пример от rezident, это косвенная адресация;
// - Си - это высокоуровневый ассемблер (при хорошем компиляторе :) ), только нужно немного перестроиться;

// Желаю настойчивости и удачи, тогда успех Вас не покинет! :);


Сообщение отредактировал ih_ - Oct 26 2010, 13:23
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 1921   использование пойнтера в прерывании   Sep 29 2010, 12:56
- - MrYuran   В модуле с функциями для UART объявляете нужный ук...   Sep 29 2010, 12:58
|- - 1921   Цитата(MrYuran @ Sep 29 2010, 15:58) stat...   Sep 29 2010, 13:01
|- - MrYuran   Цитата(1921 @ Sep 29 2010, 17:01) Это как...   Sep 29 2010, 13:08
|- - 1921   Или подскажите, что вообще можно сделать с пойнтер...   Sep 29 2010, 13:09
|- - MrYuran   Цитата(1921 @ Sep 29 2010, 17:09) Или под...   Sep 29 2010, 13:18
|- - 1921   что не получается: Пойнтер *P объявлен глобально, ...   Sep 29 2010, 13:20
||- - 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
- - 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 Текстовая версия Сейчас: 11th August 2025 - 16:29
Рейтинг@Mail.ru


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