Alechek 0 1 ноября, 2011 Опубликовано 1 ноября, 2011 · Жалоба Нет такой функции. Для этих целей можно написать свою функцию используя из time.h функцию, которая считает время. Вставить ее в цикл и получим delay(). В цикл? :cranky: А не подвесится весь модуль, если я сделаю, скажем, delay(10000ms) ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SiriuS 0 1 ноября, 2011 Опубликовано 1 ноября, 2011 · Жалоба В цикл? :cranky: А не подвесится весь модуль, если я сделаю, скажем, delay(10000ms) ? Если у вас задача повесить модуль, то он конечно повесится. А если кодить понимая что и зачем делаешь... Если надо защититься от криворукого програмиста, который может написать delay(1000000ms), то вставте в цинк одну строку с условием выхода из цикла, например если задано время задержки больше 1сек... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pau62 0 1 ноября, 2011 Опубликовано 1 ноября, 2011 · Жалоба В цикл? :cranky: А не подвесится весь модуль, если я сделаю, скажем, delay(10000ms) ? Там вообще-то есть Ql_Sleep Модуль то не подвесится, хотя мне не приходило в голову проверять действие такой дичи. Но это плохой стиль, нельзя так писать. Кучу евентов можно прозевать при таких писаниях. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gegel 0 1 ноября, 2011 Опубликовано 1 ноября, 2011 (изменено) · Жалоба /***************************************************************** * 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, который будет этим заниматься. ПС: по поводу вешанья - я такую задачу специально перед собой ставил, и не смог - не вешается он никак, а перезагружается. Изменено 1 ноября, 2011 пользователем GeGeL Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V125 0 1 ноября, 2011 Опубликовано 1 ноября, 2011 · Жалоба А Stanley случаем не желает и нам показать свой софтовый SPI ? Очень хоца иметь уже готовый на вооружении. И не ради инженерного интереса (как где то в соседней ветке писали), а именно для копипаста. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pau62 0 1 ноября, 2011 Опубликовано 1 ноября, 2011 (изменено) · Жалоба А Stanley случаем не желает и нам показать свой софтовый SPI ? Очень хоца иметь уже готовый на вооружении. И не ради инженерного интереса (как где то в соседней ветке писали), а именно для копипаста. Уж не знаю, для чего может потребоваться софтовый SPI , в котором используются миллисекундные задержки. И вот не понятно мне, Господа вообще чтоль в доки и примеры не смотрят? У Квектела на эту тему как минимум 2 примера - про LCD и про собственно SPI, по-моему для обслуживания SD карты. Первый я пробовал, он работоспособен, если делитель 4 не ставить, но это не квектеловская проблема имхо, а чипсетовая. Во втором тоже грабель на первый взгляд не заметно. Очень хоца иметь уже готовый на вооружении Хорошее оружие - это испытанное в бою оружие)))) Пробовать и обнюхивать надо, прежде чем применять. А так этих софтовых спи в тырнете - граблями не сгрести. Да и сам принцип действия элементарен. Вовсе не обязательно заимствовать то, что написано для оцпу. Достаточно просто в любом примере заменить процедуры типа " дернуть лапу вверх" на специфичные для контроллера. Изменено 1 ноября, 2011 пользователем pau62 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gegel 0 1 ноября, 2011 Опубликовано 1 ноября, 2011 (изменено) · Жалоба Кстати, не пробовали в примере SPI тестировать остальные из 16 бит управляющего регистра из примера: в смысле, за какие ноги модуля они отвечают? У меня все руки не доходят. Добавлено: сорри, сам уже нашел в sdconfig.h (заремлено, но понятно) Медленный он, конечно. Сейчас хочу мини-роутер сделать: прикрутить по SPI езернет-контроллер ENC28J60, а на модуле поднять ppp из оцпу без стека, чтобы получать IP-пакеты с заголовком, менять IP и порты согласно таблице маппинга и отсылать в другой конец. Для моей задачи скорости хватит, но для серьезного обмена - врядли. Изменено 1 ноября, 2011 пользователем GeGeL Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V125 0 1 ноября, 2011 Опубликовано 1 ноября, 2011 (изменено) · Жалоба В LCD я пока не заглядывал, а вот эксемпла "про собственно SPI" в SDK у меня похоже нет. Видишь суслика? - Нет - И я не вижу. А он есть. Да писал я себе както софтовый под ТИНЮ85, но если за меня написали под ОЧПУ нафига мне тратить время и переписывать Изменено 1 ноября, 2011 пользователем V125 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pau62 0 1 ноября, 2011 Опубликовано 1 ноября, 2011 (изменено) · Жалоба Я только LCD от нокии прицепил. по примерчику LCD. Задача была проверить, нормально ли прицепится вся периферия для небольшой задачки. Я с оцпу ковыряюсь недавно совсем. А про регистры - это пример про SPI, я его не пробовал. насколько я понял, кроме тех 4 ног , этот регистр ничем не рулит. Надо смотреть доки МТК. Я рыть собираюсь в этом направлении, но сейчас другие проблемы на голову обрушились))) PS установить бы еще соответствие между номерами GPIO по версии MTK и по Квектелу))) Изменено 1 ноября, 2011 пользователем pau62 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V125 0 3 ноября, 2011 Опубликовано 3 ноября, 2011 · Жалоба Получается если во время отработки Ql_Sleep(u32 msec); придет событие СМС, то оно пропадет в небытие. pau62 уточните это уже проверено или предположение? Для чего нужен такой слип? Тогда как лучше укладывать модуль в спячку (под ОЦПУ), чтобы после просыпания моя СМСка принялась и обработалась? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pau62 0 3 ноября, 2011 Опубликовано 3 ноября, 2011 (изменено) · Жалоба Если в период спячки придет событие, то оно имхо никуда не денется, а вот если два - то у меня большие подозрения что первое потеряется. Собственно, проблема не в том, а в том, что , например, буффер принятых модемом или последовательным портом данных перезапишется. Это только предположения, и, если я ошибаюсь, надеюсь, меня поправят. Это можно было и проверить, и я этим займусь, но просто сейчас другая работа навалилась. Просто применение всяких Delay_ms ведет к написанию таких неэффективных поделок, что лучше сразу забыть о таком, если речь не о микросекундах. Изменено 3 ноября, 2011 пользователем pau62 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gegel 0 3 ноября, 2011 Опубликовано 3 ноября, 2011 (изменено) · Жалоба Я тоже не проверял, но думаю аналогично - первое потеряется. А какой смысл Вы видите в этой задержке? Т.е. чего Вы хотите добиться ее использованием? Изменено 3 ноября, 2011 пользователем GeGeL Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V125 0 3 ноября, 2011 Опубликовано 3 ноября, 2011 (изменено) · Жалоба Когда я делал на внешнем проце, то отправлял сообщения так (к синтаксису не придираться, может вырезал кривовато ) 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)); А все же как лучше укладывать модуль в спячку (под ОЦПУ) на час, на день? Изменено 3 ноября, 2011 пользователем V125 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pau62 0 3 ноября, 2011 Опубликовано 3 ноября, 2011 (изменено) · Жалоба Нигде не написано, что Sleep укладывает в спячку модуль, а не юэверьскую задачу. Правильный метод - после отправки команды на передачу смс в евенте модемного порта проверять , не пришла ли эта галка, а когда пришла, передавать текст смс. Как реально снижать потребление модуля под оцпу я тоже не разобрался пока. Изменено 3 ноября, 2011 пользователем pau62 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V125 0 3 ноября, 2011 Опубликовано 3 ноября, 2011 · Жалоба Вот сейчас впервые подал питание через тестер (не включая кнопкой POWERKEY)- кажет 10миллиампер (как бы не мало), но в талмуде на модуль вроде бы указан 1 миллиампер. Или его нужно как то усыплять, чтоб получить 1мА. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться