explorer

万丈高楼平地起,勿在浮沙筑高台

0%

单元测试

单元测试是为了保证一个软件模块是否稳定,功能是否覆盖完全且正确无误的测试方式。

无论是嵌入式系统还是上层应用软件,其测试的基本思想都是:将软件模块看成一个黑盒,通过向黑盒输入一个参数,然后检验黑盒输出是否符合预期。

阅读全文 »

个人能力的衡量与发展

软件开发的工作量和质量的衡量

  • 通过代码行数和功能点来表示一个项目的大小
  • 通过软件开发所耗费的总时间来表示项目的大小
    • 其实这个还和团队人员能力相关,同一个项目能力更强的团队所创作代码或许更精简、效率更高、花费的时间更短
  • 项目质量的确定
    • 用发布时还未解决的bug数量除以代码的行数来表示
    • 用代码从最开始到发布所返工修改的行数来表示
  • 交付的时间
    • 个人预计完成任务的时间与实际交付的时间,方差越小个人越成熟稳定
阅读全文 »

boost库的功能太多,所以用此文来记录一些常用的类和方法的 基本使用规则 ,避免遗忘。

这些说明都是查询官方文档而做的笔记,英语比较渣(^_^!),无法做到一目十行。
每次遗忘都要重头来看,比较耗时间......
阅读全文 »

Hello World

  • 新建文件夹并编写代码:
1
2
3
4
5
6
7
8
9
10
11
12
//hello.cpp

#include

using namespace std;

int main(void)
{
cout << "Hello world!" << endl;

return 0;
}
阅读全文 »

基本知识

脚本

vim 的设置可以写入脚本文件中来达到批量配置的目的, 在 vim 中使用 :scriptnames 命令查看作用的脚本及其路径.

一般情况下, vim启动脚本路径为 ~/.vimrc (linux) 或 $HOME/_vimrc, $VIM/_vimrc (windows), 其示例文件位于 $VIMRUNTIME/vimrc_example.vim

脚本文件可以包含任何冒号命令, 其注释使用 " 开头.

阅读全文 »

在PC上如果一个代码需要经常调试的话,那么建议为GDB单独开一个窗口然后不退出,这样gdb就可以保持断点等一些设置, 而使用 r 运行时,又会调用最新编译的可执行文件,这样就不用每次重新启动又设置很多配置了。

基础必备知识

gdb完整调试的必备条件

要让gdb能够完整的调试一个程序,必须具备:

  • dwarf(debugging with attributed record formats) : 编译每个源码必须加上 -g 选项以包含 dwarf 信息
  • symbol table : 默认的不加任何参数编译出的可执行文件都带有symbol table
  • source code : 源代码

dwarf 格式中包含了对程序中函数名、变量名等符号的详细描述(比如在源码中的位置,大小,名称等等)。可以使用 dwarfdump 来查看其格式。

但 dwarf 中并不包含实际的代码,所以为了让gdb可以跟踪代码,还需要整个源码。 默认情况下源码路径即为编译路径,如果移动了可执行文件位置到别处,需要设置源文件路径

为了明确一个可执行文件中是否含有dwarf和symbol table,可以使用 readelf -S 的方式查看是否有对应的段。

其实在嵌入式调试中,即使gdb没有源码,只要有dwarf也可以抓取到很多有用的信息。

需不需要源码需要根据实际情况而定。

在产品出厂时,就不需要 dwarfsymbol table 信息了,这时使用 strip 来瘦身。

  • 在嵌入式中使用对应的工具,比如在arm-linux中使用 arm-linux-gnueabihf-strip

正式调试前的准备工作

生成带调试信息的可执行文件

在使用 GDB前,需要让编译器 将代码的调试信息包含在可执行文件中 ,以C为例,gcc编译器需要加上 -g 选项:

gcc -g hello.c -o hello

很多时候也会使用CMake来生成,一般在 CMakeLists.txt 文件中加入:

set(CMAKE_BUILD_TYPE Debug)
#或者也可以在入口参数中指定
cmake -DCMAKE_BUILD_TYPE=Debug ....
阅读全文 »

概览

IEEE micro 中定义了 SDR(软件无线电) 通信协议,其基本思想是:

SDR的底层由一个软件引擎总管,其他应用软件(本机软件或者上位机软件)通过一个统一的协议来与引擎通信达到控制底层硬件的目的。

这种构架具有如下优点:

  • 抽象硬件底层,使得应用软件不用关心具体的硬件而独立开发。
  • 开发出的软件理论上是可以兼容所有满足此协议的底层硬件,达到跨平台的目的。
interface.jpg如上图所示,此协议的特点为:
  • 协议包分为控制包,信号包和环境包,
  • 信号包用于传输高速信号,控制包用于控制所有可控的器件,环境包用于返回硬件环境
阅读全文 »

概览

USRP Hardware Driver(UHD) 是由 Ettus Research 公司所提供的开源免费SDR库,使用此库统一的协议(简化了IEEE micro 的协议)来完成与SDR设备的通信。

最终的用户使用库的接口便可以统一抽象设备,此库可以用来单独编写应用程序或者与其他的第三方软件接口。

uhd_struct.jpg

此库具有以下特点:

  1. 抽象SDR硬件设备
  2. 支持设备和主机,设备和设备之间的双向通信
  3. 通信协议以流的形式传输以包的形式来分隔
阅读全文 »