无人机项目跟踪记录十八--while循环部分

这个项目的mian函数的整体结构是初始化+while循环结构的,不知道中断是轮询还是中断子涵那种呢?下面来看下while循环部分吧:

    while (1)
    {

#ifndef IMU_SW       // 没有定义宏就执行
#ifdef DEBUG_NEW_CTRL_PRD
        if(anyCnt>=7)	//这是计数指针吧?
#else
        
        if(anyCnt>=5)          //看注释好像是计时还有采集姿态角数据用的。
#endif
        {
            anyCnt=0;
            realExecPrd[0]=micros()-startTime[0];
            startTime[0]=micros();

            DMP_Routing();	        //DMP 运行程序
            DMP_getYawPitchRoll();  //运行dmp后会有结果输出吧,获得这个值吧?

            execTime[0]=micros()-startTime[0];	//测量任务执行时间,CPU占用率

        }
#endif

        //100Hz Loop
        //Crazepony默认使用100Hz的控制频率
        if(loop100HzCnt>=10)     //每个循环10赫兹吧?
        {
            loop100HzCnt=0;

            realExecPrd[1]=micros()-startTime[1];    //记录起始时间用
            startTime[1]=micros();

#ifdef IMU_SW
            IMUSO3Thread(); //有软件算和硬解算区分吗?
#else
            IMU_Process();
#endif
            accUpdated=1;

            //气压读取
#ifndef FBM320
            MS5611_ThreadNew();		//气压传感器的读取,程序中似乎没有定义啊
#else
			if(okFbm320)
			{
				updateFBM320();
			}
#endif
            //imu校准
            if(imuCaliFlag)   //每周期还要校准啊?eeprom是记录请求用的?
            {
                if(IMU_Calibrate())
                {
                    imuCaliFlag=0;
                    gParamsSaveEEPROMRequset=1;	//请求记录到EEPROM
                    imu.caliPass=1;
                }
            }

            CtrlAttiRate();  //点进去看到pid,应该是pid控制姿态用的
            CtrlMotor();//看名字应该控制马达的吧,点进去看看,对头

            execTime[1]=micros()-startTime[1];
        }

        //Need to recieve 2401 RC instantly so as to clear reg.
        Nrf_Irq();//中断是轮询方式查询的啊

        //50Hz Loop
        if(loop50HzFlag)//50hz的循环干嘛用的?
        {
            loop50HzFlag=0;                        //刚开始还是计时间啊!
            realExecPrd[3]=micros()-startTime[3];
            startTime[3]=micros();

            RCDataProcess();   //点进去看下注释是处理遥控器数据的

            FlightModeFSMSimple(); // 点进去看注释是飞行与着陆模式转换用的

            if(altCtrlMode==LANDING)  //看名字是自动着陆
            {
                AutoLand();
            }

            //高度融合   是做什么呢?
            AltitudeCombineThread();

            CtrlAlti();//名字是控制高度

            CtrlAttiAng();//看名字是控制角度

            //PC Monitor
#ifndef UART_DEBUG
            if(btSrc!=SRC_APP) {
                //CommPCUploadHandle();	//tobe improved inside
            }
#endif

            execTime[3]=micros()-startTime[3];
        }

        //10Hz loop
        if(loop10HzFlag)   //10hz循环里面做了什么
        {
            loop10HzFlag=0;
            realExecPrd[2]=micros()-startTime[2];
            startTime[2]=micros();

            //Check battery every BAT_CHK_PRD ms
            if((++batCnt) * 100 >=BAT_CHK_PRD)
            {
                batCnt=0;
                BatteryCheck();  //电池检测,在这呢,看看里咋监测的,硬件还是软件?好像是根据ad采样判断的
            }

            //手机APP有请求飞控信息,则发送给手机APP
            if(flyLogApp)
            {
                CommAppUpload();//看注释是飞机要发送给app一些参数
                flyLogApp=0;
            }

            //EEPROM Conifg Table request to write.
            if(gParamsSaveEEPROMRequset)//eeprom配置表干啥用的?
            {
                gParamsSaveEEPROMRequset=0;
                SaveParamsToEEPROM();//保存参数到eeprom的配置表里面
            }

            //失控保护,例如侧翻,丢失遥控信号等
            FailSafe();

            //处理LED闪烁事件
            LEDFSM();

            execTime[2]=micros()-startTime[2];
        }

        //pc cmd process. need to return as quickly as ps
#ifndef UART_DEBUG
        if(pcCmdFlag)
        {
            pcCmdFlag=0;
            CommPCProcessCmd();   //pc机处理函数,还有地面站的?怎么通信的啊?
        }
#endif

 

x-IMU被设计成可用的最通用的惯性测量单元(IMU)和姿态航向参考系统(AHRS)平台。其主机板上的传感器,算法,可配置的辅助端口以及通过USB,蓝牙或UART的实时通信使其成为一个强大的传感器和控制器。机载SD卡,电池充电器(通过USB),实时时钟/日历和动作触发唤醒,使x-IMU成为理想的独立数据记录器。该x-IMU模块包括多个轴向传感器,能够为飞行器提供航向,横滚和侧翻信息,这类系统用来为飞行器提供准确可靠的姿态与航行信息。 x-IMU GUI可用于配置设置,查看实时传感器数据,执行校准并将数据导出到用户软件; 如Microsoft Excel。x-IMU MATLAB库提供了在MATLAB中导入,组织和绘制数据所需的所有工具。用户软件可以使用x-IMU API开发,见附件内容下载。 x-IMU模块与Arduino实物连接图: x-IMU模块包括的传感器如下: 三轴16位陀螺仪 - 可选范围高达±2000°/ s 三轴12位加速计 - 可选范围高达±8 g 三轴12位磁力计 - 可选范围高达±8.1 G 12位电池电压等级 工厂校准 温度补偿(仅陀螺仪) 可选数据速率高达512 Hz 外部拓展接口部分: 外部电源从3.6 V到6.3 V 3.3 V电源输出高达100 mA 数字I / O模式 - 8个通道,通过USB或蓝牙控制 模拟输入模式 - 8通道,12位分辨率,0至3.3 V PWM输出模式 - 4通道,1至65,535赫兹,通过USB或蓝牙控制 UART模式 - 3.3 V,2400至230.4k波特替代蓝牙 其他特性: 运动触发唤醒和睡眠定时器 实时时钟和日历 可配置的命令按钮 可配置的8通道辅助端口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wyssailing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值