jcxz 242 20 июля, 2022 Опубликовано 20 июля, 2022 · Жалоба В 20.07.2022 в 14:53, k155la3 сказал: 4. на что обращалось внимание выше. Я ещё в самом 1-м сообщении написал: В 19.07.2022 в 15:06, jcxz сказал: В 19.07.2022 в 14:48, sovenie сказал: if(strstr((char *)RxData,">")){ А здесь видимо автор сего быдлокода решил поискать заветный символ по всей памяти МК. До первого 0. Чего уж мелочиться! Не знаю чему равно sizeof(RxData), но вызов: HAL_UART_Receive(&huart1, RxData, sizeof(RxData), 5000); может заполнить его полностью. И RxData не будет содержать ни одного 0. Соответственно: В 19.07.2022 в 14:48, sovenie сказал: strstr((char *)RxData,">") может продолжить поиск за пределами RxData, хоть по всей памяти МК. И где-то даже найти его. Не говоря уже о том, что и предыдущий В 19.07.2022 в 14:48, sovenie сказал: printf(RxData); неизвестно как себя поведёт, когда получит несколько КБ мусора в качестве форматной строки. Но даже если не будет переполнения RxData, то он может уже содержать '>' (до входа в цикл). И тогда if(strstr((char *)RxData,">")) сработает сразу же, хоть SIM800 и не отправлял '>' ни разу. PS: Вобщем - говнокод там во всём: и задержки и неразбор содержимого ответов SIM800 и отсутствие контроля границ буферов и отсутствие контроля размера принятых данных и т.д. Полностью всё выкинуть и переписать заново, включив голову. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
celsio 0 20 июля, 2022 Опубликовано 20 июля, 2022 · Жалоба On 7/20/2022 at 4:17 PM, jcxz said: Полностью всё выкинуть и переписать заново, включив голову. На таких проектах такое не работает, да и не нужно. Человек добьется, что оно как-то будет работать. Если вдруг это пойдет в тираж - тогда уже на собственном опыте все отрефакторит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 60 20 июля, 2022 Опубликовано 20 июля, 2022 · Жалоба On 7/20/2022 at 4:17 PM, jcxz said: Полностью всё выкинуть и переписать заново, включив голову. Единственный верный совет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 2 20 июля, 2022 Опубликовано 20 июля, 2022 (изменено) · Жалоба Кстати, парсер строк можно и самому написать без жирных функций. Особенно вроде printf или sscanf… Даже на STM8S003 такое будет работать. Удивительно, да? Вот с оптимизацией вычислений для всяких Cortex-M0, у которых нет аппаратного деления, несколько сложней. Но и там же можно вместо софтового деления использовать свои макросы, скажем, для деления на степени десятки. P.P.S. А флоаты в МК, не поддерживающих их аппаратно, нужно использовать очень аккуратно. А не смотреть на ардуинщиков, которые вместо fixed point суют их на МК, вообще не умеющий флоаты! А то и double рисуют… И пихают задержки в бешеные миллисекунды вместо использования КА… И пользуются адовыми обертками над простыми функциями… Изменено 20 июля, 2022 пользователем Eddy_Em Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться