Вот функция записи байта/байт.
Код: Выделить всё
void _write(uint8_t reg, uint8_t* buf, uint8_t len){
CS_LOW;
spi_byte((reg & REGISTER_MASK) | W_REGISTER);
while(len--){
spi_byte(*buf++);
}
CS_HIGH;
}Код: Выделить всё
void _write(uint8_t reg, uint8_t* buf, uint8_t len){
CS_LOW;
spi_byte((reg & REGISTER_MASK) | W_REGISTER);
while(len--){
spi_byte(*buf++);
}
CS_HIGH;
}Код: Выделить всё
struct payload_t{
uint8_t a;
uint32_t b;
int16_t c;
uint8_t d;
uint8_t e;
uint8_t f;
} payload;Код: Выделить всё
struct payload_t{
// -----------------------------------------------------
uint8_t a; // 1 байт
// дырка 3 байта - выравнивание до 4
// -----------------------------------------------------
uint32_t b; // 4 байта
// -----------------------------------------------------
int16_t c; // 2 байта
uint8_t d; // 1 байт
uint8_t e; // 1 байт
// -----------------------------------------------------
uint8_t f; // 1 байт
// дырка 3 байта - выравнивание до 4
} payload;Где показывает?MOHCTEP писал(а):И у меня sizeof(payload) показывает 10 байт. Как так?
хм... я всё время был уверен, что выравнивание делается для всех полей струткуры, занимающих меньше байт, чем разрядность платформы. а вы пишите, что первый байт выравнивается до 4, а последние три - нет, и 16-битное поле на 2 не выравнивается до 4-х...WiseLord писал(а):Код: Выделить всё
struct payload_t{ // ---------- uint8_t a; // 1 байт // дырка 3 байта - выравнивание до 4 // ---------- uint32_t b; // 4 байта // ---------- int16_t c; // 2 байта uint8_t d; // 1 байт uint8_t e; // 1 байт // ---------- uint8_t f; // 1 байт // дырка 3 байта - выравнивание до 4 } payload;
Код: Выделить всё
if(second!=lastSec){ // проверка начала новой секунды
lastSec=second; // в переменную сатрой секунды устанавливаем значение новой секунды
oldMillis = now; // в начале новой секунды сбрасываем в "0"
shag = 0; // в начале новой секунды сбрасываем в "0"
}Код: Выделить всё
volatile struct {
int a;
int b;
char *buf;
// ... чего-то там еще
} var_name;
Код: Выделить всё
E:\Disk_D\comp\avr8-gnu-toolchain\bin>avr-gcc -mmcu=atmega48 -o blinker.a e:\bli
nker.c
In file included from e:\blinker.c:5:0:
e:\disk_d\comp\avr8-gnu-toolchain\avr\include\util\delay.h:95:3: warning: #warni
ng "Compiler optimizations disabled; functions from <util/delay.h> won't work as
designed" [-Wcpp]
# warning "Compiler optimizations disabled; functions from <util/delay.h> won't
work as designed"