|
Отправка СМС из памяти в PDU режиме, Отправка СМС из памяти в PDU режиме на произвольный номер |
|
|
|
May 31 2012, 12:52
|
Участник

Группа: Участник
Сообщений: 51
Регистрация: 17-03-11
Пользователь №: 63 677

|
Надеюсь, что в правильную тему пишу… Уважаемые форумчане, помогите… скоро начну биться головой обо что-нибудь) Делаю GSM-модуль: прибор на базе модуля Quectel M72 и AVR. Прибор отслеживает состояния подключенных датчиков и по наступлению определенных событий отправляет СМСки и щелкает исполнительными элементами. Конфигурируется прибор с компа, но работает самостоятельно. По схеме наверное необходимо отметить, что AVR посредством одного UARTа подключен к M72, а вторым подключается к компу (только для конфигурации). Комп с модемом связи не имеет. Собственно железных вопросов нет – все слава богу работает, но вот с отправкой СМС проблема. Но тут стоит опять немного пояснений дать. Прибор должен иметь возможность отправлять СМС большому числу абонентов (последовательно) и на каждое из событий предполагается свой текст. При этом тесты СМС и имена абонетов нужно писать на русском. Держать всю эту кучу инфы в слабенькой АВР не представляется возможным, поэтому было принято стратегическое решение номера, имена абонентов а так же тексты СМС хранить в самом М72. А в процессоре держать только индексы телефонной книги и хранилища СМС. Т.е. когда я все это продумывал в теории, думал что будет так: АВРка говорит М72, а оправь-ка СМС № 1 из памяти абоненту № 2 из телефонной книги, а потом СМС № 3 абоненту№ 8. Но тут оказалась проблема: нет такой АТ-команды. Думаю, ладно, буду считывать телефонный номер абонента в буфер и просто буду подставлять в команду отправки СМС из памяти. Но тут подставил Режим PDU: оказалось там прямо в тексте хранится номер получателя и его нельзя отправить на произвольный номер. Забирать текст PDU из модема и подправлять номер не выходит – этот текст может достигать 300 байт – мне стек в АВР срывает. Собственно вопрос, можно ли на практике реализовать придуманный мной подход, и как это сделать? Возможно я не до конца разобрался во всех премудростях прекрасного PDU-режима Очень много написал, извиняюсь. Заранее спасибо.
--------------------
"Одной мотивации недостаточно: если у вас есть идиот и вы его мотивировали, то в результате вы получите мотивированного идиота." - Джим Рон
|
|
|
|
|
 |
Ответов
|
May 31 2012, 19:01
|
Участник

Группа: Участник
Сообщений: 51
Регистрация: 17-03-11
Пользователь №: 63 677

|
Цитата(CADiLO @ May 31 2012, 22:20)  Команда эта есть в любом модуле, но не в любом она умеет работать не напрямую с номером телефона, а с номером ячейки где размещен номер. Да, это я понял после того как написал... а отредактировать пост не получилось (то ли форум тупил, то ли я) Цитата(andrewlekar @ May 31 2012, 22:30)  У вас у AVR сколько памяти? Если вам 300 байт стек разрывают, так не храните их в стеке. Можно в глобальный массив поместить. Мега164 у меня. Я программист к сожалению не высочайшего класса... может там и не в стеке дело (хотя вряд ли): я объвил глобальный массив в 280 байт и когда пытаюсь в него грузануть хотя бы 1 ячейку - ИАР не компилит. При этом компилится, если размер массива уменьшить в пару раз. Есть конечно, вариант поменять МК на 324 или 644 - но я надеюсь, что есть более красивое решение. Цитата(andrewlekar @ May 31 2012, 22:30)  Ещё для экономии памяти можно хранить текст в UCS, а в PDU перекодировать на лету. интересная идея... если все же придется хранить в EEPROM, скорее всего воспользуюсь)) спасибо)
--------------------
"Одной мотивации недостаточно: если у вас есть идиот и вы его мотивировали, то в результате вы получите мотивированного идиота." - Джим Рон
|
|
|
|
|
Jun 1 2012, 09:26
|
Знающий
   
