реклама на сайте
подробности

 
 
> Отправка СМС из памяти в PDU режиме, Отправка СМС из памяти в PDU режиме на произвольный номер
den1s
сообщение May 31 2012, 12:52
Сообщение #1


Участник
*

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



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


--------------------
"Одной мотивации недостаточно: если у вас есть идиот и вы его мотивировали, то в результате вы получите мотивированного идиота." - Джим Рон
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
CADiLO
сообщение May 31 2012, 18:20
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 6 023
Регистрация: 26-08-05
Из: Днепр
Пользователь №: 7 988



Команда эта есть в любом модуле, но не в любом она умеет работать не напрямую с номером телефона, а с номером ячейки где размещен номер.


--------------------
Не можна втрачати надію. Не можна здаватися до останньої миті. Можливо саме вона, остання мить, принесе весну, яка стане початком нового життя.
Go to the top of the page
 
+Quote Post
den1s
сообщение May 31 2012, 19:01
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 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, скорее всего воспользуюсь)) спасибо)


--------------------
"Одной мотивации недостаточно: если у вас есть идиот и вы его мотивировали, то в результате вы получите мотивированного идиота." - Джим Рон
Go to the top of the page
 
+Quote Post
=F8=
сообщение Jun 1 2012, 09:26
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 567
Регистрация: 7-07-07
Из: Донецк
Пользователь №: 28 954



Цитата(den1s @ May 31 2012, 22:01) *
Есть конечно, вариант поменять МК на 324 или 644 - но я надеюсь, что есть более красивое решение.

Это и есть самое правильное решение. Если сделали ошибку на этапе выбора контроллера самое разумное это исправить эту ошибку, а не городить костыли.

2 Frolov Kirill Для данной задачи AVR вполне адекватное решение. Все известные мне компиляторы не имеют проблем с сохранением констант в памяти програм. Единственная проблемма состоит в том, что просто константа и константа во флеш это разные типы данных, соответственно для работы с ними нужны разные функции, неудобно, но не более того(кстати это касается и PIC24). PIC32 и ARM для данного случая это, просто, стрельба из пушки по воробьям.
PS Сори на счет отображения flash в память в PIC24 не знал.
Go to the top of the page
 
+Quote Post
Frolov Kirill
сообщение Jun 1 2012, 11:07
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 212
Регистрация: 2-02-11
Пользователь №: 62 643



Цитата(=F8= @ Jun 1 2012, 13:26) *
Все известные мне компиляторы не имеют проблем с сохранением констант в памяти програм.


GCC имеет.

Цитата
Единственная проблемма состоит в том, что просто константа и константа во флеш это разные типы данных, соответственно для работы с ними нужны разные функции...


IAR. И, следовательно, библиотечные функции использовать во-первых нельзя (они с RAM работают), во-вторых своих функций нормально написать тоже невозможно, потому, что половина данных будет из RAM, половина из ROM, и не скажешь когда как.

Цитата
PIC32 и ARM для данного случая это, просто, стрельба из пушки по воробьям.


Ни разу. А то при умелом подходе и PIC16 можно обойтись, но оно того не стоит.
Go to the top of the page
 
+Quote Post
=F8=
сообщение Jun 1 2012, 12:29
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 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 тоже вполне адекватный для данной задачи контроллер.
Go to the top of the page
 
+Quote Post
Frolov Kirill
сообщение Jun 1 2012, 14:16
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 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 с фиксированным текстом не отделаешься.

Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jun 1 2012, 14:52
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 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) *
а обновление прошивки (своей и модема)...

Вот ни разу не приходилось модем обновлять. Может потому что оно не нужно?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 14:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.01495 секунд с 7
ELECTRONIX ©2004-2016