Привет. Мк stm32ret6b модем siemens c35i, прога - Keil5. принял строку от модема. Запихнул в буфер Buffer[], выглядит так: Формат заранее известен. Он такой как на картинке. Но надо учесть вдруг данные могут по дороге частично растеряться, хотя это вряд ли. Это я к тому, что я явно указывал начало копирования Buffer[20]. Вобщем нужно быстро и изящно выдернуть всё что между кавычек. И учесть, что например потерю символов (сдвиг индексов массива) и если есть там +7, то + отрезать.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
в стрингах ничего особо-то и не предлагают. Ну я попробовал вот так:
Код:
void GSM_COMM_GET_SMS_SERVICE(){ char pattern_number[1] = "\""; char *link_pattern_number = pattern_number; char *number = strstr(Buffer_Receive, link_pattern_number); //Указатель number указывает на первый символ ". //Если далее записать вот так: LCD_Send_String(1, number); //То на экран выведется всё что после первых кавычек. }
А как отловить вторые кавычки не знаю. Мне нужен индекс массива, что бы крутить его в цикле. А по указателю можно определить индекс элемента массива?
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
char *start=NULL, *stop=NULL; int idx, len; char *number = strstr(Buffer_Receive, link_pattern_number); if( number != NULL ) { number++; start=number; stop = strstr(++number, link_pattern_number); if( stop != NULL ) { stop--; idx = start-Buffer_Receive;// индекс для входа в строку len = stop-start;//длина строки в кавычках /* здесь что-то сделать со строкой */ }
/* by pcb ** */ char i; //индекс в буфере bool foundnum = false; //найдена строка?
for(i = o; i < rxStrLen; ++i){ if(buf[i]=='"'){ char idx = 0; //индекс в найденом номере ++i; //на первый символ после '"' foundnum = true; while(buf[i]!='"'){ //копируем до конца, пока не найдем '"' numStr[idx] = buf[i]; ++i; ++idx; } } if(foundnum) break; //если номер найден, то прерываем цикл }
_________________ Разработал: -BLDC -ФУОЗ/МПСЗ -SMART BMS -ECU/EDC на STM32F4(43%)+CPLD(57%) -Моноинжектор на ATSAMD20G16 -контроллер эффектов для RGB LED ленты -умные часы/обратный счет/секундомер -устройство измерения емкости АКБ
Ничем не плохо. Лишь за тем исключением, что динамическое выделение реализуется иными методами. А то что там было написано вылезало за границы и возможно портило чужую область памяти. Пока прога маленькая или не полностью протестирована это можно не заметить.
Слушайте, а если для интереса с регулярками поработать, для практики. Как их прикрутить к Keil? Где взять библиотеку для регулярок под Keil с мануалом?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения