rtklib 代码阅读与调试

Posted 者乎之类的

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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函数

以上是关于rtklib 代码阅读与调试的主要内容,如果未能解决你的问题,请参考以下文章

rtklib 代码阅读与调试

rtklib 代码阅读与调试

rtklib代码阅读与调试

RTKLIB-观测值文件

RTKLIB学习日志3—精密定位流程

idea 调试技巧1