0%

我们在谈到“串口”的时候,往往还会提到 RS-232 、RS-485 等等,它们之间的关系是什么?

串行端口 的概念,是和 并行端口 相对的。串口一次只传输 1bit ,但并行端口会同时传输多个 bit 。

通信,传输字符/字节。

历史上字节长度曾基于硬件为 1-48 bit不等,最初通常使用6 bit 或9 bit 为一字节。今日标准以 8 bit 作为一字节。

虽然以太网、FireWire 和 USB 等接口也以串行流的形式发送数据,但术语 串行端口 通常表示符合 RS-232 或相关标准(如 RS-485 或 RS-422)的硬件。

我们可能会用到 232 串口线、或者 422 串口线连接两个设备,但使用 Qt serial port 模块写软件不用考虑使用了哪种串口线,只需要关注收发两端的波特率、校验位、停止位等一致。

The most well-known options are

  • speed,
  • number of data bits per character,
  • parity, and
  • number of stop bits per character.

硬件

RS-232 是美国电子工业联盟制定的串行数据通信的接口标准,它广泛用于计算机串行接口外设连接。

它规定连接电缆和机械、电气特性、信号功能及发送过程。其他常用电气标准还有 RS-422-A、RS-423A、RS-485。

出于节省资金和空间的考虑,25 个管脚的 DB-25 连接器已经不常见,9 个管脚的 DB-9 型连接器被广泛使用。RS-232 中 DB-9 型连接器的信号和管脚分配:2-收,3-发,5-接地。

阅读全文 »

从桌面开发突然进入 VxWorks 嵌入式开发,有几个认知上的调整:

  1. 桌面开发的时候,驱动、操作系统和 IDE 之后,我们才开始新建项目、编写代码;
  2. 嵌入式开发,从板级支持包、系统镜像就需要新建对应的项目了。
  3. 理解嵌入式系统可裁剪,镜像大概率并不支持那些在桌面操作系统上常见的指令、服务和开发所需的库,需要有针对性的一个一个配置相应的驱动、组件。

Das U-Boot

加载桌面操作系统之前的引导阶段,按下任意键进入 BIOS。与之类似,我们在板子引导程序读秒期间(使用串口调试工具)发送任意键能够进入 uboot,使用 printenv 等命令查看状态。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 查看版本
version
# 获取帮助
help
?
# 打印环境变量
printenv
# 查询 FAT 格式设备的目录和文件信息
fatls scsi 0:8
fatls scsi 0:1
# bootcmd 自动启动时执行命令
setenv bootcmd "fatload scsi 0:1 0x90100000 Ft2004.elf; bootvx32 0x90100000;"
saveenv
# 查看日期时间
date
# 查看帮助
help date

# 更多
fatinfo - print information about filesystem
fatload - load binary file from a dos filesystem
fatls - list files in a directory (default /)
阅读全文 »

FTP 通信分为主动 active 被动 PASV 模式。

FTP 通信会占用两个 TCP 通道:一个用于命令,一个用于数据。

主动、被动是站在(响应命令的)服务端的角度来说:
FTP 客户端首先向服务端 21 端口发送命令,然后

  • (最初只有)主动模式:客户端启动端口,服务端连接
  • (解决痛点)被动模式:服务端启动端口,客户端连接

windows 平台下 cmd/powershell 中的 ftp 命令不支持被动模式,文件管理器支持被动模式。

阅读全文 »

摘抄自《计算机网络(第7版)-谢希仁》教材,读书笔记。

OSI 的七层协议体系结构的概念清楚,理论也较完整,但它既复杂又不实用。

TCP/IP 的体系结构则不同,但它现在却得到了非常广泛的应用。TCP/IP 是一个四层的体系结构,它包含应用层、运输层、网际层和网络接口层(用网际层这个名字是强调这一层是为了解决不同网络的互连问题)。不过从实质上将,TCP/IP 只有最上面的三层,因为最下面的网络接口层并没有什么具体内容。

互联网是由大量的异构(heterogeneous)网络通过路由器(router)相互连接起来的。互联网使用的网络层协议是无连接的网际协议 IP(Internet Protocol) 和许多种路由选择协议,因此互联网的网络层也叫做网际层或 IP 层。

链路层

局域网虽然是个网络,但我们并不把局域网放在网络层中讨论。这是因为在网络层要讨论的问题是多个网络互联的问题,是讨论分组(packet)怎样从一个网络,通过路由器,转发到另一个网络。在本章中我们研究的是在同一个局域网中,分组(packet)怎样从一台主机传送到另一台主机,但并不经过路由器转发。从整个互联网来看,局域网仍属于数据链路层的范围。

packet 小包裹、信息包,在教材中一般翻译为“分组”,但“分组”在日常对话中多理解成动词,给读者造成困扰。分组:

