Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: пока не понятные баги OpenCPU в M10
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Сотовая связь и ее приложения
Страницы: 1, 2, 3
V125
Как правильно (под O_CPU) прочитать СМС?
что так
Ql_SMSInitialize(); Ql_SetSMSFormat(QL_SMS_FMT_TXT); Ql_ReadSMS(sms_idx, &read_sms);
что эдак
AT+CMGF=1 AT+CMGR=1,0 или даже AT+CMGL="ALL"
в результате нет текстового режима +CMGR: "REC READ","94C6475627C6564735B435","","2011/10/31 13:44:59+16",208,64,0,8,"+79043490003",145,77 0053004D00530020043E0442043F044004300432043B0435043D043E0020
Тогда сам себе отвечаю
Полдня вчера просидел ломая голову. Подвела жадность. СМС посылал бесплатно с сайта ТЕЛЕ2 вот модуль и принимал всякую охинею ( хотя на трубку приходят как положено текстом ). С трубки на модуль все отсылается- получается отлично, в текстовом режиме.
CupuyC
Цитата(V125 @ Oct 31 2011, 13:05) *
Как правильно (под O_CPU) прочитать СМС?
что так
Ql_SMSInitialize(); Ql_SetSMSFormat(QL_SMS_FMT_TXT); Ql_ReadSMS(sms_idx, &read_sms);
что эдак
AT+CMGF=1 AT+CMGR=1,0 или даже AT+CMGL="ALL"
в результате нет текстового режима +CMGR: "REC READ","94C6475627C6564735B435","","2011/10/31 13:44:59+16",208,64,0,8,"+79043490003",145,77 0053004D00530020043E0442043F044004300432043B0435043D043E0020
Тогда сам себе отвечаю
Полдня вчера просидел ломая голову. Подвела жадность. СМС посылал бесплатно с сайта ТЕЛЕ2 вот модуль и принимал всякую охинею ( хотя на трубку приходят как положено текстом ). С трубки на модуль все отсылается- получается отлично, в текстовом режиме.
Верно ли я Вас понял: Вы не можете прочитать СМС отправленную с сайта на модуль М10 в текстовом режиме?
Читая СМС что через ОЦПУ, что АТ командами результат одинаков.

1. Какая версия используемой прошивки? Попробую на ней, поскольку у меня на последней все нормально работает.
2. Вы шлете СМС кирилицей или англ. буквами?

На М12 тоже читает СМС:
Код
+CMGR: "REC READ","777","","2011/06/06 16:05:39+08"
Hello!
***
Besplatnye D-JINGLy! Zvonite 465!

V125
Шлю текст английскими буквами, русскими и пытаться не стал. Если слать СМС с трубки (сразу не проверил) все отлично. Если с бесплатного сервиса ТЕЛЕ2 - приходит на модуль вереница циферок. Тоесть только PDU режим без вариантов. Попозжа проверю Мегафонов сервис. Модуль М12. Версия M12BR01A01N32_OCPU + моя писанина. Если подарите новую версию прошивки OCPU, буду признателен и неслыханно счастлив.
Видимо сервис передает в PDU режиме. Обычная трубка его преобразовывает в текст, а модуль не может.
Aleksandr_q
Запросите M12BR02A02N32_OCPU и OpenCPU_SDK_V3.3
pau62
Цитата(V125 @ Oct 31 2011, 19:30) *
Шлю текст английскими буквами, русскими и пытаться не стал. Если слать СМС с трубки (сразу не проверил) все отлично. Если с бесплатного сервиса ТЕЛЕ2 - приходит на модуль вереница циферок. Тоесть только PDU режим без вариантов.

Скорее это юникод. Хотяб глазами в терминале попробуйте разобрать. Я сейчас ковыряюсь с квектелом с русскоязычными смс как раз с теле2 все нормально.
V125
Даже если это Юникод (Bin,Hex,Dec,Oct) что я буду с ним делать? Так ведь хрен редьки не слаще. Там выше пример абракадабры, но я столько не выпью. Возможно другой оператор внесет ясность, но я полдня безуспешно бился с ТЕЛЕ2 и ничего не вышло.
pau62
Цитата(V125 @ Oct 31 2011, 20:05) *
Даже если это Юникод (Bin,Hex,Dec,Oct) что я буду с ним делать? Так ведь хрен редьки не слаще. Там выше пример абракадабры, но я столько не выпью. Возможно другой оператор внесет ясность, но я полдня безуспешно бился с ТЕЛЕ2 и ничего не вышло.

