#c #arduino
Вопрос:
Я пытаюсь преобразовать некоторую функцию C для использования в моем скрипте python и наткнулся на это:
int Crc16(args...)
{
// Some calulations
return (int)word(~ByteHi,~ByteLow)
}
Это конец калькулятора CRC16, который мне нужен, я понятия не имею, что делает это возвращение? Особенно функция «слово». Это ~
побитовое дополнение, и конечное возвращаемое число представляет собой одно целое число. Я ничего не нашел в своем поиске этой функции word (). Не могли бы вы мне помочь?
Комментарии:
1.
word
это не стандартная функция C .2. Необходим надлежащий контекст, т. Е. Какие заголовки включены в файл, в котором вы это нашли (и заголовки, которые они включают, и т. Д.) — Не может быть дан ответ как есть.
3. По-видимому, он используется в этом проекте: github.com/jrbenito/ABBAurora/tree/master/src в файле cpp
Ответ №1:
После просмотра readme проекта мы знаем, что это могут быть утилиты, связанные с Arduino, затем проверьте документ здесь:
https://www.arduino.cc/reference/en/language/variables/conversion/wordcast/
Описание Преобразует значение в тип данных word.
Синтаксис
word(x) word(h, l) (word)x (C-style type conversion)
Параметры
x: a value. Allowed data types: any type. h: the high-order (leftmost) byte of the word. l: the low-order (rightmost) byte of the word.
Возвращает тип данных:
word
.
Ответ №2:
Исходя из показанного вами использования, я бы предположил, что он создает 16-битное значение из двух байтов. Хотя это не часть c
/ c
. Возможно, с помощью какой-то функции, определенной в вашем коде.
uint16_t word(uint8_t hi, uint8_t low)
{
return (hi << 8) lo;
}
Комментарии:
1. Почему бы и нет
return (hi << 8) | lo
, что может работать быстрее и более читабельно?2. Это одно и то же. Вы также можете сделать это таким образом, это не имеет значения. Даже полученный код, скорее всего, будет таким же. Почему вы думаете, что это было бы быстрее?
Ответ №3:
Это не стандартный C или C (a), но, учитывая контекст (CRC16 и имена переменных), он почти наверняка занимает два 8-разрядных байта и образует 16-разрядное слово.
(a) Следовательно, это, вероятно, определено где-то в библиотеках или исходном коде, которые у вас есть в наличии.