целочисленное переполнение в выражении [-Woverflow] - TinyCircuit
У меня есть Bluetooth-шилд с крошечной схемой, и я тестировал пример кода, предоставленный крошечной схемой. Однако, когда я попытался загрузить пример кода на плату, у меня по-прежнему возникала следующая ошибка. Как я могу решить эту ошибку?
это фрагмент кода, в котором, похоже, происходит ошибка.
#define ADV_INTERVAL_MIN_MS 50
#define ADV_INTERVAL_MAX_MS 100
void setConnectable(void)
{
tBleStatus ret;
const char local_name[] = {AD_TYPE_COMPLETE_LOCAL_NAME, 'B', 'l', 'u', 'e', 'N', 'R', 'G'};
hci_le_set_scan_resp_data(0, NULL);
PRINTF("General Discoverable Mode.\n");
ret = aci_gap_set_discoverable(ADV_IND,
(ADV_INTERVAL_MIN_MS * 1000) / 625, (ADV_INTERVAL_MAX_MS * 1000) / 625,
STATIC_RANDOM_ADDR, NO_WHITE_LIST_USE,
sizeof(local_name), local_name, 0, NULL, 0, 0);
if (ret != BLE_STATUS_SUCCESS)
PRINTF("%d\n", (uint8_t)ret);
}
@Joel Wong, 👍1
Обсуждение1 ответ
Вы можете указать тип числа, используя такие суффиксы, как L
, LL
,
UL
и тому подобное. Если вы не укажете тип таким образом, все целые числа,
достаточно малы, чтобы поместиться в int
, будут иметь тип int
. Когда ты
написать
ADV_INTERVAL_MIN_MS * 1000
препроцессор расширяет его до
50 * 1000
Поскольку оба аргумента имеют тип int
, компилятор будет использовать этот тип
чтобы вычислить результат. Однако результат 50 000, а на 16-битном
системах наибольшее число, которое может поместиться в int
, равно 32 767, таким образом,
переполнение.
Как предложил Маженко, простое решение — добавить суффикс L
.
(для long
) к любому операнду. Затем компилятор выполнит
арифметические операции с использованием типа данных long
.
Извините, хм, что вы имеете в виду под операндом? Я немного новичок в этом., @Joel Wong
Операнды 50 и 1000. Добавьте суффикс «L» к одному из них (или к обоим)., @Edgar Bonet
- Можно ли измерить скорость акселерометром? Насколько точно?
- Arduino Pro Micro, получить данные с контакта Tx?
- Хочу создать Bluetooth audio control (увеличение/уменьшение громкости, воспроизведение, пауза и т.д.) для смартфона
- Невозможно подключиться к Bluetooth hc-05.
- Проблемы с надежным подключением с использованием HC-05 в качестве ведущего устройства Bluetooth
- Как решить проблему AT+INQ ERROR (1F), AT+INIT ERROR(17) на модуле Bluetooth HC-05?
- Модуль Bluetooth HC-05 мигает красным светом - Arduino Uno
- Bluetooth-модуль HC-05 — команда INQ не работает
Что такое ADV_INTERVAL_MIN_MS?, @Majenko
50 * 1000
> 32768.100 * 1000
> 32768. Это *не должно* иметь значения, но лучше сделать его длинным, добавивL
к вашим определенным числам., @Majenko