О как. Ну если за полдня не вышло, значит не судьба.
GeGeL
Цитата(pau62 @ Oct 31 2011, 19:50) *
Скорее это юникод. Хотяб глазами в терминале попробуйте разобрать. Я сейчас ковыряюсь с квектелом с русскоязычными смс как раз с теле2 все нормально.

Юникод, конечно. Первые 3 буквы не русские sm.gif а латинские: SMS
Дальше не стал разбирать. Наверное, сайт рекламу рус. дописывает, а если в смс есть хоть один русский символ, то, естественно, все в юникоде.
По поводу перекодировщика - это вообще не проблема, на этом форуме вопросы вроде обсуждались.
Каждый символ кодируется двумя байтами. Если первый байт 00, то это латиница, и второй байт определяет ascii-код символа.
Например 0053 - символ 0x53 - "S"
Таким образом, если Вы будете использовать СМС для управления и только в латинице, то самый примитивный алго видится таковым: если первые символы в скобках "00", то обрабатываем как юникод.
В этом случае сначала переводим в HEX по два символа (длина уменьшается в два раза.
Затем смотри по парам: если первый байт пары 0, то второй пишем в выходную строку.
Завершает строку нулем.
Т.о. останутся только латинские символы в виде c-строки.
V125
Разобрались всем миром. Я даже и не подумал, что это может быть Юникодом. Вроде и перекодировать не сложно но пока не хоца, пока другие задачи.
Существует ли в ОЦПУ функция задержки наподобие delay_ms(); ?
CupuyC
Цитата(V125 @ Oct 31 2011, 21:11) *
Разобрались всем миром. Я даже и не подумал, что это может быть Юникодом. Вроде и перекодировать не сложно но пока не хоца, пока другие задачи. Существует ли в ОЦПУ функция задержки наподобие delay_ms(); ?
Нет такой функции. Для этих целей можно написать свою функцию используя из time.h функцию, которая считает время. Вставить ее в цикл и получим delay().
Alechek
Цитата(CupuyC @ Nov 1 2011, 17:58) *
Нет такой функции. Для этих целей можно написать свою функцию используя из time.h функцию, которая считает время. Вставить ее в цикл и получим delay().

В цикл? cranky.gif
А не подвесится весь модуль, если я сделаю, скажем, delay(10000ms) ?
CupuyC
Цитата(Alechek @ Nov 1 2011, 16:36) *
В цикл? cranky.gif
А не подвесится весь модуль, если я сделаю, скажем, delay(10000ms) ?
Если у вас задача повесить модуль, то он конечно повесится. А если кодить понимая что и зачем делаешь...
Если надо защититься от криворукого програмиста, который может написать delay(1000000ms), то вставте в цинк одну строку с условием выхода из цикла, например если задано время задержки больше 1сек...
pau62
Цитата(Alechek @ Nov 1 2011, 17:36) *
В цикл? cranky.gif
А не подвесится весь модуль, если я сделаю, скажем, delay(10000ms) ?


Там вообще-то есть Ql_Sleep

Модуль то не подвесится, хотя мне не приходило в голову проверять действие такой дичи.
Но это плохой стиль, нельзя так писать. Кучу евентов можно прозевать при таких писаниях.
GeGeL
/*****************************************************************
* Function: Ql_Sleep
*
* Description:
* Suspends the execution of the current task
* until the time-out interval elapses.
* Parameters:
* msec:
* The time interval for which execution is to
* be suspended, in milliseconds.
* Return:
* None
*****************************************************************/
void Ql_Sleep(u32 msec);

Но pau62 прав - евенты в оцпу обрабатываются поллингом, и пока Sleep работает, естественно, будут или пропущены, или, хуже того, переполнены (тоже не пробовал).
Sleep хороша для небольших задержек. Например, Stanley в своем екзампле софтовой реализации SPI использует Ql_Sleep(1) между дерганьем ног непосредсвенно записью в регистры ARM.
Я также использовал на старте своей программы Ql_Sleep(10) между командами настройки портов типа смены скорости и т.п.
Но если речь идет о больших интервалах, то это, естественно, абсурдно, т.к., боюсь, энергопотребление от этого не изменится.
Лучший способ, как на мой взгляд: настроить будильник и затем отключить модуль полностью с включением по будильнику. А еще надежнее - внешний PIC10, который будет этим заниматься.

ПС: по поводу вешанья - я такую задачу специально перед собой ставил, и не смог - не вешается он никак, а перезагружается.
V125
А Stanley случаем не желает и нам показать свой софтовый SPI ? Очень хоца иметь уже готовый на вооружении. И не ради инженерного интереса (как где то в соседней ветке писали), а именно для копипаста. biggrin.gif
pau62
Цитата(V125 @ Nov 1 2011, 21:27) *
А Stanley случаем не желает и нам показать свой софтовый SPI ? Очень хоца иметь уже готовый на вооружении. И не ради инженерного интереса (как где то в соседней ветке писали), а именно для копипаста. biggrin.gif

Уж не знаю, для чего может потребоваться софтовый SPI , в котором используются миллисекундные задержки.
И вот не понятно мне, Господа вообще чтоль в доки и примеры не смотрят?
У Квектела на эту тему как минимум 2 примера - про LCD и про собственно SPI, по-моему для обслуживания SD карты.
Первый я пробовал, он работоспособен, если делитель 4 не ставить, но это не квектеловская проблема имхо, а чипсетовая.
Во втором тоже грабель на первый взгляд не заметно.

Цитата
Очень хоца иметь уже готовый на вооружении

Хорошее оружие - это испытанное в бою оружие))))
Пробовать и обнюхивать надо, прежде чем применять.
А так этих софтовых спи в тырнете - граблями не сгрести. Да и сам принцип действия элементарен. Вовсе не обязательно заимствовать то, что написано для оцпу.
Достаточно просто в любом примере заменить процедуры типа " дернуть лапу вверх" на специфичные для контроллера.
GeGeL
Кстати, не пробовали в примере SPI тестировать остальные из 16 бит управляющего регистра из примера: в смысле, за какие ноги модуля они отвечают? У меня все руки не доходят.

