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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Помогите разобраться в программировании Atmega и at86rf230
mk1983
сообщение Jan 23 2010, 12:13
Сообщение #16


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 4-10-08
Пользователь №: 40 692



По ходу своих разработак наткнулся на такую проблему: laughing.gif
Не приходят уведомления в ZDO_MgmtNwkUpdateNotf о том что координатор или роутер недоступен.
Расшифровка:
Координатор:
ставлю брейкпоинт в точку if(...)....
Код
void ZDO_MgmtNwkUpdateNotf(ZDO_MgmtNwkUpdateNotf_t * nwkParams) {
  if (ZDO_NETWORK_LOST_STATUS==nwkParams->status) {   // Network is lost/left
    startFlashTimer();
    appState=APP_NETWORK_STARTING_STATE;              // Switch application state
    SYS_PostTask(APL_TASK_ID);
  }
}

И жду чтож такое получится.
Перегружаю программно девайс, а в брейкпоинт не заходит ваще никогда! Ни при установке сети, ни при потери связи (координатор в коропку жилезную засовываю)
При этом смотрю раз в секунду (по таймеру) чтож у меня с соседями:
Код
static void RssiLqiTimer(void) {
   ZDO_GetNeibAmount_t NeibAmount;
   ZDO_GetNeibAmount(&NeibAmount);

   ZDO_NwkStatus_t NwkSt;
   NwkSt=ZDO_GetNwkStatus();

   NodeAddr_t parentAddr;
   ZDO_GetParentAddr(&parentAddr);

   HAL_StartAppTimer(&delayRssiLqiTimer);
   if(NeibAmount.routersAmount==0x00) {
      appToggleLed(NETWORK_LED);
   }
}


А с соседями все нормально:
нетворк статус NwkSt = ZDO_IN_NETWORK_STATUS
в parentAddr - всякая ерунда (из чего я делаю вывод о том что координатор и роутер не родственники)
NeibAmount.routerAmount = 0x01; (получается он координатора сюда считает -в роутеры)
NeibAmount.childrenAmount = 0x00;

Как только связь рвется:
NeibAmount.routerAmount = 0x00; (что вообщем то верно. логично. и у меня лампочка моргать начинает)

Как только связь снова восстанавливается:
NeibAmount.routerAmount = 0x01; (не сразу , ну , секунду - две)

crying.gif
А загвоздка в том, что в ZDO_MgmtNwkUpdateNotf нифига не приходит (см выше)

Примерно таже ситуевина на координаторе.
Тока там хотяб установка сети обозначатеся в ZDO_MgmtNwkUpdateNotf точно не помню с каким статусом.

А вот исчезновение и появление роутера не обозначается.

Ну а вообще сеть налаживается сама, проблем нет biggrin.gif .
Go to the top of the page
 
+Quote Post
ataradov
сообщение Jan 23 2010, 12:31
Сообщение #17


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



По порядку:

1. ZDO_NETWORK_LOST_STATUS - означает, что сеть потеряна (были проблемы при связи с родителем), но стек сам пытается ее восстановить и по этому статусу делать ничего не нужно.

2. ZDO_NETWORK_LEFT_STATUS - окончательно вышли из сети, сам стек по этому поводу уже ничего делать не будет.

3. События отностся только к самому устройству, от того, что какой-то роутер потерял связь они возникать не будут.

3. Эти события на координаторе воспроизвести довольно трудно (единственный способ - это с дуругого устройства в сети сказать координатору, чтобы вышел из сети).

4. На роутере все должно приходить, при засовывании его (или координатора) в железную коробку, но только при условии, что между ними была передача данных, в остальных случаях они ничего не знают друг о друге.

5. RSSI и LQI обновляются только при отправке данных, так что чтобы иметь постоянно новую информацию нужно отправлять данные постоянно.

6. Строгое отношение родитель-ребенок существует только для роутера/координатора и end-device-a (потому что для того, чтобы забрать данные ED должен опрашивать кого-то конкретного), координатор-роутер в принципе просто параллельно существуют и никак друг к друго не относятся.

Сообщение отредактировал Taradov Alexander - Jan 23 2010, 12:31
Go to the top of the page
 
+Quote Post
mk1983
сообщение Jan 29 2010, 04:48
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 4-10-08
Пользователь №: 40 692



Вопросик: laughing.gif

Если используется статическая адресация:
Код
         bool useStatAddr=true;
         CS_WriteParameter(CS_NWK_UNIQUE_ADDR_ID,&useStatAddr);

на этапе инициализации сети при этом, используются ли расширенные адреса (CS_EXT_PANID) в роутере?

или он, типа, уже всё знает?

Ну, и, главный вопросик:
Пока капался в инструкциях видел такой параметр "максимальное количество переданных пакетов без подтверждения"
а где видел и правильно ли я его понял не могу уточнить . потому как найти где это видел не могу. Ткните носом если кто знает.
crying.gif
Go to the top of the page
 
