62529 (588800), страница 7
Текст из файла (страница 7)
{ // Команда «Настройка ГПС: комментарии».
xFwdPacks.pack_1_body. Cmd = fwdtr_ConfigOfPSG_Txt;
xFwdPacks.pack_1_body.PSG. GenNum = Param;
xFwdPacks.pack_1_body.PSG.nevermind = 0;
for (i=0; i { BYTE s = PsgArray[Param].TextMsg[i]; if (s!= 0) // Записываем в пакет ненулевые символы. xFwdPacks.pack_1_body. TxtMsg[i] = s; else break; // Встретили нулевой символ. } // Здесь i – кол-во ненулевых символов. xFwdPacks.pack_1_body. TxtMsg[i] = 0; // Конец строки, как и обещал. i += 3; FwdTrCmd. Cnt = sizeof(xFwdChPackOblFields) + i + sizeof(WORD); FwdTrCmd. Ptr = pvPortMalloc (FwdTrCmd. Cnt); FastByteConstLoad((void*) (FwdTrCmd. Ptr + sizeof(xFwdChPackOblFields)), (WORD)&xFwdPacks.pack_1_body, (BYTE) ((DWORD)&xFwdPacks.pack_1_body >> 16), i); break; } // Конец case'а по «Настройке ГПС: комментарии». case fwdtr_LevelsOfPSG: { // Команда «Уровни сигнала с ГПС». for (i=0; i { // Заполняем тело пакета чатотами ГПСа. if (PsgArray[Param].Freqs[i].Freq!= cnst_PSG_null_freq) xFwdPacks.pack_2_body. Levels[i] = PsgArray[Param].Freqs[i].Level; else break; } xFwdPacks.pack_2_body. Cmd = fwdtr_LevelsOfPSG; xFwdPacks.pack_2_body.PSG. GenNum = Param; xFwdPacks.pack_2_body.PSG. Freqs = i; xFwdPacks.pack_2_body.PSG.nevermind = 0; i = (i<<1) + 2; FwdTrCmd. Cnt = sizeof(xFwdChPackOblFields) + i + sizeof(WORD); FwdTrCmd. Ptr = pvPortMalloc (FwdTrCmd. Cnt); FastByteConstLoad((void*) (FwdTrCmd. Ptr + sizeof(xFwdChPackOblFields)), (WORD)&xFwdPacks.pack_2_body, (BYTE) ((DWORD)&xFwdPacks.pack_2_body >> 16), i); break; } // Конец case'а по «Уровни сигнала с ГПС». case fwdtr_LevelsOfSpectrum: { // Команда «Спектр обратного канала». xFwdPacks.pack_3_body. Cmd = fwdtr_LevelsOfSpectrum; xFwdPacks.pack_3_body. StartFr = Param; xFwdPacks.pack_3_body. StopFr = Param + 1; i = sizeof (xFwdPacks.pack_3_body); FwdTrCmd. Cnt = sizeof(xFwdChPackOblFields) + i + sizeof(WORD); FwdTrCmd. Ptr = pvPortMalloc (FwdTrCmd. Cnt); FastByteConstLoad((void*) (FwdTrCmd. Ptr + sizeof(xFwdChPackOblFields)), (WORD)&xFwdPacks.pack_3_body, (BYTE) ((DWORD)&xFwdPacks.pack_3_body >> 16), 3); FastByteConstLoad((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'а по «Спектр обратного канала». case fwdtr_LevelsOfAFC: { // Команда «Спектр обратного канала». xFwdPacks.pack_4_body. Cmd = fwdtr_LevelsOfAFC; xFwdPacks.pack_4_body. StartFr = Param; 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); FastByteConstLoad((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 { 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 { 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'а по запуску обработчика ОК. // *** КОНЕЦ «СТАРТ ОК» ***. // *** «ЗАВЕРШЕНИЕ РАБОТЫ ОК» ***.Характеристики
Список файлов ВКР















