|
|
  |
пока не понятные баги OpenCPU в M10 |
|
|
|
Nov 1 2011, 13:47
|

Частый гость
 
Группа: Свой
Сообщений: 188
Регистрация: 21-04-06
Из: Украина, Киев
Пользователь №: 16 335

|
Цитата(Alechek @ Nov 1 2011, 16:36)  В цикл?  А не подвесится весь модуль, если я сделаю, скажем, delay(10000ms) ? Если у вас задача повесить модуль, то он конечно повесится. А если кодить понимая что и зачем делаешь... Если надо защититься от криворукого програмиста, который может написать delay(1000000ms), то вставте в цинк одну строку с условием выхода из цикла, например если задано время задержки больше 1сек...
|
|
|
|
|
Nov 1 2011, 13:48
|
Частый гость
 
Группа: Участник
Сообщений: 116
Регистрация: 22-10-11
Из: Россия
Пользователь №: 67 897

|
Цитата(Alechek @ Nov 1 2011, 17:36)  В цикл?  А не подвесится весь модуль, если я сделаю, скажем, delay(10000ms) ? Там вообще-то есть Ql_Sleep Модуль то не подвесится, хотя мне не приходило в голову проверять действие такой дичи. Но это плохой стиль, нельзя так писать. Кучу евентов можно прозевать при таких писаниях.
|
|
|
|
|
Nov 1 2011, 16:52
|
Местный
  
Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682

|
/***************************************************************** * 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 - Nov 1 2011, 16:55
|
|
|
|
|
Nov 1 2011, 18:27
|
Частый гость
 
Группа: Участник
Сообщений: 116
Регистрация: 22-10-11
Из: Россия
Пользователь №: 67 897

|
Цитата(V125 @ Nov 1 2011, 21:27)  А Stanley случаем не желает и нам показать свой софтовый SPI ? Очень хоца иметь уже готовый на вооружении. И не ради инженерного интереса (как где то в соседней ветке писали), а именно для копипаста.  Уж не знаю, для чего может потребоваться софтовый SPI , в котором используются миллисекундные задержки. И вот не понятно мне, Господа вообще чтоль в доки и примеры не смотрят? У Квектела на эту тему как минимум 2 примера - про LCD и про собственно SPI, по-моему для обслуживания SD карты. Первый я пробовал, он работоспособен, если делитель 4 не ставить, но это не квектеловская проблема имхо, а чипсетовая. Во втором тоже грабель на первый взгляд не заметно. Цитата Очень хоца иметь уже готовый на вооружении Хорошее оружие - это испытанное в бою оружие)))) Пробовать и обнюхивать надо, прежде чем применять. А так этих софтовых спи в тырнете - граблями не сгрести. Да и сам принцип действия элементарен. Вовсе не обязательно заимствовать то, что написано для оцпу. Достаточно просто в любом примере заменить процедуры типа " дернуть лапу вверх" на специфичные для контроллера.
Сообщение отредактировал pau62 - Nov 1 2011, 18:32
|
|
|
|
|
Nov 1 2011, 18:31
|
Местный
  
Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682

|
Кстати, не пробовали в примере SPI тестировать остальные из 16 бит управляющего регистра из примера: в смысле, за какие ноги модуля они отвечают? У меня все руки не доходят.
Добавлено: сорри, сам уже нашел в sdconfig.h (заремлено, но понятно)
Медленный он, конечно. Сейчас хочу мини-роутер сделать: прикрутить по SPI езернет-контроллер ENC28J60, а на модуле поднять ppp из оцпу без стека, чтобы получать IP-пакеты с заголовком, менять IP и порты согласно таблице маппинга и отсылать в другой конец. Для моей задачи скорости хватит, но для серьезного обмена - врядли.
Сообщение отредактировал GeGeL - Nov 1 2011, 18:50
|
|
|
|
|
Nov 3 2011, 16:21
|
Частый гость
 
Группа: Участник
Сообщений: 116
Регистрация: 22-10-11
Из: Россия
Пользователь №: 67 897

|
Если в период спячки придет событие, то оно имхо никуда не денется, а вот если два - то у меня большие подозрения что первое потеряется. Собственно, проблема не в том, а в том, что , например, буффер принятых модемом или последовательным портом данных перезапишется. Это только предположения, и, если я ошибаюсь, надеюсь, меня поправят. Это можно было и проверить, и я этим займусь, но просто сейчас другая работа навалилась. Просто применение всяких Delay_ms ведет к написанию таких неэффективных поделок, что лучше сразу забыть о таком, если речь не о микросекундах.
Сообщение отредактировал pau62 - Nov 3 2011, 16:25
|
|
|
|
|
Nov 3 2011, 17:39
|
Частый гость
 
Группа: Участник
Сообщений: 151
Регистрация: 24-06-11
Пользователь №: 65 866

|
Когда я делал на внешнем проце, то отправлял сообщения так (к синтаксису не придираться, может вырезал кривовато ) Код 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 - Nov 3 2011, 17:42
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|