程序,软件与软件企业之间的关系
程序(算法和数据结构)是基本功,但是在算法和数据结构之上,软件工程决定了软件的质量。商业模式决定了一个软件企业的成败。 软件从业人员和软件企业的道德操守会极大地影响软件用户的利益。
相互之间的关系如下:
- 程序 = 数据结构 + 算法
- 软件 = 程序 + 软件工程
[What]软件工程_个人技术和流程
单元测试
单元测试是为了保证一个软件模块是否稳定,功能是否覆盖完全且正确无误的测试方式。
无论是嵌入式系统还是上层应用软件,其测试的基本思想都是:将软件模块看成一个黑盒,通过向黑盒输入一个参数,然后检验黑盒输出是否符合预期。
[What]软件工程_软件工程师的成长
个人能力的衡量与发展
软件开发的工作量和质量的衡量
- 通过代码行数和功能点来表示一个项目的大小
- 通过软件开发所耗费的总时间来表示项目的大小
- 其实这个还和团队人员能力相关,同一个项目能力更强的团队所创作代码或许更精简、效率更高、花费的时间更短
- 项目质量的确定
- 用发布时还未解决的bug数量除以代码的行数来表示
- 用代码从最开始到发布所返工修改的行数来表示
- 交付的时间
- 个人预计完成任务的时间与实际交付的时间,方差越小个人越成熟稳定
[What]boost库 入门
boost 库是C++的增强库,强化了C++的很多功能。
[What]boost 常用功能
boost库的功能太多,所以用此文来记录一些常用的类和方法的 基本使用规则 ,避免遗忘。
这些说明都是查询官方文档而做的笔记,英语比较渣(^_^!),无法做到一目十行。 每次遗忘都要重头来看,比较耗时间......
[What]cmake 基本使用
Hello World
- 新建文件夹并编写代码:
1 | //hello.cpp |
[What] vim 基本操作总结
基本知识
脚本
vim 的设置可以写入脚本文件中来达到批量配置的目的, 在 vim 中使用 :scriptnames
命令查看作用的脚本及其路径.
一般情况下, vim启动脚本路径为 ~/.vimrc
(linux) 或 $HOME/_vimrc, $VIM/_vimrc
(windows), 其示例文件位于 $VIMRUNTIME/vimrc_example.vim
脚本文件可以包含任何冒号命令, 其注释使用 " 开头.
[What]GDB 基本使用总结
在PC上如果一个代码需要经常调试的话,那么建议为GDB单独开一个窗口然后不退出,这样gdb就可以保持断点等一些设置,
而使用 r
运行时,又会调用最新编译的可执行文件,这样就不用每次重新启动又设置很多配置了。
基础必备知识
gdb完整调试的必备条件
要让gdb能够完整的调试一个程序,必须具备:
- dwarf(debugging with attributed record formats) : 编译每个源码必须加上
-g
选项以包含dwarf
信息 - symbol table : 默认的不加任何参数编译出的可执行文件都带有symbol table
- source code : 源代码
dwarf 格式中包含了对程序中函数名、变量名等符号的详细描述(比如在源码中的位置,大小,名称等等)。可以使用 dwarfdump <execfile>
来查看其格式。
但 dwarf 中并不包含实际的代码,所以为了让gdb可以跟踪代码,还需要整个源码。 默认情况下源码路径即为编译路径,如果移动了可执行文件位置到别处,需要设置源文件路径。
为了明确一个可执行文件中是否含有dwarf和symbol table,可以使用 readelf -S <execfile>
的方式查看是否有对应的段。
其实在嵌入式调试中,即使gdb没有源码,只要有dwarf也可以抓取到很多有用的信息。 需不需要源码需要根据实际情况而定。
在产品出厂时,就不需要 dwarf
和 symbol table
信息了,这时使用 strip <execfile>
来瘦身。
- 在嵌入式中使用对应的工具,比如在arm-linux中使用
arm-linux-gnueabihf-strip <execfile>
正式调试前的准备工作
生成带调试信息的可执行文件
在使用 GDB前,需要让编译器 将代码的调试信息包含在可执行文件中 ,以C为例,gcc编译器需要加上 -g
选项:
gcc -g hello.c -o hello
很多时候也会使用CMake来生成,一般在 CMakeLists.txt 文件中加入:
set(CMAKE_BUILD_TYPE Debug) #或者也可以在入口参数中指定 cmake -DCMAKE_BUILD_TYPE=Debug ....
[What]SDR通信协议概览
概览
在 IEEE micro
中定义了 SDR(软件无线电) 通信协议,其基本思想是:
SDR的底层由一个软件引擎总管,其他应用软件(本机软件或者上位机软件)通过一个统一的协议来与引擎通信达到控制底层硬件的目的。
这种构架具有如下优点:
- 抽象硬件底层,使得应用软件不用关心具体的硬件而独立开发。
- 开发出的软件理论上是可以兼容所有满足此协议的底层硬件,达到跨平台的目的。

- 协议包分为控制包,信号包和环境包,
- 信号包用于传输高速信号,控制包用于控制所有可控的器件,环境包用于返回硬件环境
[What]USRP UHD 构架分析
概览
USRP Hardware Driver(UHD) 是由 Ettus Research 公司所提供的开源免费SDR库,使用此库统一的协议(简化了IEEE micro 的协议)来完成与SDR设备的通信。
最终的用户使用库的接口便可以统一抽象设备,此库可以用来单独编写应用程序或者与其他的第三方软件接口。

此库具有以下特点:
- 抽象SDR硬件设备
- 支持设备和主机,设备和设备之间的双向通信
- 通信协议以流的形式传输以包的形式来分隔