2016年6月问题记录与总结

1.什么是勘误手册。

2.多核开发需要注意的问题。

3.栈回溯

4.什么是数据校验

5.static修饰变量,函数的具体作用

6.多任务同步机制

7.系统时间戳的问题

8.浮点运算强制类型转换,乘除的顺序对结果的影响

9.系统测试思路

------------------------------------------------------------------------------------------------------------------------------------------------------------

1.什么是勘误手册

sheet中错误的指出与更正,有时候程序发现不对的时候可以查看勘误手册。

2.多核开发需要注意的问题

 

 

3.栈回溯

栈的作用:一个程序包含代码段、数据段、BSS段、堆、栈;其中数据段用来中存储初始值不为0的全局数据,BSS段用来存储初始值为0的全局数据,堆用于动态内存分配,栈用于实现函数调用、存储局部变量。

http://blog.csdn.net/kangear/article/details/8217329

这篇博文讲的很清楚,Linux下跟句oops出错信息定位错误以前也做过。

 

4.数据校验

数据校验是为保证数据的完整性,用一种指定的算法对原始数据计算出的一个校验值。接收方用同样的算法计算一次校验值,如果和随数据提供的校验值一样,说明数据是完整的。防止自己的程序被篡改。有些可执行程序,当被改了资源时再运行会有文件已损坏的提示,这就是使用了数据校验。CRCMD5都是常用的校验方法。在做项目时候,传输数据需要考虑是否进行校验。


5.Static

一,static全局变量

 当一个进程的全局变量被声明为static之后,它的中文名叫静态全局变量。静态全局变量和其他的全局变量的存储地点并没有区别,都是在.data段(已初始化)或者.bss段(未初始化)内,但是它只在定义它的源文件内有效,其他源文件无法访问它。所以,普通全局变量穿上static外衣后,它就变成了新娘,已心有所属,只能被定义它的源文件(新郎)中的变量或函数访问。

  二,static局部变量

static局部变量中文名叫静态局部变量。它与普通的局部变量比起来有如下几个区别:

           1)位置:静态局部变量被编译器放在全局存储区.data(注意:不在.bss段内,原因见3)),所以它虽然是局部的,但是在程序的整个生命周期中存在。

           2)访问权限:静态局部变量只能被其作用域内的变量或函数访问。也就是说虽然它会在程序的整个生命周期中存在,由于它是static的,它不能被其他的函数和源文件访问。

           3)值:静态局部变量如果没有被用户初始化,则会被编译器自动赋值为0,以后每次调用静态局部变量的时候都用上次调用后的值。这个比较好理解,每次函数调用静态局部变量的时候都修改它然后离开,下次读的时候从全局存储区读出的静态局部变量就是上次修改后的值。

  三,static函数
              相信大家还记得C++面向对象编程中的private函数,私有函数只有该类的成员变量或成员函数可以访问。在C语言中,也有“private函数,它就是接下来要说的static函数,完成面向对象编程中private函数的功能。

            当你的程序中有很多个源文件的时候,你肯定会让某个源文件只提供一些外界需要的接口,其他的函数可能是为了实现这些接口而编写,这些其他的函数你可能并不希望被外界(非本源文件)所看到,这时候就可以用static修饰这些其他的函数

           所以static函数的作用域是本源文件,把它想象为面向对象中的private函数就可以了。

6.多任务同步机制

http://www.linuxidc.com/Linux/2013-10/91098.htm

参考这篇博文,写的很全


7.系统时间戳

可以转换用来测试执行某些任务消耗多少时间:例如
double time_pass_p1;

time_last_p1=time_now_p1;

time_now_p1 =sys_timestamp();

time_pass_p1=(double)(time_now_p1-time_last_p1);

time_pass_p1=time_pass_p1* 1000/sys_timestamp_freq() ;


8.浮点运算强制类型转换,乘除的顺序对结果的影响

如果将double强制转换为u32或者u64,当比如两个变量1=1,b=10a/b就会被变为0,而不是0.1,所以类型转换对结果的影响是很大的。第二种情况就是如果数据很大,先乘后除的话,可能会乘法溢出。总之做类型转换的时候不是简单地一个括号和类型,因为类型是一段连续内存的别名,需要特别注意。

 

 9.系统测试思路

测试流程你先要熟悉需求,公司应该会有一个需求文档,时间够的话,需求文档也要测,这时候要用到静态测试,检查需求说明书写的是否符合清晰无歧义等要求,然后你就要了解系统,通过对系统的了解在加上需求说明书你就可以写下测试计划了,测试计划一般来说好一点的公司的测试组都有一个模板,写就好,测试计划写好了,就要写测试用例了,可以根据性能测试,功能测试,兼容性测试等这些方面来写,还有要把测试方法使用到例如等价类,边界值等那些方法,接着测试用例写好了,下面就要执行测试用例,发现bug,公司应该会有一些bug管理工具,写好后提交,交给开发人员修改,然后开始写缺陷报告,记住要写一些具体的统计性的数据,那样更有说服力,像bug覆盖率等,当然测试用例中最好也要加一些,那样维护起来比较好。下面呢,就是比较麻烦的回归测试,经过回归测试之后,基本上就不会有什么问题,系统就可以上线了,接下来呢就是维护的工作 了。
因为这个测试的流程不同的公司是不同的,具体问题具体分析,要结合实际去测试,你要注意如何能够科学有效的测试,并且要注意维护,这就要做到测试的文档话,什么时候都有据可依,测试的时候不要追求完美,没有必要的测试是会浪费时间的,不同的系统都有它核心的模块,只要保证用户常用的模块不出问题就没事,基本的系统都是单元到集成 这不仅是白盒,黑盒也一样,通常流程测试是最重要的,时间短的话,只要保证系统能够正常运行就是关键,接口测试是这时候的主要测试目标。

 

1.ARM FP:是初始化的帧指针寄存器

2.ARM IP:现在如果汇编代码中存在bl指令,而r12又被用来作为通用寄存器,那么r12的值就很有可能会被链接器插入的veneer程序修改掉了。

3.ARM PCPC总是指向当前指令的下两条指令的地址,PC的值为当前指令的地址值加8个字节

4.ARM CPSR:当前程序状态寄存器)CPSR可在任何运行模式下被访问,它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位。
每一种运行模式下又都有一个专用的物理状态寄存器,称为SPSR(Saved Program Status Register,备份的程序状态寄存器),当异常发生时,SPSR用于保存CPSR的当前值,从异常退出时则可由SPSR来恢复CPSR。由于用户模式和系统模式不属于异常模式,它们没有SPSR,当在这两种模式下访问SPSR,结果是未知的。

 


你可能感兴趣的:(Working,Hard)