Флуд на КМ

Тема у розділі 'Курилка, болталка', створена користувачем Wasabi, 25 чер 2014.

  1. Энки

    Энки Модератор Команда форуму

    Повідомлення:
    15.894
    Симпатії:
    15.563
    Адреса:
    Київ
    Так можно?
    Или так?
     
  2. artembond

    artembond Заслужений майстер

    Повідомлення:
    6.672
    Симпатії:
    4.963
    Адреса:
    Cygnus X-1
    Так можно.

    Код:
    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 ---
    Но это плохой стиль программизма.
     
    Останнє редагування модератором: 6 січ 2016
  3. Энки

    Энки Модератор Команда форуму

    Повідомлення:
    15.894
    Симпатії:
    15.563
    Адреса:
    Київ
    я такого не знаю.
    То-есть, надо так?
    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) );
    }
     
  4. artembond

    artembond Заслужений майстер

    Повідомлення:
    6.672
    Симпатії:
    4.963
    Адреса:
    Cygnus X-1
    Нет.
     
  5. Энки

    Энки Модератор Команда форуму

    Повідомлення:
    15.894
    Симпатії:
    15.563
    Адреса:
    Київ
    А что не так?
    Как можно собрать разные переменные в одну, чтобы передать её функции из библ., которая берёт начальную ячейку, и отправляет указанное кол-во бит подряд наружу, в другой процесс?
     
  6. artembond

    artembond Заслужений майстер

    Повідомлення:
    6.672
    Симпатії:
    4.963
    Адреса:
    Cygnus X-1
    Код:
    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
    
     
    Энки подобається це.
  7. Энки

    Энки Модератор Команда форуму

    Повідомлення:
    15.894
    Симпатії:
    15.563
    Адреса:
    Київ
    Нихрена не понял.
    А если структура этого сообщения может быть разной?
    Ну сейчас надо отправить: [4] айди+состояние1+состояние3+состояние5
    А потом вдруг надо отправить: [3] айди+состояние1+состояние3
    А потом: [2] айди+состояние2..
    В произвольной компоновке, но айди всегда.
    Почему нельзя собрать разных переменных в массив, отправить этот массив, а потом там этот массив разобрать на переменные?
     
  8. artembond

    artembond Заслужений майстер

    Повідомлення:
    6.672
    Симпатії:
    4.963
    Адреса:
    Cygnus X-1
    Код:
    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);
    }
    
    

    Почему нельзя? Посылаете у примеру указатель на буффер, там создаете указатель но стукт, и приравниаете к указатель на структ к буфферу. Потом спокойно разбираете поименно.
     
  9. Энки

    Энки Модератор Команда форуму

    Повідомлення:
    15.894
    Симпатії:
    15.563
    Адреса:
    Київ
    Это по 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, даже если они не подряд где-то там лежат?
    }
     
  10. artembond

    artembond Заслужений майстер

    Повідомлення:
    6.672
    Симпатії:
    4.963
    Адреса:
    Cygnus X-1
    Какой хоть процессор? SPI по хорошему, нужно по прерыванию делать. И кидать ему байты в обработчике прерывания. В этом случае совсем по другому надо делать.
     

Поділитися цією сторінкою