+Quote Post
ataradov
сообщение Jan 29 2010, 07:15
Сообщение #19


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



Цитата(mk1983 @ Jan 29 2010, 07:48) *
на этапе инициализации сети при этом, используются ли расширенные адреса (CS_EXT_PANID) в роутере?

CS_EXT_PANID - это не адрес, это расширеный иднетификатор сети. Расширеные адреса используются всегда, при статической адресации короткие адреса выбираются не случайно, а берется заданный адрес. Следует помнить, что это не входит в спецификацию ZigBee.

Цитата(mk1983 @ Jan 29 2010, 07:48) *
Ну, и, главный вопросик:Пока капался в инструкциях видел такой параметр "максимальное количество переданных пакетов без подтверждения" а где видел и правильно ли я его понял не могу уточнить . потому как найти где это видел не могу. Ткните носом если кто знает.


Не знаю где это есть в документации, но вреальности без подтверждения это будет порядка 130 пакетов в секунду, с подтверждением 90.
Go to the top of the page
 
+Quote Post
mk1983
сообщение Jan 29 2010, 07:31
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 4-10-08
Пользователь №: 40 692



Цитата(Taradov Alexander @ Jan 29 2010, 10:15) *
CS_EXT_PANID - это не адрес, это расширеный иднетификатор сети. Расширеные адреса используются всегда, при статической адресации короткие адреса выбираются не случайно, а берется заданный адрес. Следует помнить, что это не входит в спецификацию ZigBee.



Не знаю где это есть в документации, но вреальности без подтверждения это будет порядка 130 пакетов в секунду, с подтверждением 90.


Да нет, дело не в скорости, а в общем количестве пакетов которые могут быть переданы без подтверждения. Ну, тут пример:

1 пакет туда ->>>>>>>>>>>>>
<<<<<<<<<<<<<<- подтверждение "пакета 1 туда"
2 пакет туда ->>>>>>>>>>>>>
<<<<<<<<<<<<<<- подтверждение "пакета 2 туда"
........

или

1 пакет туда -> >>>>>>>>>>>>
2 пакет туда ->>>>>>>>>>>>>
3
...
n
<<<<<<<<<<<<<<- подтверждение "пакета 1 туда"
<<<<<<<<<<<<<<- подтверждение "пакета 2 туда"
<<<<<<<<<<<<<<- <<<<<<<<<<<<<<- 3
<<<<<<<<<<<<<<- <<<<<<<<<<<<<<- ...
<<<<<<<<<<<<<<- <<<<<<<<<<<<<<- n
Ну вот, вроде правильно. А вопрос в том , сколько может быть этих самых "n" чтоб ошибок не было?
Или такой порядок пакетов/подтверждений вообще не допустим?

Сообщение отредактировал mk1983 - Jan 29 2010, 07:33
Go to the top of the page
 
+Quote Post
ataradov
сообщение Jan 29 2010, 07:35
Сообщение #21


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



Цитата(mk1983 @ Jan 29 2010, 10:31) *
Или такой порядок пакетов/подтверждений вообще не допустим?


Не допустим. Все пакеты подтверждаются сразу после приема.
Go to the top of the page
 
+Quote Post
mk1983
сообщение Jan 29 2010, 07:42
Сообщение #22


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 4-10-08
Пользователь №: 40 692



Спасибо. Я не разумел сразу. smile.gif
Go to the top of the page
 
+Quote Post
mk1983
сообщение Feb 2 2010, 06:14
Сообщение #23


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 4-10-08
Пользователь №: 40 692



Вопрос смышленным:
вот в примере для модулей ZigBit peer2peer в нашел такие строки:

Код
static void usartBytesReceived(uint16_t bytesToRead) {
  if (APP_NETWORK_JOINED_STATE != appState)
    return;
  if ((APP_DATA_TRANSMISSION_BUSY_STATE == appDataTransmissionState)
    || (APP_DATA_TRANSMISSION_STOP_STATE == appDataTransmissionState))
    return;

  if (actualDataLength < APP_MAX_DATA_SIZE) {
    actualDataLength += (uint8_t) READ_USART(&appUsartDescriptor, appMessageBuffer.message.data + actualDataLength, APP_MAX_DATA_SIZE - actualDataLength);
  }
.......
  if (0 < actualDataLength) {
    appDataTransmissionState = APP_DATA_TRANSMISSION_READY_STATE;
    networkSendData(true);
  }
  (void)bytesToRead;    
}


А чо такое за конструкция (void)bytesToRead; ????????
чет я такой в книжках не встречал. Ну, конечно, не совсем - всё это похоже на привидение типа uint16_t к типу void , а в таком контексте это зачем, если очепятка , тада молчу.... бывает....
Go to the top of the page
 
+Quote Post

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

 


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


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