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 messages
		GNSS_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 ready
        if (channels_with_subframes) {
			OSFlagPost(m_EphemerisChannelFlag, channels_with_subframes, OS_FLAG_SET, &err);
		}
        
		// led_turnoff(LED3);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值