Добавлено: сорри, сам уже нашел в sdconfig.h (заремлено, но понятно)

Медленный он, конечно. Сейчас хочу мини-роутер сделать: прикрутить по SPI езернет-контроллер ENC28J60, а на модуле поднять ppp из оцпу без стека, чтобы получать IP-пакеты с заголовком, менять IP и порты согласно таблице маппинга и отсылать в другой конец. Для моей задачи скорости хватит, но для серьезного обмена - врядли.
V125
В LCD я пока не заглядывал, а вот эксемпла "про собственно SPI" в SDK у меня похоже нет. Видишь суслика? - Нет - И я не вижу. А он есть. Да писал я себе както софтовый под ТИНЮ85, но если за меня написали под ОЧПУ нафига мне тратить время и переписывать
pau62
Я только LCD от нокии прицепил.
по примерчику LCD.
Задача была проверить, нормально ли прицепится вся периферия для небольшой задачки.
Я с оцпу ковыряюсь недавно совсем.
А про регистры - это пример про SPI, я его не пробовал. насколько я понял, кроме тех 4 ног , этот регистр ничем не рулит.
Надо смотреть доки МТК.
Я рыть собираюсь в этом направлении, но сейчас другие проблемы на голову обрушились)))


PS установить бы еще соответствие между номерами GPIO по версии MTK и по Квектелу)))
V125
Получается если во время отработки Ql_Sleep(u32 msec); придет событие СМС, то оно пропадет в небытие. pau62 уточните это уже проверено или предположение? Для чего нужен такой слип? Тогда как лучше укладывать модуль в спячку (под ОЦПУ), чтобы после просыпания моя СМСка принялась и обработалась?
pau62
Если в период спячки придет событие, то оно имхо никуда не денется, а вот если два - то у меня большие подозрения что первое потеряется. Собственно, проблема не в том, а в том, что , например, буффер принятых модемом или последовательным портом данных перезапишется.
Это только предположения, и, если я ошибаюсь, надеюсь, меня поправят. Это можно было и проверить, и я этим займусь, но просто сейчас другая работа навалилась.
Просто применение всяких Delay_ms ведет к написанию таких неэффективных поделок, что лучше сразу забыть о таком, если речь не о микросекундах.
GeGeL
Я тоже не проверял, но думаю аналогично - первое потеряется.
А какой смысл Вы видите в этой задержке? Т.е. чего Вы хотите добиться ее использованием?
V125
Когда я делал на внешнем проце, то отправлял сообщения так (к синтаксису не придираться, может вырезал кривовато )
Код
printf("AT+CMGS=\"%s\"\n\r", ANumb);
delay_ms(200); //ждем >
printf("%s%c", Mess, CtrlZ);
Кстати если в ОЧПУ сделать по этому коду, то сообщение приходит почему то пустым, а на внешнем проце работает на ура. Задержка была нужна для ожидания символа приглашения > Теперь использовал встроенную ф-цию отправки и проблема отпала.
Код
Ql_sprintf(buf_num,"%s",ID_NUM_2);  //определяем из СМС сообщения ID_NUM_2    
Ql_SendTextSMS((u8*)(buf_num), (u8*)(buf_mess));
А все же как лучше укладывать модуль в спячку (под ОЦПУ) на час, на день?
pau62
Нигде не написано, что Sleep укладывает в спячку модуль, а не юэверьскую задачу.
Правильный метод - после отправки команды на передачу смс в евенте модемного порта проверять , не пришла ли эта галка, а когда пришла, передавать текст смс.
Как реально снижать потребление модуля под оцпу я тоже не разобрался пока.
V125
Вот сейчас впервые подал питание через тестер (не включая кнопкой POWERKEY)- кажет 10миллиампер (как бы не мало), но в талмуде на модуль вроде бы указан 1 миллиампер. Или его нужно как то усыплять, чтоб получить 1мА.
GeGeL
10 mA - это с работающей задачей ОЦПУ? Или просто все отключено, а ток идет?

