rtklib 代码阅读与调试(一)

新建空白项目,把src里的文件加入项目,然后
预处理命令里加
WIN32
_DEBUG
_CONSOLE
_LIB
_CRT_SECURE_NO_WARNINGS
ENAGLO
ENAQZS
TRACE

1.int main里的形参通过参数命令传入。

argc是参数个数,这个个数比你输入的实际个数多一个。例如输入-p 0 -m 15 -n -o out.pos 07590920.05o 30400920.05n时,argc=10,argv[0]是“。。。/…exe;
argv是传入的参数指针。
argv指向char * ,这里是char*数组,数组内存放参数的地址。
请添加图片描述


参数命令可查看manual。

在这里插入图片描述

2. 结构体赋初值

在这里插入图片描述

结构体中变量全是char类型,可以这样赋初值全为空。

3.输入文件指针,infile是指针数组,数组内每个元素是指针,最多8个输入文件。

在这里插入图片描述

输出文件指针
在这里插入图片描述
这样是可以的,如下情况2
****指针初始化
char 指针,也就是char * 类型。 其初始化本质上与其它变量初始化没有什么区别,就是赋予其一个初始化的值。
对于指针来说,在C语言中,就是一个地址。区分初始化情况,有四种表象:
1 初始化为空。即
char * str = NULL;
的形式,NULL在C语言中是特定的空指针,其值为0.在C语言中,以NULL作为指针的一个未生效状态,其本身是一个非法的地址值。
2 初始化为常量字符串地址。
char * str = “test”;
常量字符串在运行时会被放在常量空间中,于是这样初始化后,地址是常量空间中的一个地址,对于该地址只能读取,不可写入。即str的值可以改,但是str指向的值是不可修改的。
在这里插入图片描述
注释的11行不可以。相当于const修饰char,没修饰指针。

3 初始化为变量地址。
这里的变量地址,包括全局变量,局部变量的地址,以及通过动态分配申请到的内存地址。
这种情况下,对指针指向的空间是可以修改的。
4 不做初始化。
这种情况在C语言中是允许的。如果为全局变量或静态局部变量,系统默认初始化为0值,即NULL。而对于局部变量,将是一个随机值。所以如果是局部变量不做初始化,在取其指向空间值前,必须为其指定一个合法的值,否则访问会出错。****

4.sprintf指的是字符串格式化命令,strcmp字符串比较

函数声明为 int sprintf(char *string, char *format [,argument,…]);,主要功能是把格式化的数据写入某个字符串中,即发送格式化输出到 string 所指向的字符串。
在这里插入图片描述

strcmp(str1,str2),若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。
在这里插入图片描述
即如果输入的命令是-k,那么执行resetsysopts()
这部分infile跟命令参数给出的.o文件连上了。

5.正文

在这里插入图片描述

借用s大佬论文里的图
在这里插入图片描述

1.static 关键字

静态局部变量使用static修饰符定义,即使在声明时未赋初值,编译器也会把它初始化为0。且静态局部变量存储于进程的全局数据区,即使函数返回,它的值也会保持不变。
变量在全局数据区分配内存空间;编译器自动对其初始化

static unsigned int tick_trace=0; /* tick time at traceopen (ms) */

extern void traceopen(const char *file)
{
	if (!*file || !(fp_trace = fopen(file, "w"))) {
		fp_trace = stderr;
	}
    tick_trace=tickget();
}

例如这里的tick_trace;可以通过traceopen函数改变其值
实验:在这里插入图片描述

2. 如何进行TRACE调试?

1 在rtklib.h中加入 #define TRACE /* open trace debug*/

2 在main函数中加入:  traceopen("ppp.trace");

tracelevel(3);

3 在main程序结尾加入 traceclose();

traceopen函数里打开文件,顺便计时开始

extern void traceopen(const char *file)
{
	if (!*file || !(fp_trace = fopen(file, "w"))) {
		fp_trace = stderr;
	}
    tick_trace=tickget();
}

tickget()得到系统开始到现在的时钟周期数
tracelevel(3);设置trace打印级别,

 trace(3,"postpos : ti=%.0f tu=%.0f n=%d outfile=%s\n",ti,tu,n,outfile);

打印结果:
在这里插入图片描述

1. openses函数:open processing session

目的:通过读取filopt_t fopt中的参数,实现对参数的读取
包括读取卫星天线参数、读取接收机天线参数、读取不同类型码观测量硬件延迟偏差(differential code bias,DCB)参数、读取电离层数据文件、打开大地水准面数据、读取地球自转参数(Earth rotation parameter,ERP)数据;
2.然后为:判断处理时间是否正确;

3.然后execses_b函数

在这里插入图片描述

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
RTKLIB(Real Time Kinematic Library)是一款用于GNSS(Global Navigation Satellite System)数据处理的开源软件库,提供了解码、解算和分析GNSS观测数据的功能。 使用RTKLIB时,首先需要了解几个主要的代码文件和关键函数。例如,主要的源代码文件为rtklib.h和rtklib.c。rtklib.h定义了库的主要功能和数据结构,rtklib.c则包含了具体的函数实现。在使用RTKLIB时,需要通过引用这两个文件,并利用其中的函数来进行数据处理。 在RTKLIB代码教程中,一般会侧介绍以下几个关键的函数: 1. rtkinit:该函数用于初始化RTKLIB库。在该函数中,可以设置各种参数,如观测数据类型、接收机和卫星钟差模型等。 2. inputobs:该函数用于读取GNSS观测数据文件。通过该函数,可以将观测文件中的数据加载到RTKLIB中进行后续处理。 3. inputnav:该函数用于读取导航电文文件。导航电文包含了卫星星历和钟差等数据,用于进行GNSS数据的解算。 4. rtkpos:该函数用于进行单点定位解算。通过该函数,可以对加载的GNSS观测数据进行解算,得到单点定位的结果。 5. postpos:该函数用于进行差分定位解算。与单点定位不同,差分定位需要利用两个接收机的观测数据进行解算,可以得到相对定位的结果。 除了上述的主要函数外,RTKLIB还提供了许多其他函数,如数据预处理、卫星可视性分析和解算输出等。在RTKLIB代码教程中,会详细介绍这些函数的使用方法和注意事项。 总的来说,RTKLIB代码教程将帮助开发者了解RTKLIB的基本原理和实现方式,掌握使用RTKLIB进行GNSS数据处理的技巧。通过熟悉RTKLIB代码,开发者可以根据自己的需求进行二次开发和功能扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值