Так можно. Код: unsigned char boardid; unsigned char boardcond; void setup() { boardid = 1; boardcond = 0; } void main(void) { unsigned char *mesaga[2] = {&boardid, &boardcond}; // вот тут значения, в фигурных, или объявление переменных? printf("boardcond=%02X\n",*mesaga[1]); boardcond |= (1<<4); printf("boardcond=%02X\n",*mesaga[1]); } ./a.out boardcond=00 boardcond=10 --- добавлено: 29 гру 2015 у 14:32 --- Но это плохой стиль программизма.
я такого не знаю. То-есть, надо так? void setup() { byte boardid = 1; byte boardcond = 0; } void loop() { bitSet (boardcond,0); byte mesaga[2] = {&boardid, &boardcond}; if (boardcond != 0) sameclass.smthdo (&mesaga, sizeof (mesaga) ); }
А что не так? Как можно собрать разные переменные в одну, чтобы передать её функции из библ., которая берёт начальную ячейку, и отправляет указанное кол-во бит подряд наружу, в другой процесс?
Код: typedef struct { unsigned char boardid; unsigned char boardcond; }board_t; board_t board; void send(board_t *b) { printf("boardcond=%02X\n",b->boardcond); } void main(void) { board.boardcond = 0x88; send(&board); } ./a.out boardcond=88
Нихрена не понял. А если структура этого сообщения может быть разной? Ну сейчас надо отправить: [4] айди+состояние1+состояние3+состояние5 А потом вдруг надо отправить: [3] айди+состояние1+состояние3 А потом: [2] айди+состояние2.. В произвольной компоновке, но айди всегда. Почему нельзя собрать разных переменных в массив, отправить этот массив, а потом там этот массив разобрать на переменные?
Код: typedef union { struct { unsigned char msg_id; unsigned char boardid; unsigned char boardcond; }msg1; struct { unsigned char msg_id; unsigned char boardidboardid1; unsigned char boardidboardid2; unsigned char blah_blah_blah; }msg2; }board_t; board_t board; void send(board_t *b) { if(b->msg1.msg_id == 0x01) printf("boardcond=%02X\n",b->msg1.boardcond); } void main(void) { board.msg1.msg_id = 0x01; board.msg1.boardcond = 0x88; send(&board); } Почему нельзя? Посылаете у примеру указатель на буффер, там создаете указатель но стукт, и приравниаете к указатель на структ к буфферу. Потом спокойно разбираете поименно.
Это по SPI, по радио, на другой процессор. Если я дам ссылку на отправку указателя на память, то что оно отправит? радио.отправить (&что_отправить, кол-во_ячеек_отправить) byte boardid = 1; // выделилось 8 ячеек где-то, и записалось там 00000001 byte boardcond = 0; // выделилось ещё 8 ячеек где-то, и записалось там 00000000 } void loop() { bitSet (boardcond,0); // записало в младший бит 1, получилось 00000001 byte mesaga[2] = {&boardid, &boardcond}; // вот тут что происходит? оно просто запоминает где лежат эти две борды, или оно выделяет 16 ячеек, и записывает туда два раза код символа "&"? Или тут надо не ссылки на переменные давать, а указатели на переменные? if (boardcond != 0) radio.write (&mesaga, sizeof (mesaga) ); // а тут оно что отправит? Оно поймёт, что я хочу не просто 16 ячеек подряд отправить, начиная с первой, а отправить именно те, два по 8, даже если они не подряд где-то там лежат? }
Какой хоть процессор? SPI по хорошему, нужно по прерыванию делать. И кидать ему байты в обработчике прерывания. В этом случае совсем по другому надо делать.