Группа: Свой
Сообщений: 567
Регистрация: 7-07-07
Из: Донецк
Пользователь №: 28 954

|
Цитата(den1s @ May 31 2012, 22:01)  Есть конечно, вариант поменять МК на 324 или 644 - но я надеюсь, что есть более красивое решение. Это и есть самое правильное решение. Если сделали ошибку на этапе выбора контроллера самое разумное это исправить эту ошибку, а не городить костыли. 2 Frolov Kirill Для данной задачи AVR вполне адекватное решение. Все известные мне компиляторы не имеют проблем с сохранением констант в памяти програм. Единственная проблемма состоит в том, что просто константа и константа во флеш это разные типы данных, соответственно для работы с ними нужны разные функции, неудобно, но не более того(кстати это касается и PIC24). PIC32 и ARM для данного случая это, просто, стрельба из пушки по воробьям. PS Сори на счет отображения flash в память в PIC24 не знал.
|
|
|
|
|
Jun 1 2012, 11:07
|
Местный
  
Группа: Участник
Сообщений: 212
Регистрация: 2-02-11
Пользователь №: 62 643

|
Цитата(=F8= @ Jun 1 2012, 13:26)  Все известные мне компиляторы не имеют проблем с сохранением констант в памяти програм. GCC имеет. Цитата Единственная проблемма состоит в том, что просто константа и константа во флеш это разные типы данных, соответственно для работы с ними нужны разные функции... IAR. И, следовательно, библиотечные функции использовать во-первых нельзя (они с RAM работают), во-вторых своих функций нормально написать тоже невозможно, потому, что половина данных будет из RAM, половина из ROM, и не скажешь когда как. Цитата PIC32 и ARM для данного случая это, просто, стрельба из пушки по воробьям. Ни разу. А то при умелом подходе и PIC16 можно обойтись, но оно того не стоит.
|
|
|
|
|
Jun 1 2012, 12:29
|
Знающий
   
Группа: Свой
Сообщений: 567
Регистрация: 7-07-07
Из: Донецк
Пользователь №: 28 954

|
Цитата(Frolov Kirill @ Jun 1 2012, 14:07)  GCC имеет. Какие? Вместо __flash в начале написать PROGMEM в коце? Работать конечно сложней чем в IARе, но ничего особо страшного. Цитата(Frolov Kirill @ Jun 1 2012, 14:07)  IAR. И, следовательно, библиотечные функции использовать во-первых нельзя (они с RAM работают), во-вторых своих функций нормально написать тоже невозможно, потому, что половина данных будет из RAM, половина из ROM, и не скажешь когда как. Для работы с данными во флеш в IARе есть дубликаты стандартных функций например strcpy_P, strcmp_P итд. Свои функции тоже приходится писать в 2-х экземплярах. Неудобно, но не более того. Цитата(Frolov Kirill @ Jun 1 2012, 14:07)  Ни разу. А то при умелом подходе и PIC16 можно обойтись, но оно того не стоит. Я сам не любитель ограничивать себя в ресурсах, но ARM/PIC32 для простейшей оповешалки? ИМХО слишком. PIC24 согласен наверно более оптимально получилось бы, в конце концов они с AVR по цене в одной категории. Но AVR тоже вполне адекватный для данной задачи контроллер.
|
|
|
|
|
Jun 1 2012, 14:16
|
Местный
  
Группа: Участник
Сообщений: 212
Регистрация: 2-02-11
Пользователь №: 62 643

