sergei94 0 25 сентября, 2020 Опубликовано 25 сентября, 2020 · Жалоба Здрасвуйте, у меня есть данные которые я получаю от датчика температуры. В efr32 нет возможности послат 32bit сразу Я хочу послать по 8 бит кусками через UART. Допустем мой uint32 Он: uint8_t Tx_PP[4] = {0x02,0xF0,0x03,0xE7}; Как я делю uint32 на 4 uint8? Thanks. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 26 сентября, 2020 Опубликовано 26 сентября, 2020 · Жалоба 1 hour ago, sergei94 said: Как я делю uint32 на 4 uint8? Ножом по четвертинкам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 26 сентября, 2020 Опубликовано 26 сентября, 2020 · Жалоба 4 hours ago, sergei94 said: Как я делю uint32 на 4 uint8? Можете так union My32bit { uint32_t figure32; uint8_t figure8[sizeof(figure32)]; }; My32bit a.figure32 = 0xaabbccdd; spi_send(a.figure8, sizeof(figure8)); // где a.figure8 массив 8-би битных числе, он же указатель на этот массив Или так uint32_t figure32 = 0xaabbccdd; const uint8_t * p8 = static_cast<uint8_t *>(&figure32); for(int counter = 0; counter < sizeof(figure32); counter++) { spi_send_byte(*p8++); } Синтаксис не проверял. Могу по мелочам ошибиться. Но общий принцип я написал вам верно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergei94 0 26 сентября, 2020 Опубликовано 26 сентября, 2020 (изменено) · Жалоба Я попробовал следущий метод показанный снизу но неуверен в & * адресации? did i split the uint32_t correctly? Thanks. uint8_t arr[4]; uint32_t Tx_PP= {0x02F003E7}; arr[0]=*Tx_PP arr[1]=*(Tx_PP+8) arr[2]=*(Tx_PP+16) arr[3]=*(Tx_PP+24) SPI_tranfer(USART1,arr[0]); Изменено 26 сентября, 2020 пользователем sergei94 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 26 сентября, 2020 Опубликовано 26 сентября, 2020 (изменено) · Жалоба а почему не простое a [0] = val >> 0; a [1] = val >> 8; a [2] = val >> 16; a [3] = val >> 24; Зачем изобретать когда есть просто способы попроще? Как определять будете что не с середины принимаете? Про байтстаффинг прочтите. Или в тестовом виде гоните Изменено 26 сентября, 2020 пользователем GenaSPB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 52 26 сентября, 2020 Опубликовано 26 сентября, 2020 · Жалоба 1 hour ago, sergei94 said: Я попробовал следущий метод показанный снизу но неуверен в & * адресации? did i split the uint32_t correctly? Thanks. uint8_t arr[4]; uint32_t Tx_PP= {0x02F003E7}; arr[0]=*Tx_PP arr[1]=*(Tx_PP+8) arr[2]=*(Tx_PP+16) arr[3]=*(Tx_PP+24) SPI_tranfer(USART1,arr[0]); арифметика указателей не в битах идёт, а в размерах того на что указывается, для "байтовой" арифметики надо тип указателя привести к указателю на uint8_t. то есть (&Tx_PP + 8) укажет на 8е слово, т.е. 32й байт относительно Tx_PP. и uint32_t Tx_PP= {0x02F003E7}; это инициализация массива, а не uint32_t - фигурные скобки не нужны. и оператор * - разименовывание указателя, а & - указатель на. почитайте букварь по С какой-нибудь. arr[0]= ((uint8_t*) &Tx_PP) [0]; arr[1]= ((uint8_t*) &Tx_PP) [1]; ... либо memcpy(arr, &Tx_PP, 4); хотя зачем лишний раз копировать если сразу можно нужный байт достать SPI_Transfer(USART1, ((uint8_t*) &Tx_PP)[0]); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 26 сентября, 2020 Опубликовано 26 сентября, 2020 · Жалоба ТС надо книжку по С почитать на ночь. Даже базовых знаний нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 26 сентября, 2020 Опубликовано 26 сентября, 2020 · Жалоба 3 hours ago, sergei94 said: Я попробовал следущий метод Чем мои примеры не устроили? Зачем задаёте вопросы, если всё-равно делаете по-своему? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
my504 2 26 сентября, 2020 Опубликовано 26 сентября, 2020 · Жалоба Вероятно проще всего объявить struct/union и не париться со сдвигами и странными расчетами адресов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergei94 0 26 сентября, 2020 Опубликовано 26 сентября, 2020 · Жалоба 1 hour ago, haker_fox said: Чем мои примеры не устроили? Зачем задаёте вопросы, если всё-равно делаете по-своему? No offense,Thanks for the help.i will try these variation and hopefully get the result. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться