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

пока не понятные баги OpenCPU в M10

Нет такой функции. Для этих целей можно написать свою функцию используя из time.h функцию, которая считает время. Вставить ее в цикл и получим delay().

В цикл? :cranky:

А не подвесится весь модуль, если я сделаю, скажем, delay(10000ms) ?

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


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

В цикл? :cranky:

А не подвесится весь модуль, если я сделаю, скажем, delay(10000ms) ?

Если у вас задача повесить модуль, то он конечно повесится. А если кодить понимая что и зачем делаешь...

Если надо защититься от криворукого програмиста, который может написать delay(1000000ms), то вставте в цинк одну строку с условием выхода из цикла, например если задано время задержки больше 1сек...

 

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


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

В цикл? :cranky:

А не подвесится весь модуль, если я сделаю, скажем, delay(10000ms) ?

 

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

 

Модуль то не подвесится, хотя мне не приходило в голову проверять действие такой дичи.

Но это плохой стиль, нельзя так писать. Кучу евентов можно прозевать при таких писаниях.

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


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

/*****************************************************************

* 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, который будет этим заниматься.

 

ПС: по поводу вешанья - я такую задачу специально перед собой ставил, и не смог - не вешается он никак, а перезагружается.

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

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


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

А Stanley случаем не желает и нам показать свой софтовый SPI ? Очень хоца иметь уже готовый на вооружении. И не ради инженерного интереса (как где то в соседней ветке писали), а именно для копипаста. :biggrin:

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


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

А Stanley случаем не желает и нам показать свой софтовый SPI ? Очень хоца иметь уже готовый на вооружении. И не ради инженерного интереса (как где то в соседней ветке писали), а именно для копипаста. :biggrin:

Уж не знаю, для чего может потребоваться софтовый SPI , в котором используются миллисекундные задержки.

И вот не понятно мне, Господа вообще чтоль в доки и примеры не смотрят?

У Квектела на эту тему как минимум 2 примера - про LCD и про собственно SPI, по-моему для обслуживания SD карты.

Первый я пробовал, он работоспособен, если делитель 4 не ставить, но это не квектеловская проблема имхо, а чипсетовая.

Во втором тоже грабель на первый взгляд не заметно.

 

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

Хорошее оружие - это испытанное в бою оружие))))

Пробовать и обнюхивать надо, прежде чем применять.

А так этих софтовых спи в тырнете - граблями не сгрести. Да и сам принцип действия элементарен. Вовсе не обязательно заимствовать то, что написано для оцпу.

Достаточно просто в любом примере заменить процедуры типа " дернуть лапу вверх" на специфичные для контроллера.

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

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


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

Кстати, не пробовали в примере SPI тестировать остальные из 16 бит управляющего регистра из примера: в смысле, за какие ноги модуля они отвечают? У меня все руки не доходят.

 

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

 

Медленный он, конечно. Сейчас хочу мини-роутер сделать: прикрутить по SPI езернет-контроллер ENC28J60, а на модуле поднять ppp из оцпу без стека, чтобы получать IP-пакеты с заголовком, менять IP и порты согласно таблице маппинга и отсылать в другой конец. Для моей задачи скорости хватит, но для серьезного обмена - врядли.

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

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


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

В LCD я пока не заглядывал, а вот эксемпла "про собственно SPI" в SDK у меня похоже нет. Видишь суслика? - Нет - И я не вижу. А он есть. Да писал я себе както софтовый под ТИНЮ85, но если за меня написали под ОЧПУ нафига мне тратить время и переписывать

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

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


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

Я только LCD от нокии прицепил.

по примерчику LCD.

Задача была проверить, нормально ли прицепится вся периферия для небольшой задачки.

Я с оцпу ковыряюсь недавно совсем.

А про регистры - это пример про SPI, я его не пробовал. насколько я понял, кроме тех 4 ног , этот регистр ничем не рулит.

Надо смотреть доки МТК.

Я рыть собираюсь в этом направлении, но сейчас другие проблемы на голову обрушились)))

 

 

PS установить бы еще соответствие между номерами GPIO по версии MTK и по Квектелу)))

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

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


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

Получается если во время отработки Ql_Sleep(u32 msec); придет событие СМС, то оно пропадет в небытие. pau62 уточните это уже проверено или предположение? Для чего нужен такой слип? Тогда как лучше укладывать модуль в спячку (под ОЦПУ), чтобы после просыпания моя СМСка принялась и обработалась?

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


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

Если в период спячки придет событие, то оно имхо никуда не денется, а вот если два - то у меня большие подозрения что первое потеряется. Собственно, проблема не в том, а в том, что , например, буффер принятых модемом или последовательным портом данных перезапишется.

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

Просто применение всяких Delay_ms ведет к написанию таких неэффективных поделок, что лучше сразу забыть о таком, если речь не о микросекундах.

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

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


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

Я тоже не проверял, но думаю аналогично - первое потеряется.

А какой смысл Вы видите в этой задержке? Т.е. чего Вы хотите добиться ее использованием?

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

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


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

Когда я делал на внешнем проце, то отправлял сообщения так (к синтаксису не придираться, может вырезал кривовато )

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));

А все же как лучше укладывать модуль в спячку (под ОЦПУ) на час, на день?

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

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


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

Нигде не написано, что Sleep укладывает в спячку модуль, а не юэверьскую задачу.

Правильный метод - после отправки команды на передачу смс в евенте модемного порта проверять , не пришла ли эта галка, а когда пришла, передавать текст смс.

Как реально снижать потребление модуля под оцпу я тоже не разобрался пока.

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

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


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

Вот сейчас впервые подал питание через тестер (не включая кнопкой POWERKEY)- кажет 10миллиампер (как бы не мало), но в талмуде на модуль вроде бы указан 1 миллиампер. Или его нужно как то усыплять, чтоб получить 1мА.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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