sleep ни в коей степени не укладывает сам модуль (GSM-часть) в спячку, для этого есть другие методы. А вот укладывает ли он в спячку задачу оцпу или просто делает задержку - надо пробовать по току потребления, я не могу сказать, т.к. пока не ставил задачей энергосбережение на своих разработках.
pau62
Цитата(V125 @ Nov 3 2011, 22:16) *
Вот сейчас впервые подал питание через тестер (не включая кнопкой POWERKEY)- кажет 10миллиампер (как бы не мало), но в талмуде на модуль вроде бы указан 1 миллиампер. Или его нужно как то усыплять, чтоб получить 1мА.

Не включая? Странно очень. 1.5 ма жрет м75 в режиме спячки с сохранением регистрации в сети. Ну в моменты передачи конечно есть кратковременное повышение тока. (это не в опенцпу)
может это потребление демо-платы с ее стабилизаторами и драйверами портов?
V125
Пардон накололся, еще MAX 3232 запитана, но у неё по ДШ 300 микроампер. Резать дорогу питания пока не буду.
pau62
Вот м10 и м12 не мерил, а м75 при работе вместе с внешним контроллером жрал у меня между сеансами передачи что-то около 13ма. Причем половину контроллер жрал.
Проверю еще раз конечно.
V125
Каким обзазом порт DEBUG перестроить на 9600 (под ОЦПУ)?
pau62
Ql_SetUartBaudRate(ql_uart_port2,9600); - не помогает?
V125
Я хочу прицепить GPS модуль на дебаг порт (на основном все нормально работает), и пытался изменить скорость именно так этой ф-цией. Но чего то не врублюсь. Данные с GPS модуля начинают поступать только после пересброса питания GPS модуля. Вот и уточнил. Может надо подтяжку RX к питанию соорудить??? Вот не принимает их Дебаг порт пока не передерну питание GPS.
pau62
Осцилом посмотреть бы.
А 3-й порт? Я в дебаг порт пока ничего не втыкал
V125
Я пока не понял, что это за третий уарт, да и насчет ql_uart_port2 это Дебаг или не дебаг не уверен. Надо спросить у GeGeL. он разобрался с ними. Просто очень удобно GPS прицепить на дебаг, а с основного апгрейдиться.
pau62
если модуль боле-мене свежий, то 62pin -TXD3 63 - RXD3. Я им пользуюсь.
Работать с ним так же как и с 2-ым, только 3 вместо 2 писать.
В описании на М12, что у меня есть, порт 3 не упоминается, можно ДШ про М10 посмотреть. Если модуль старый, перепрошить можно попробовать.

