Комплекс измерения параметров обратного канала
xFwdPacks.pack_4_body. StopFr = Param + 1;
i = sizeof (xFwdPacks.pack_4_body);
FwdTrCmd. Cnt = sizeof(xFwdChPackOblFields) + i + sizeof(WORD);
FwdTrCmd. Ptr = pvPortMalloc (FwdTrCmd. Cnt);
FastByteConstLoad((void*) (FwdTrCmd. Ptr + sizeof(xFwdChPackOblFields)),
(WORD)&xFwdPacks.pack_4_body,
(BYTE) ((DWORD)&xFwdPacks.pack_4_body >> 16),
3);
FastByteC
onstLoad((void*) (FwdTrCmd. Ptr + sizeof(xFwdChPackOblFields) + 3),
(WORD) (&pw_RC_Scan_Buf [Param*_1MHz_subdiv – cnst_RevMinFreq]),
(BYTE) ((DWORD) (&pw_RC_Scan_Buf [Param*_1MHz_subdiv – cnst_RevMinFreq]) >> 16),
i‑3);
break;
} // Конец case'а по «АЧХ обратного канала».
} // Конец switch'а.
(*(xFwdChPackOblFields*) FwdTrCmd. Ptr).PreSync_00 = 0x00;
(*(xFwdChPackOblFields*) FwdTrCmd. Ptr).PreSync_FF = 0xFF;
(*(xFwdChPackOblFields*) FwdTrCmd. Ptr).Sync_55 = 0x55;
(*(xFwdChPackOblFields*) FwdTrCmd. Ptr).SourceDevAddr = 0x02;
(*(xFwdChPackOblFields*) FwdTrCmd. Ptr).RestPackLen =
FwdTrCmd. Cnt – sizeof(xFwdChPackOblFields);
*(WORD*) (FwdTrCmd. Ptr + sizeof(xFwdChPackOblFields) + i) =
usHdw_crc (0, FwdTrCmd. Ptr + sizeof(xFwdChPackOblFields), i);
/* #ifdef LogDebg
{
xStruct_PtrAndLen TrCmd;
BYTE *CommOutB;
CommOutB = pvPortMalloc(128);
// Рисуем адрес размещенной области памяти, где лежит пакет.
TrCmd. Cnt = DwrdSymbolize((DWORD) (FwdTrCmd. Ptr), CommOutB);
CommOutB [TrCmd. Cnt++] = ' ';
// Рисуем длину пакета.
TrCmd. Cnt += DwrdSymbolize (FwdTrCmd. Cnt, &CommOutB [TrCmd. Cnt]);
for (i=0; i<FwdTrCmd. Cnt; ++i)
{
CommOutB [TrCmd. Cnt++] = ' ';
// Рисуем содержимое пакета.
TrCmd. Cnt += DwrdSymbolize (FwdTrCmd. Ptr[i], &CommOutB [TrCmd. Cnt]);
}
TrCmd. Cnt += MyStrLoad (&CommOutB[TrCmd. Cnt], // Абзац.
(BYTE far*) ExtraDispInfoStrings[11]) – 1;
TrCmd. Ptr = CommOutB;
cQueueSend (CommandQueue_of_Uart0Transm, (void*)&TrCmd, 0);
}
#endif*/
cQueueSend (CommandQueue_of_FwdTransm, (void*)&FwdTrCmd, 0);
}
void vRevChProc (portSHORT Param)
{
BYTE a, b, c;
xs_RevChCmd xRCCmd;
xs_RevChVars *pxRCVars;
pxRCVars = 0;
for(;)
{
DWORD Time = ulTaskGetTickCount();
if (pxRCVars == 0 ||
(pxRCVars!= 0 && pxRCVars->b_rcproc_action == rcpac_Thinking &&
usQueueMessagesWaiting (CommandQueue_of_RevChProc)!= 0))
{ // Приём управляющей команды.
cQueueReceive (CommandQueue_of_RevChProc, (void*)&xRCCmd, 0);
Time = ulTaskGetTickCount();
switch (xRCCmd. Cmd)
{
// *** СТАРТ ***.
case rccmd_StartProc:
{ // Запуск процесса обработки ОК.
// Выделяется память под переменные, обнуляется.
if (pxRCVars == 0 &&
(xRCCmd. Param == tskid_MainMnuT ||
xRCCmd. Param == tskid_Uart0T))
{
pxRCVars = pvPortMalloc (sizeof(xs_RevChVars));
FastNearMemFill (pxRCVars, sizeof (xs_RevChVars), 0);
}
// Запоминаем название задачи, которая нас запускает.
if (xRCCmd. Param == tskid_MainMnuT)
pxRCVars->xFlags.xOwners. MainMnuExec = 1;
else if (xRCCmd. Param == tskid_Uart0T)
pxRCVars->xFlags.xOwners.U0Proc = 1;
if (xPrgFlags2. RevChProcActive == 1)
// На самом деле обработчки уже запущен, поэтому без инициализации.
break;
pxRCVars->w_rcproc_scanfreq = pxRCVars->w_rcproc_newfreq = cnst_RevMinFreq;
// Блок таймеров.
pxRCVars->xLastTimes.dw_LT_PSGs_Check =
Time – cnst_PSG_Time_CheckMinPeriod;
pxRCVars->xLastTimes.dw_LT_RC_Scan =
Time – cnst_PSG_Time_ScanFullRCDiap;
pxRCVars->xLastTimes.dw_LT_FindScanningPSG =
Time;
pxRCVars->xLastTimes.dw_LT_FwdTr_Pack0 =
Time – cnst_FwdTr_Time_Pack0;
pxRCVars->xLastTimes.dw_LT_FwdTr_Pack1 =
Time – cnst_FwdTr_Time_Pack1;
// Инициализация команды для тюнера.
pxRCVars->xRC_MeasCmd. MeasDescr = &pxRCVars->xRC_MeasDescr;
pxRCVars->xRC_MeasDescr.pwMaxLev_StatVal = &pxRCVars->wMaxLev_StatVal;
{ // Установка аттенюатора.
xMEASURE_OPTIONS xMeasOptions;
ReadSingleDevOption((void*)&xMeasOptions, pos_opAttenuation, sz_opAttenuation);
SetMeasureDescrAtt (&xMeasOptions, &pxRCVars->xRC_MeasDescr);
xPrgFlags2. AttVal = pxRCVars->xRC_MeasDescr. Flags. AttVal;
xPrgFlags2. AutoAtt = pxRCVars->xRC_MeasDescr. Flags. AutoAtt;
}
// Инициализация структуры ГПС-ов.
{
for (a=0; a<cnst_PSG_Num_Of_Devs; ++a)
{
FastNearMemFill((PsgArray[a].TextMsg), cnst_PSG_TextMsgLen, ' ');
for (b = 0; b < cnst_PSG_Num_Of_Freqs; ++b)
{
PsgArray[a].Freqs[b].Freq = cnst_PSG_null_freq;
PsgArray[a].Freqs[b].Level = 0;
PsgArray[a].Freqs[b].WarningLevel = cnst_PSG_PauseAllFreqDel;
}
PsgArray[a].xPrstInfo. PresetNum = 0xFF;
PsgArray[a].xPrstInfo. UsingPreset = 0;
PsgArray[a].xAttributes. Scanning = 0;
}
}
// Инициализация пресетов ГПС-ов.
pxRCVars->bNum_of_ActvPSGs += bPSGPresetsHandler (0, 0, psgprst_InitPrsts);
#ifdef LogDbg2
{
xStruct_PtrAndLen TrCmd;
BYTE *CommOutB;
CommOutB = pvPortMalloc(40);
// Пишем 'ActivePSG: x'.
TrCmd. Cnt = MyStrLoad (CommOutB,
(BYTE far*) ExtraDispInfoStrings[28]) – 1;
CommOutB [TrCmd. Cnt++] = '0' + pxRCVars->bNum_of_ActvPSGs;
CommOutB [TrCmd. Cnt++] = '\n';
TrCmd. Ptr = CommOutB;
cQueueSend (CommandQueue_of_Uart0Transm, (void*)&TrCmd, 0);
}
#endif
// Выделение памяти под буфер спектра ОК.
pw_RC_Scan_Buf =
pvPortMalloc((cnst_RevMaxFreq+1 – cnst_RevMinFreq)*sizeof(WORD));
FastNearMemWordFill((void*) pw_RC_Scan_Buf,
(cnst_RevMaxFreq+1 – cnst_RevMinFreq),
0);
// !!! Временно, для отладки.
// Якобы есть у нас генератор, который мы будем измерять.
// PsgArray[2].Freqs[0].Freq = mac_ConvFreqFromMHz(10);
// pxRCVars->bNum_of_ActvPSGs = 1;
// !!! Временно, для отладки.
#ifdef LogDebg
{
xStruct_PtrAndLen TrCmd;
BYTE *CommOutB;
CommOutB = pvPortMalloc(32);
TrCmd. Cnt = DwrdSymbolize (Time, &CommOutB[0]); // Нарисовали текущее время.
TrCmd. Cnt += MyStrLoad (&CommOutB[TrCmd. Cnt], //ClrAllStages.
(BYTE far*) ExtraDispInfoStrings[12]) – 1;
TrCmd. Cnt += MyStrLoad (&CommOutB[TrCmd. Cnt], // Абзац.
(BYTE far*) ExtraDispInfoStrings[11]) – 1;
TrCmd. Ptr = CommOutB;
cQueueSend (CommandQueue_of_Uart0Transm, (void*)&TrCmd, 0);
}
#endif
// Вот теперь можно сказать, что обработка ОК запущена.
xPrgFlags2. RevChProcActive = 1;
break;
} // Конец case'а по запуску обработчика ОК.
// *** КОНЕЦ «СТАРТ ОК» ***.
// *** «ЗАВЕРШЕНИЕ РАБОТЫ ОК» ***.
Другие рефераты на тему «Коммуникации, связь и радиоэлектроника»:
Поиск рефератов
Последние рефераты раздела
- Микроконтроллер системы управления
- Разработка алгоритмического и программного обеспечения стандарта IEEE 1500 для тестирования гибкой автоматизированной системы в пакете кристаллов
- Разработка базы данных для информатизации деятельности предприятия малого бизнеса Delphi 7.0
- Разработка детектора высокочастотного излучения
- Разработка микропроцессорного устройства для проверки и диагностики двигателя внутреннего сгорания автомобиля
- Разработка микшерного пульта
- Математические основы теории систем