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

 
 
> volatile, немного неясно
SasaVitebsk
сообщение Jun 13 2007, 20:42
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Для начала скажу, что прога у меня работает. Но вероятность ошибки низкая и возможно я её просто не вижу. В любом случае хотелось бы получить консультацию и понять что к чему. Пожалуйста не надо писать как это можно сделать по другому. Всё достаточно сложно, и я просто не хочу описывать Вам весь алгоритм работы. Хотябы, чтобы сэкономить Вам Ваше время.

Итак.
Есть данные они непрерывным потоком побайтно поступают в однокристалку. Я размещаю их в куче. При вводе я принимаю их побайтно и формирую из них команды (структуры). Это всё в голове.
В прерывании я обрабатываю уже сформированные структуры и после их обработки - выкидываю из кучи. Важным является то, что выбросить их я могу не только сначала а и из середины. Соответственно в прерывании я убираю образовавшуюся дырку. Но в прерывании я работаю только с сформированными структурами. То есть если очередная структура не полностью загружена, то она ещё не сформирована и не видна в прерывании.
Это вкрадце алгоритм.

Теперь покажу объявления свои
Код
uint8_t        static    NumbActiveKom=0;                    // Текущее число активных команд
void        static    *AdrActiveKom[MAX_ACTIVE_KOM+1];    // Адрес указателей    на начало активных команд
.....
uint8_t        *TekAdrActive;                    // Адрес текущей свободной памяти,

void - так как не известно куда указывать. Потом, когда структура сформирована, я делаю примерно следующее.
Код
            KomC = (struct AddrKomC*) AdrActiveKom[i];    // Прочитать адрес текущей активной    команды





А теперь "внимание вопрос" smile.gif
Если я при объявлении *TekAdrActive применяю volatile, то возникает ошибка в следующем операторе.
Код
     AdrActiveKom[NumbActiveKom+1]=TekAdrActive;        //


Цитата
Error[Pe513]: a value of type "uint8_t volatile *" cannot be assigned to an entity of type "void *" D:\work\AVR IAR C\Panno\office.c 1967


В противном случае - всё работает
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 1)
KRS
сообщение Jun 13 2007, 20:56
Сообщение #2


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



так надо поставить преобразование типов
AdrActiveKom[NumbActiveKom+1]=(void*)TekAdrActive;
Go to the top of the page
 
+Quote Post

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

 


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


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