Eu consigo fazer o que quero com um array e manipular bits com and's e or's, numa boa. Mas eu queria fazer de um jeito menos bruto.
Suponha que tenho 4 bytes, que vou chamar de cabec, origem, destino, param. Eu preciso passar esses 4 bytes prá uma rotina, e outra rotina vai me retornar esses bytes. Assim, eu acho que seria uma boa criar uma struct com estes 4 bytes. Porém, eu preciso manipular campos de bit desses bytes, por exemplo, da seguinte forma:
cabec: bits 7 a 4 - 0
bit 3 - estado
bit 2 a 0 - valor
origem: bits 7 a 4 - parte alta
bits 3 a 0 - parte baixa
Até aí tudo bem. Eu poderia fazer algo do tipo
- Código: Selecionar todos
struct _bleh_
{
struct
{
unsigned char z:4; // zeros
unsigned char estado:1;
unsigned char valor:3;
} cabec;
struct
{
unsigned char alta:4;
unsigned char baixa:4;
} origem;
unsigned char destino;
unsigned char param;
} teste;
Eu poderia acessar o campo valor de cabec com
teste.cabec.valor = 5;
O problema é o seguinte: eu tenho outra rotina que vai receber esta estrutura, mas ao invés de acessar valor e estado de cabec, vai querer pegar o byte inteiro de cabec e guardar dentro de uma memória flash.
O que que queria saber é se tem algum jeito de fazer isso, sem pegar o ponteiro de teste e achar dentro dele o byte cabec, porque se for prá fazer isso, eu faço um array de byte e acesso tudo por ponteiro.
Alguém tem alguma ideia brilhante?