-
- 27.5.8 Data transmission and reception procedures подраздел Data
packing - Andreas(18.09.2020 12:26)
- Да, кстати. Правильно ли я понимаю, что в этом случае надо
использовать что-либо подобное: (?) teap0t(51 знак., 18.09.2020 18:45)
- Нет, надо как йцукен написал. Но это редчайшее исключение, которое подтверждает правило, что нечего постоянно явно разрядность менять. Andreas(573 знак., 18.09.2020 20:02)
- Нет, неправильно. У вас приведение типа применяется к результату
чтения из регистра, то есть читаются 16 бит, которые потом
обрезаются до 8. Чтобы читать 8, нужно делать так uint8_t data =
*((volatile uint8_t *)&SPIx_DR); - йцyкeн(18.09.2020 19:48)
- Спасибо. А амперсанд зачем? Адрес же! Туплю. - teap0t(18.09.2020 20:38)
- Попробую объяснить подробнее. Приведение типов применяется к значениям, а не к переменным. Возможно, вы хотели бы написать float x; (int)x = 666; но в Си это недопустимо. Допустимо int ix = (int)x; значение x читается как float, потом преобразуется в int. Чтобы обратиться к переменной как к другому типу, нужно применить приведение типа не к самой переменной, а к указателю на неё (это грязный хак). Указатель концептуально состоит из двух частей: адрес некоторой переменной и её йцyкeн(500 знак., 18.09.2020 22:41)
- Спасибо. А амперсанд зачем? Адрес же! Туплю. - teap0t(18.09.2020 20:38)
- По логике - нет, приведение типов и так будет выполнено при
присвоении значения переменной. И дополнительное приведение типа
справа от знака присвоения значения смысла в этом выражении не
имеет. Другое дело если бы переменная была большего размера. Тут я
пока не представляю, как оно сработает. - Nikolay_Po(18.09.2020 19:19)
- ОК. Надо было 32-разрядную переменную заводить. - teap0t(18.09.2020 19:28)
- Офигенно. Спасибо. - SciFi(18.09.2020 13:00)
- Да, кстати. Правильно ли я понимаю, что в этом случае надо
использовать что-либо подобное: (?) teap0t(51 знак., 18.09.2020 18:45)
- 27.5.8 Data transmission and reception procedures подраздел Data
packing - Andreas(18.09.2020 12:26)