|
Цитата(=F8= @ Jun 1 2012, 16:29)  Какие? Вместо __flash в начале написать PROGMEM в коце? Работать конечно сложней чем в IARе, но ничего особо страшного. Либо все константы в ОЗУ. Недостатки очевидны. Либо этот progmem -- см. ниже: Цитата Для работы с данными во флеш в IARе есть дубликаты стандартных функций например strcpy_P, strcmp_P итд. Свои функции тоже приходится писать в 2-х экземплярах. Неудобно, но не более того. Объясняю: невозможно написать функцию, которая может одновременно работать с любым типом данных (строка в ОЗУ или строка в ПЗУ). При наличии достаточно большого объёма кода, где десяток вложенных функций, например, это заставит получить 10^2 вариантов их реализации (для flash и не flash), что ставит крест на всей затее. Либо заранее копировать в RAM и потом обрабатывать как обычно -- кажется более разумным. Но в общем случае нельзя взять код работающий на другой платформе и начать использовать. Нужно писать специально под AVR. Это большой недостаток. Гораздо лучше, когда код можно отдельно оттестировать на PC, соместо с development kit модема, а потом перенести на микроконтроллер практически без изменений. Цитата Я сам не любитель ограничивать себя в ресурсах, но ARM/PIC32 для простейшей оповешалки? ИМХО слишком. Слишком что? Какие критерии, чем АРМ хуже AVR? А наличие того же ARM внутри самого модема -- не круто слишком? Потом не всё так просто как кажется. Любой проект может разрастить в несколько раз в сторону увеличения от начальных условий. AVR не даёт же никакой возможности роста. Адекватный выбор микроконтроллера -- это когда из того же семейства можно выбрать всегда более крупный в ~2 раза хотя бы. Негативные стороны я указал: проблемы с константами, малый объём ОЗУ, да и ПЗУ тоже (практика на основе реальных проектов). Возможно даже малое число последовательных портов, для некоторых задач (если GSM/GPS то уже 3 нужно), отсутствие гибкости в тактировании и потреблении энергии. У того же ARM, кстати, при таком же размере слова в программной памяти (thumb или cortex m3), плотность кода повыше будет. У PIC24 и то выше, а там слово в 1.5 раза шире. По цене -- антиквариат в цене, увы, кроме самых младших моделей. LPC 2-долларовый ещё когда появился, в прошлой жизни. Просто это инерция мышления. Мол 32 бита -- это для чего-то очень сложного и дорогого. На самом деле не так. 32 бита нужно, если объём обрабатываемых данных превышает 64 килобайта (16 бит). А 8 бит годится только для простейших задач управления. Исходя из таких критериев "для простейшей оповещалки" нужен хотя бы 16-битный микроконтроллер. Цитата PIC24 согласен наверно более оптимально получилось бы, в конце концов они с AVR по цене в одноНо AVR тоже вполне адекватный для данной задачи контроллер. STM32 дешевле и лучше (моё субъективное мнение...) чем PIC24, практически во всём. PIC -- это тоже инерция. Из плюсов -- только наличие компараторов. Я не говорю про dsPIC -- это отдельная история. Цитата(den1s @ Jun 1 2012, 17:20)  АВР - это традиция конторы моей, уже начались подвижки в сторону того что бы использовать разные контроллеры в зависимости от задачи, но пока АВР))). Просто раньше проекты были совсем простенькие и АВР всем хватало, сейчас типа начали усложнять, но по старой памяти пока на старых МК. Но полно старых дедов (это не характеристика возраста человека, есть и вполне вменяемые 70+ деды) которые 13 лет назад выучили AVR (когда он только появился) и ни о чём не хотят слышать. Ага, знакомо. В других местах точно также микрочип. Цитата На самом деле не нужно в моем случае обрабатывать аудио и файлы, да и обработку строк я не предполагал особо (см. первый пост) - т.ч. АВР не такой уж и глупый вариант все же. 128кБайт ПЗУ и 4кБайт ОЗУ -- вполне реальный вариант даже со звуком, SMS в PDU, GPRS и очень многими другими вещами. Для PIC18. Но вряд ли оно того стоит если нет и не будет многотысячных тиражей. Для AVR я бы увеличил ОЗУ в 2 раза -- из-за констант. Но там и есть столько. Цитата(_Артём_ @ Jun 1 2012, 17:40)  Прямо-таки чувствуется какая-то классовая ненависть к АВР (или может что-то подсознательное вылезает) . Чем они так плохи, что "хуже всего подходит для подобного рода задач". МК как МК, где-то лучше, где-то хуже. Ненависти нет. AVR очень хороший для своих маленьких чисто управляющих задач с маленьким потреблением и т.п. Но в данном случае класс решаемой задачи и выбранного контроллера явно несоответствует. Только если не брать наиболее крупные модели ATMEGA128 и т.п. Что, в свою очередь нерационально по той причине, что не оставляет разработчикам какой-то возможности дальнейшего развития проекта. Программисты же склонны ошибаться чуть ли не на порядки. Вообще имею мнение, что вначале стоило бы разработать программное обеспечение, и отладить его на ПК совместно с development kit модема, а потом выбирать аппаратную платформу на которой программное обеспечение может работать. А тут считается, что кто-то решил, что ATMEGA32, например, точно достаточно, а программист как-нибудь (это ключевое слово -- как-нибудь) всё туда постарается и уместит. Только в действительности потом всё оказывается гораздо сложней, чем изначально кажется. Небось и сколько-нибудь детального ТЗ на проект не существует. А тонкостей, сейчас "неизвестных" их же масса. То модем там перезапускать нужно, работоспособность SIM-карты и наличие регистрации в сети проверять. Для входящих SMS откидывать дубли. И не влезет оно в ATMEGA32. А потом и в ATMEGA64 не влезет. А тест для производства, а обновление прошивки (своей и модема)... Одним AT+CMGS с фиксированным текстом не отделаешься.
|
|
|
|
|
Jun 1 2012, 14:52
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(Frolov Kirill @ Jun 1 2012, 17:04)  Либо все константы в ОЗУ. Недостатки очевидны. Либо этот progmem -- см. ниже: Некоторые неудобства есть, но не более того. Константы вообще в реальности могут на какой-нибудь AT45 находится и как тогда их адресавать стандартными функциями? Невозможно? А надо. Цитата(Frolov Kirill @ Jun 1 2012, 17:04)  Гораздо лучше, когда код можно отдельно оттестировать на PC, соместо с development kit модема, а потом перенести на микроконтроллер практически без изменений. Зачем на ПК? Когда есть JTAG включенные в схему с модемом и другой обвязкой. Цитата(Frolov Kirill @ Jun 1 2012, 17:04)  Адекватный выбор микроконтроллера -- это когда из того же семейства можно выбрать всегда более крупный в ~2 раза хотя бы. У ТС вроде mega32x. Нужно в 2 раза расширить? Нет проблем: xmega384 - скорость в 2 раза, flash - в 8 раз. Цитата(Frolov Kirill @ Jun 1 2012, 17:04)  Негативные стороны я указал: проблемы с константами, малый объём ОЗУ, да и ПЗУ тоже (практика на основе реальных проектов). Возможно даже малое число последовательных портов, для некоторых задач (если GSM/GPS то уже 3 нужно), отсутствие гибкости в тактировании и потреблении энергии. Указанное (порты, ОЗУ, потребление) есть в xmega в достатке. Цитата(Frolov Kirill @ Jun 1 2012, 17:04)  128кБайт ПЗУ и 4кБайт ОЗУ -- вполне реальный вариант даже со звуком, SMS в PDU, GPRS и очень многими другими вещами. Для PIC18. Но вряд ли оно того стоит если нет и не будет многотысячных тиражей. Для AVR я бы увеличил ОЗУ в 2 раза -- из-за констант. Но там и есть столько. Цитата(Frolov Kirill @ Jun 1 2012, 17:04)  128кБайт ПЗУ и 4кБайт ОЗУ -- вполне реальный вариант даже со звуком, Вариант реальный, но понынешним временам скорей минимальный. Цитата(Frolov Kirill @ Jun 1 2012, 17:04)  Для AVR я бы увеличил ОЗУ в 2 раза -- из-за констант. С константами - это у вас какая-та ... даже не знаю как назвать, странность. Дались вам те константы. Цитата(Frolov Kirill @ Jun 1 2012, 17:16)  Только если не брать наиболее крупные модели ATMEGA128 и т.п. Их и надо брать. Цитата(Frolov Kirill @ Jun 1 2012, 17:16)  А тут считается, что кто-то решил, что ATMEGA32, например, точно достаточно, а программист как-нибудь (это ключевое слово -- как-нибудь) всё туда постарается и уместит. Только в действительности потом всё оказывается гораздо сложней, чем изначально кажется. Небось и сколько-нибудь детального ТЗ на проект не существует. А тонкостей, сейчас "неизвестных" их же масса. То модем там перезапускать нужно, работоспособность SIM-карты и наличие регистрации в сети проверять. Для входящих SMS откидывать дубли. И не влезет оно в ATMEGA32. А потом и в ATMEGA64 не влезет. M32 пожалуй мало, только для простейших задач. M64 - уже может хватить на что-то серьёзное. Цитата(Frolov Kirill @ Jun 1 2012, 17:16)  а обновление прошивки (своей и модема)... Вот ни разу не приходилось модем обновлять. Может потому что оно не нужно?
|
|
|
|
Сообщений в этой теме
den1s Отправка СМС из памяти в PDU режиме May 31 2012, 12:52 Nixon Вы ошибаетесь насчет хранения номера в тексте sms.... May 31 2012, 14:20 CADiLO Эта тема поднималась год назад и такая команда был... May 31 2012, 14:34 den1s Цитата(Nixon @ May 31 2012, 18:20) Вы оши... May 31 2012, 17:23  Frolov Kirill Цитата(den1s @ May 31 2012, 23:01) интере... Jun 1 2012, 09:15     den1s Цитата(=F8= @ Jun 1 2012, 16:29) Я сам не... Jun 1 2012, 13:20      =F8= 2 Frolov Kirill.
Ваша взяла. Посмотрел на цены мла... Jun 1 2012, 15:06       _Артём_ Цитата(=F8= @ Jun 1 2012, 18:06) Посмотре... Jun 1 2012, 15:12        =F8= Цитата(_Артём_ @ Jun 1 2012, 18:12) Еррат... Jun 1 2012, 15:38      den1s Цитата(Frolov Kirill @ Jun 1 2012, 18:16)... Jun 1 2012, 15:44 andrewlekar У вас у AVR сколько памяти? Если вам 300 байт стек... May 31 2012, 18:30 Frolov Kirill Цитата(den1s @ May 31 2012, 16:52) Забира... Jun 1 2012, 08:48 den1s Цитата(Frolov Kirill @ Jun 1 2012, 12:48)... Jun 1 2012, 09:13  Frolov Kirill Цитата(den1s @ Jun 1 2012, 13:13) Трудно ... Jun 1 2012, 09:25   _Артём_ Цитата(Frolov Kirill @ Jun 1 2012, 12:25)... Jun 1 2012, 13:40 den1s Цитата(den1s @ May 31 2012, 16:52) Забира... Jun 1 2012, 09:05 CADiLO Если в текстах будут одинаковые словосочетания тип... Jun 1 2012, 09:10 den1s Цитата(CADiLO @ Jun 1 2012, 13:10) Если в... Jun 1 2012, 09:23  Frolov Kirill Цитата(den1s @ Jun 1 2012, 13:23) подскаж... Jun 1 2012, 09:33   den1s Цитата(Frolov Kirill @ Jun 1 2012, 13:33)... Jun 1 2012, 10:19    Frolov Kirill Цитата(den1s @ Jun 1 2012, 14:19) ведь чт... Jun 1 2012, 11:10     den1s Цитата(Frolov Kirill @ Jun 1 2012, 15:10)... Jun 1 2012, 11:26      Frolov Kirill Цитата(den1s @ Jun 1 2012, 15:26) Это ясн... Jun 1 2012, 13:40 CADiLO PIC24 со своими таблицами в самый раз. А PIC16/18 ... Jun 1 2012, 11:10 CADiLO Тогда проще всего держать в памяти номера абоненто... Jun 1 2012, 13:28 CADiLO Просто кто к чему привык. Ну и еще два факта - Атм... Jun 1 2012, 13:51 ArtemKAD ЦитатаПосмотрел на цены младшей 100-й серии STM32 ... Jun 1 2012, 16:08
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|