Страница 1 из 1

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

Добавлено: Вс авг 31, 2014 16:56:45
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;

Заранее спасибо!

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

Добавлено: Пн сен 01, 2014 07:01:59
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;

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

Добавлено: Пн сен 01, 2014 07:39:14
dosikus

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

Добавлено: Пн сен 01, 2014 14:37:42
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;
Что ты тут сделать то хотел? Не знаю на что конкретно ругается компилятор, но в любом случае это всё выглядит как полная чушь.

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

Добавлено: Пт сен 19, 2014 07:28:19
Zud
указатель 32 битный наверное ? значит склеивайте в long, а затем уже переприсваивайте, и лучше без void*, а с тем типом, что объявляли.

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

Добавлено: Сб ноя 08, 2014 23:12:08
vash_sa
Подскажите! Что это за ошибка

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

Беру из стандартной библиотеки. Линковщик отказывается обрабатывать.

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

Добавлено: Вс ноя 09, 2014 07:23:09
dosikus
Ошибка выбора SPL .
Ну и ошибка выбора ветки форума .

А так - не подключен хэдер stm8s_conf.h

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

Добавлено: Вс ноя 09, 2014 10:33:56
vash_sa
Подключен. А в какую ветку вопрос? Есть у кого рабочий пример STVD Raisonance со светодиодом. Тупо из-за этой ошибки не получается пример из лабы.