В ДШ написано , что можно 2й порт использовать и как порт, и как дебаг порт, в зависимости от того как опции дебага установлены.
В тех примерах, что я смотрел, они установлены так, что не мешают использовать его как порт.
Может, и не стоит его под другие задачм использовать, мало-ли подебажить .

Можно и у первого объединить функции, просто глушить как-то передaчу с GPS по power key
V125
Вот спасибо, подсказали про третий Уарт, я не доумился М10 доку посмотреть. А второй модемный порт это что такое? Я понимаю модемные порты просто мультиплексируются.
pau62
Не понимаю зачем он. Возможно при передачи данных в нем есть смысл.

P.S. имхо надо открывать какую-то тему про оцпу для чайников, а то тема про баги, а я что-то ничего в ней собственно про баги не нашел.
V125
Тогда про баги, незнаю модуля или моих мозгов. Если я подключаю GPS модуль к основному порту -данные поперли , парсятся. Не выключая модуль перебрасываю GPSмодуль на Дебаг порт, тоже идут. Если же изначально подключить GPS на Дебаг-борода. Приходится "заводить" на основном и перебрасываться на Дебажный. Возможно существует какой то мне неизвестный приоритет обработки портов случаем EVENT_UARTDATA: Может надо как то принудительно включать Дебаг порт?
GeGeL
Это не баг.

Китайцы в своем трекере используют порт 3. Я использую порт 2 (out использую для дебаг в BASIC_MODE, in - для ввода GPS-данных). BASIC_MODE дебаг - это собствеенно обычный режим порта, никакого самопроизвольного дебага там нету, данные отправляются только при использовании функции Ql_DebugTrace. Ну, и Ql_SendToUart для него тоже работает, и евент по приему данных.
Выбор uart2 сделал из-за того, что в отличие от 1 и 3, в нем используется другой драйвер, и есть возможность задать Threshold по времени (в примере ниже - если аж 100 мс данных нет, то возникает евент). Это предупреждает деление входящих пакетов на части при "тормозах" в источнике. В GPS такого не наблюдал, а в сатресиверах - полно. И если нету хардверного трешхолда, то приходится писать процедуру объединения кусков с последовательных евентов, а это гимор.
Т.о., задав трешхолд, я в итоге при евенте от uart2 получаю ВСЮ ПАЧКУ NMEA (благо буфера 2048 хватает), и затем ищу, что надо (обычно GPRMC).
А то, что Вы описали, происходит из-за ошибок приема при старте по питанию источника (GPS-модуля). Их ОБЯЗАТЕЛЬНО надо очищать в евенте UARTFE!
Таких тонкостей в разработке софта множество, и именно они определяют качество работы устройства в большей степени, чем HW.

//на старте:

Ql_SetDebugMode(BASIC_MODE);
Ql_SetPortRts(ql_uart_port2, FALSE);
ret=Ql_SetUartBaudRate(ql_uart_port2,9600);
Ql_UartSetGenericThreshold(ql_uart_port2, TRUE, 512, 100);
Ql_UartGenericClearFEFlag(ql_uart_port2);
Ql_UartClrRxBuffer(ql_uart_port2);
Ql_SetPortRts(ql_uart_port2, TRUE);


//в обработчике евентов

case EVENT_UARTFE:
{
Ql_UartGenericClearFEFlag(ql_uart_port2);
}
break;
V125
Спасибо, вроде понял. Хотя у меня GPS источник подключен постоянно, тоесть данные уже установились и прут. Вот поди попробуй сам все нюансы раскопать. ДШ всеже скудноват на пояснения.
Jawohl ! Alles in ordnung! Das ist phantastisch.
GeGeL
Для начинающих, испытывающих трудности с командной строкой:

Графическая оболочка для компиляции файла 'Example_helloworld.c' с папки 'Examle'
(используйте этот файл как main-файл вашего проекта, включая (include) в него другие необходимые c-файлы)

Скопируйте файлы manager.exe и timer.exe в папку размещения OpenCPU_SDK
Запустите manager.exe. Жмите кнопку 'Compile' для компиляции
После завершения компиляции (10-20 сек) будут отображены сообщения компилятора
После щелчка мышью по окну будет отображен лог компилятора (build.log),
строки с сообщениями об ошибках выделяются цветом.

