explorer

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

0%

说明: 本来我的意图是以最少的代码兼容 uhd 的底层协议逻辑,结果分析了好几天都没有看懂它的这些逻辑 ^_^!!!!

所以我的简易方式为: 以接口类为基类实现自己的子类,在子类中实现操作方法。

至于uhd协议逻辑部分代码,等有时间再来好好分析吧。

阅读全文 »

空模板的添加

假设我们的硬件构架为主机与设备通过USB通信,设备端分析协议并且底层的设备操作都是由设备端来完成的,主机仅仅需要发送命令即可,那么这种架构就是最简便的。

目前先以模拟一个不包含底层协议的设备为目标,实现设备操作流程的梳理。

阅读全文 »

程序,软件与软件企业之间的关系

程序(算法和数据结构)是基本功,但是在算法和数据结构之上,软件工程决定了软件的质量。商业模式决定了一个软件企业的成败。 软件从业人员和软件企业的道德操守会极大地影响软件用户的利益。

相互之间的关系如下:

  • 程序 = 数据结构 + 算法
  • 软件 = 程序 + 软件工程
阅读全文 »

单元测试

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

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

阅读全文 »

个人能力的衡量与发展

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

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

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

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

Hello World

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

#include <iostream>

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 <execfile> 来查看其格式。

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

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

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

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

在产品出厂时,就不需要 dwarfsymbol 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 ....
阅读全文 »