Перейти к содержанию
    

SIM800 не шлет SMS при работе с STM32

В 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. Чего уж мелочиться!  :biggrin:

Не знаю чему равно 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 и отсутствие контроля границ буферов и отсутствие контроля размера принятых данных и т.д.

Полностью всё выкинуть и переписать заново, включив голову.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/20/2022 at 4:17 PM, jcxz said:

Полностью всё выкинуть и переписать заново, включив голову.

На таких проектах такое не работает, да и не нужно. Человек добьется, что оно как-то будет работать. Если вдруг это пойдет в тираж - тогда уже на собственном опыте все отрефакторит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/20/2022 at 4:17 PM, jcxz said:

Полностью всё выкинуть и переписать заново, включив голову.

Единственный верный совет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати, парсер строк можно и самому написать без жирных функций. Особенно вроде printf или sscanf… Даже на STM8S003 такое будет работать. Удивительно, да? Вот с оптимизацией вычислений для всяких Cortex-M0, у которых нет аппаратного деления, несколько сложней. Но и там же можно вместо софтового деления использовать свои макросы, скажем, для деления на степени десятки.

P.P.S. А флоаты в МК, не поддерживающих их аппаратно, нужно использовать очень аккуратно. А не смотреть на ардуинщиков, которые вместо fixed point суют их на МК, вообще не умеющий флоаты! А то и double рисуют… И пихают задержки в бешеные миллисекунды вместо использования КА… И пользуются адовыми обертками над простыми функциями…

Изменено пользователем Eddy_Em

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...