Нубский вопрос по компилятору

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Пн авг 19, 2013 13:50:49

Сообщение Open »

Добрый день!
Так вышло, что с С я осваиваю недавно, но до сих пор все удавалось "из общих соображений"
Однако, встала примитивная задачка, а именно, загрузить указатель на память побайтно... я и так и так типы приводил - ругается компилятор :(

надо как то типы тут привести..
uint8_t * memptr;
uint8_t b0;
uint8_t b1;
uint8_t b2;
uint8_t b3;

memptr = b0;
memptr |= b1<<8;
memptr |= b2<<16;
memptr |= b3<<24;

так работает
memptr = (void*)b0;
а так уже не хочет применять оператор к указателю
memptr |=(void*) b1<<8;

... сделал, через введение доп переменной, но все таки хотелось бы покрасивее:
uint8_t *MemPtr;
uint32_t _MemPtr;

//а это стейт машина, жующая по 1 байту
case 17: _MemPtr = ch;//сначала младший байт
StatePhase = 18;
break;
case 18: _MemPtr |= (ch<<8);
StatePhase = 19;
break;//
case 19: _MemPtr |= ch<<16;
StatePhase = 20;
break;//
case 20: _MemPtr |= ch<<24;//вконце старший
MemPtr = (void*)_MemPtr;
StatePhase = 0;
break;

Заранее спасибо!
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Код: Выделить всё

union{
   struct{
      uint8_t  b0, b1, b2, b3;
   };
   uint8_t  *memptr;
} sly_ptr;

//а это стейт машина, жующая по 1 байту
 case 17: sly_ptr.b0 = ch;//сначала младший байт 
 StatePhase = 18; 
 break;
 case 18: sly_ptr.b1 = ch; 
 StatePhase = 19; 
 break;//
 case 19: sly_ptr.b2 = ch; 
 StatePhase = 20; 
 break;//
 case 20: sly_ptr.b3 = ch;//вконце старший 
 // тут используем sly_ptr.memptr
 StatePhase = 0; 
 break;
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Вымогатель припоя
Аватара пользователя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

Сообщение menzoda »

Open писал(а): uint8_t * memptr;
uint8_t b0;
uint8_t b1;
uint8_t b2;
uint8_t b3;

memptr = b0;
memptr |= b1<<8;
memptr |= b2<<16;
memptr |= b3<<24;

memptr = (void*)b0;
memptr |=(void*) b1<<8;
Что ты тут сделать то хотел? Не знаю на что конкретно ругается компилятор, но в любом случае это всё выглядит как полная чушь.
Реклама
Эиком - электронные компоненты и радиодетали
Zud
Встал на лапы
Аватара пользователя
Сообщения: 129
Зарегистрирован: Пн авг 19, 2013 03:23:00
Откуда: замкадье

Сообщение Zud »

указатель 32 битный наверное ? значит склеивайте в long, а затем уже переприсваивайте, и лучше без void*, а с тем типом, что объявляли.
Реклама
Открыл глаза
Сообщения: 50
Зарегистрирован: Чт сен 04, 2014 13:22:44

Сообщение vash_sa »

Подскажите! Что это за ошибка

***ERROR 100 : UNRESOLVED EXTERNAL
SYMBOL : ?assert_failed(STM8S_GPIO)

Беру из стандартной библиотеки. Линковщик отказывается обрабатывать.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Ошибка выбора SPL .
Ну и ошибка выбора ветки форума .

А так - не подключен хэдер stm8s_conf.h
Открыл глаза
Сообщения: 50
Зарегистрирован: Чт сен 04, 2014 13:22:44

Сообщение vash_sa »

Подключен. А в какую ветку вопрос? Есть у кого рабочий пример STVD Raisonance со светодиодом. Тупо из-за этой ошибки не получается пример из лабы.
Ответить

Вернуться в «ARM»