Нацарапал вечером на скорую руку, если что - по ходу поправлю.
V125
Цитата(GeGeL @ Nov 7 2011, 00:09) *
Для начинающих, испытывающих трудности с командной строкой:
Надо SDK комплектовать этим менеджером. Только мне не зачто не удальсь бы в консоли набрать "helloWorld", да ещё с переключением регистра на заглавные буквы sm.gif. Поэтому я свою писанину загнал в example_at.c Теперь "make at" я набираю уже неглядя. Поэтому неначиначинающие, а просто замонавшиеся тарабанить в консоли могут скопипастить свои файлы в example_helloWorld.c и подменить #ifdef __EXAMPLE_HELLWORLD__ (а может и подменять не надо, я просто на всякий) Низкий Вам GeGeL поклон от людей с перебинтоваными пальцами. А если еще Вы подправите, чтоб предупреждения выделялись желтым (как в анекдоте -не нравится желтая полоса зае...те зеленую).
pau62
Вот что интересно, я тож в этот ат все пишу. Потыркался проект с оригинальным именем создать - не вышло.

Пишу с помощью Notepad++, в нем же лог открыт постоянно. Компиляцию запускаю батником своим, чтоб 2 раза make не писать
GeGeL
Подменять ничего не надо - просто дописывать в HelloWorld свои процедуры.
Цитата(V125 @ Nov 7 2011, 10:00) *
А если еще Вы подправите, чтоб предупреждения выделялись желтым (как в анекдоте -не нравится желтая полоса зае...те зеленую).

Желтую? Да никогда! Вобщем, зае...нил синюю... sm.gif
V125
Есть встроенная функция Ql_ReadADC. В упор не найду её "описание". Куда она возвращает считанные данные, какое Vref, как считать? Смутно догадываюсь, что надо читать ДШ на ARM7EJ, да вот не найду его никак.
pau62
Цитата
/******************************************************************************
* Function: Ql_ReadADC
*
* Description:
* Read the level value of adc pin.
*
* Parameters:
* adc_pin:
* [in] one value of 'QlADCPin'
*
* cb_adc:
* [in] callback, which will report the results.
* Return:
* QL_RET_OK indicates this function successes.
* Negative indicates failure. please see Error Code Definition.
******************************************************************************/
s32 Ql_ReadADC(QlADCPin adc_pin, OCPU_CB_READ_ADC cb_adc);
- из ql_pin.h

2800mv опора. а я вообще не знал что ацп помимо АТ команд читается, спасибо)))
есть АТ команды про ацп, там про опору и подтяжку на на ацп градусника есть
V125
Спасибо. Тоже нашел, а то на терминал считывает, а куда возвращает данные непойму. Но кажется 2800mv это не опора, а MAX допустимая напруга на входе ADC
GeGeL
Запросите OPEN_CPU_DGD_V1.2.pdf из OpenCPU_SDK_V3.3, там добавлены почти все новые функции.
Что касается конкретно Ql_ReadADC, то одним из ее параметров есть указатель на callback-функцию, вызываемую ядром при завершении чтения. В нее и передается результат.
Причем это "нечестная" функция - она подает стандартную АТ-команду в служебный виртуальный порт, а при получении ответа вызывается callback с парсенным результатом.
Поэтому все опоры, тайминги и т.д. в точности совпадают с описанными для АТ-команды.
Мало того, при вызове Ql_ReadADC после чтения стандартный ответ на АТ-команду приходит ВО ВСЕ ОТКРЫТЫЕ порты модема, вызывая соответствующий евент.
Этим также балуются функции работы с смс (чтения, чтения списка).


Aleksandr_q
Уважаемые разработчики хочу вас поставить в известность о последних документах и прошивках OpenCPU
И так OPEN_CPU_DGD_V1.2
М12 с обычной памятью M12BR02A02N32_OCPU vs OpenCPU_SDK_V3.3
M12 c расширенной памятью M12BR03A01N128_OCPU
M12 c расширенной памятью + работа с SD картой M12BR02A02N128_OCPU_SD + спец SDK

Прошивки и документацию можно получить у официального дистрибьютора на территории России, Белоруссии и Украины - Rainbow Technologies, http://www.rtcs.ru http://rainbow-m2m.com.ua
V125
Как в OpenCPU производится запись/чтение энергонезависимой памяти модуля?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.