本文主要是介绍22、电文处理任务实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
\qquad 下面是HD-GR GNSS导航软件的电文处理任务实现代码:
// main_message.c -- Navigation message processing task./* * Copyright (C) 2005 Andrew Greenberg* Distributed under the GNU GENERAL PUBLIC LICENSE (GPL) Version 2 (June 1991).* See the "COPYING" file distributed with this software for more information.*//* Namuru GPS receiver project* Original : message.c* Mods : driving LED part has commented/replaced for Namuru HW* version : V1.1* date : 8/7/2008*//* * HD-GR GNSS receiver project* Modes : Inherited the code of message.c in the Namuru GPS receiver project * V1.0 and made necessary adjustments to adapt to the new RTOS and * functions.* version : V1.0* date : xx/xx/2015*/#include <io.h>
#include <stdio.h>
#include <math.h>
#include "includes.h"
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
#include "sys/alt_irq.h"
#include "gps_message.h"
#include "b1i_message.h"
#include "main_ephemeris.h"
#include "main_position.h"/******************************************************************************* Defines******************************************************************************//******************************************************************************* Globals******************************************************************************/OS_FLAG_GRP *m_MessageFlag __attribute__ ((section(".isrdata.rwdata")));
OS_FLAGS channels_with_subframes __attribute__ ((section(".isrdata.rwdata")));/******************************************************************************* Statics******************************************************************************//******************************************************************************* Stuff incoming bits from the accum_task into words and subframes in* the messages structure.******************************************************************************/
void message_task(void* pdata) // input 'pdata' not used
{INT8U err;OS_FLAGS channels_with_bits, channel_bits;// There's no way that we're going to get a bit before this thread// is first executed, so it's ok to run the flag init here.m_MessageFlag = OSFlagCreate((OS_FLAGS)0, &err);while (1) {// Block if there are no channels with bits ready. Wake up if any bits// from the 20 channels (0xFFFFF) are set. Clear the flag on wakeup,// with the bits saved in channels_with_bits.channels_with_bits = OSFlagPend(m_MessageFlag,(1 << TOT_MAX_CHANNELS) - 1,OS_FLAG_WAIT_SET_ANY + OS_FLAG_CONSUME, 0, &err);// OK we're awake, process the messagesGNSS_ENTER_CRITICAL();channel_bits = g_channel_bits;GNSS_EXIT_CRITICAL();// led_turnon(LED3);// Clear the flag IPC shadow (see below)channels_with_subframes = 0;if (m_sys_posconst & POS_CONSTELL_BDS) {b1i_process_message(channels_with_bits >> GPS_MAX_CHANNELS, channel_bits >> GPS_MAX_CHANNELS);channels_with_subframes <<= GPS_MAX_CHANNELS;}if (m_sys_posconst & POS_CONSTELL_GPS) {gps_process_message(channels_with_bits, channel_bits);}// Wake up the ephemeris thread if there are subframes readyif (channels_with_subframes) {OSFlagPost(m_EphemerisChannelFlag, channels_with_subframes, OS_FLAG_SET, &err);}// led_turnoff(LED3);}
}
这篇关于22、电文处理任务实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!