Что такое функция word ()?

#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) Следовательно, это, вероятно, определено где-то в библиотеках или исходном коде, которые у вас есть в наличии.