阅读全文 »

Managing C++ libs with CMake ExternalProject and Git

CMake has a functionality called ExternalProject_add, which can use, to automatically check out a git repository, and build that as part of the normal build process.

Of course, the same functionality would be possible with git submodules, but honestly, I always found this part of git rather cumbersome, and unnecessarily complex, for what I want to do.

Git 子模块

启动外部程序

在 windows 下如何使用 C++ 语言启动外部程序?

函数 system()

使用 CMD.exe 命令行窗口解释输入的字符串命令,引用来自 system, _wsystem

The system function passes command to the command interpreter, which executes the string as an operating-system command.

system uses the COMSPEC and PATH environment variables to locate the command-interpreter file CMD.exe.

阅读全文 »

GNOME 和 MATE 都是桌面环境。

GNOME2 在 2010年9月之后,转向 GNOME3 的开发。

出现分歧,在 2011 年基于 GNOME2 派生出 MATE。

Ubuntu MATE 针对老旧桌面型、笔记型、树莓派等硬件性能等级不高的设备,或喜欢简洁、不用特效桌面环境者。

银河麒麟 V10 在做去 GNOME,去 MATE 化。

UKUI 或称 UbuntuKylin UI,最早是一个基于 Mate 制作的桌面环境。

中标麒麟 V7 在系统信息中展示桌面环境使用 MATE。

阅读全文 »

互联网协议套件

OSI 七层模型和 TCP/IP 四层模型:

  • http、ftp 应用层
  • [表示层]
  • [会话层]
  • tcp/udp 传输层
  • ip、icmp 网络层
  • ethernet/以太网 数据链路层
  • [物理层]
阅读全文 »

学习 Qt 源码,避不开断点调试和 pdb 文件。有三种思路:

  • 使用 Qt 4.8.7,安装包中源码和 pdb 文件都有,版本太旧;

  • 使用 Qt5.12.x,有离线安装包,但

    • 缺失 pdb 调试文件,单独下载 pdb 文件后与源码版本不一致,断点位置偏移;
    • 缺少 moc_qobject.cpp 等构建过程中生成的中间文件,影响理解;
  • 使用 Qt5.15.x 等任意版本,从源码构建,难度大,收益也大。

摸索之后,选择了从源码构建 qtbase 基础模块,用于学习核心特性足够。稍后出一键构建脚本。

先避开图形界面程序 Qt Application,通过 Qt Console Application 学习,只使用 Core 模块。

学习目标:

  • 元对象系统,搞定 moc_qobject.cpp 就差不多学会了
  • 事件循环,核心实现都在 QThreadData 类中
  • 信号槽,= 元对象系统中的函数调用能力
  • Qt 跨模块(dll/exe) 内存分配

思考:元对象系统在完成信号槽之外,还实现了哪些特性?

阅读全文 »

合作厂商A的代码,虽然宣称支持跨平台,早期也的确做过大量的平台适配工作。但目前看来,跨平台的工作应该是暂停了,至于后期是否重新拾起来不得而知。

除了客户端是 windows 版本之外,所有的服务(包括设备接入、流媒体服务、流媒体服务调度、存储服务、存储服务调度等等)都是使用 centos7 作为部署环境的。至于是否使用 centos7 作为开发环境,就看各位喜好了,但编译环境肯定还是 centos7 没跑了。

如果使用 centos7 作为编码环境,有两个选择:

  • 自己搭建虚拟机,借由图形界面的 IDE 进行开发,使用 git/svn 等版本控制工具时也更加直观
  • 使用 xshell 等工具远程访问开发服务器,借由 vim 进行开发

后者更具有灵活性,也更方便和同事合作开发,避免同事改动内容后(未提交 svn)手工导出到虚拟机的烦恼,后期如果权限收紧 svn 不再开放外网权限,手工导出源码存在合规问题,即便合规导入导出也是一件很繁琐的事情。但没有图形界面沟通时总是短板(组内同事水平不一)。

先尝试 vim 编码开发,如果学习曲线不够平滑,效率提升困难,后面试验使用图形界面进行开发。

阅读全文 »

Kubernetes 是一个开源的容器编排引擎,用来对容器化应用进行自动化部署、 扩缩和管理。

kubernetes

如何理解 k8s 对象这个概念? 使用 Kubernetes 对象

k8s 可以有多个节点(Node),每个节点可以有多个 POD,pod 是一组(一个或多个)容器。

Kubernetes 通过将容器放入在节点(Node)上运行的 Pod 中来执行你的工作负载。 节点可以是一个虚拟机或者物理机器。

Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。

每个 Pod 一个容器”模型是最常见的 Kubernetes 用例。

阅读全文 »