
C/C++/ASM
文章平均质量分 71
C/C++/ASM
IOsetting
呵
展开
-
Ubuntu下串口工具 PicoCOM 的使用和时间戳显示
Ubuntu下的串口软件, 除了 CuteCOM, screen, MiniCOM 以外, 还有一个和 MiniCOM 很像的 PicoCOM. 最近在调试 CH340C 串口的过程中, 发现只有 PicoCOM 的连接Reset才能正常工作, 因此单独记录一下原创 2023-05-14 19:44:54 · 3236 阅读 · 0 评论 -
ADPCM(自适应差分脉冲编码调制)的原理和计算
ADPCM 用于解决 DPCM 的差值宽度问题, 通过定义一个差值表(例如IMA ADPCM 中使用 89个固定差值, 取值从7到32767), 将差值的范围放宽到16bit, 此时差值在数组中的编号只需要6bit就可以表示(0 - 88), 再进一步只记录编号的变化值, 就将变化量压缩到了4bit. ADPCM算法并没用固定标准, 最常见的是IMA ADPCM. 以下以 IMA ADPCM 为例进行说明原创 2022-11-22 20:41:30 · 2132 阅读 · 0 评论 -
GCC Arm 12.2编译提示 LOAD segment with RWX permissions 警告
关于 LOAD segment with RWX permissions 警告. 这是 Binutils 2.39 引入的一个新的安全类型的警告, GCC在升级版本时会带着新版本的 Binutils 一起发布. 如果要消除这个警告, 要么修改ld文件, 要么屏蔽掉它.原创 2022-10-05 21:51:12 · 5146 阅读 · 0 评论 -
GCC Arm 11.3rel1, 12.2编译提示 _close is not implemented and will always fail
使用GCC Arm工具链开发的项目, 在11.2下编译正常, 但是升级到 arm-gnu-toolchain-11.3.rel1 以及 arm-gnu-toolchain-12.2 之后, 编译出现警告 /opt/gcc-arm/arm-gnu-toolchain-11.3.rel1-x86_64 libc_nano.a(libc_a-closer.o): in function `_close_r':原创 2022-10-05 10:29:54 · 2990 阅读 · 2 评论 -
SDCC 的 MCS-51 汇编基础概念和传参方式
SDCC汇编函数参数传递, 第一个参数和返回值总是使用全局寄存器 DPL, DPH, B 和 ACC, 对于第二个及之后的参数, 分非重入方法和重入方法两种情况, 可能存储在全局变量中也可能存储在堆栈上原创 2022-01-23 21:07:41 · 1444 阅读 · 0 评论 -
STC8PROG - Linux下的 STC8G STC8H 烧录工具
在Ubuntu20.04下测试, 支持X86 64位的Linux环境, 支持MCU型号为 STC8G, STC8H, STC8A8K64D4, STC15系列, 经过测试的型号: STC8G1K08A, STC8H1K08, STC8H3K32S2, STC8H3K64S4, STC8H8K64U, STC8A8K64D4, STC15W104, STC15F104W, STC15W408AS. 用于解决在Linux下烧录工具stcgal无法烧录STC8系列的芯片的问题.原创 2021-12-24 23:17:31 · 4672 阅读 · 6 评论 -
联盛德 HLK-W806 (十二): Makefile组织结构和编译流程说明
通过 WM-SDK-W806 这个项目, 实例分析一下C语言项目中 Makefile 的组织结构. 从项目中与make相关的文件, 可以看到这是一个递归make的结构. 主要的文件都已经在结构中标出. 执行`make`时, 先执行主Makefile, 主Makefile中依次包含conf.mk, inc.mk, rule.mk. 行进到rule.mk, 在其中中执行指定的目标, 如果未指定, 则执行默认的all目标. 这里重点分析rule.mk文件, 因为这里定义了所有的规则, 以及对应的目标处理关系原创 2021-12-20 23:44:12 · 711 阅读 · 0 评论 -
GCC项目的文件组织和编译步骤分解
C项目的文件组织和编译C项目的代码, 由头文件(.h后缀)和C文件(.c后缀)组成C语言的函数和变量, 分声明和定义两个阶段头文件和C文件是等价的, 相当于C文件的一部分, 其功能由人为划分, 用于变量和函数的声明, 头文件也可以用于变量和函数的定义, 但是这属于非标准用法, 一般不这么用同一个编译中, 函数在一处定义, 处处可用(除非使用static关键字)在A.c中定义后, 在B.c中用extern声明这个函数, 就可以调用将A.c中的函数声明提取到A.h, 在B.c中include A原创 2021-08-26 00:14:58 · 551 阅读 · 0 评论 -
C51开发中的static, const, code关键字
max7219是一个用于驱动8位7段数字LED或者8x8点阵LED的驱动芯片, 以列扫描的方式, 用16个pin管理64个发光点, 显示8个数字时刷新率为500-1300Hz, 典型值为800Hz.pin脚功能DIG0 - DIG7: 这个8个pin, 分别代表一个7段数字+点号SEGA - SEGG, DP: A-G每个代表7段数字里的一段, DP代表数字间的小数点每一段的驱动电流是40mA, 如果负载需要更大的电流, 需要外接硬件驱动V+, GND: 电压和接地DIN: 串行数据输入原创 2021-08-20 00:57:40 · 4299 阅读 · 0 评论 -
Win7下msys64安装mingw工具链
1. 安装msys64安装到指定目录, 例如C:\msys642. 命令行更新运行msys2.exe打开命令行窗口,执行命令pacman -Syuu3. 修改安装源进入msys64/etc/pacman.d/, 需要修改三个文件, 都添加在Server列表第一行mirrorlist.mingw32Server = http://mirrors.ustc.edu.cn/ms...原创 2019-11-06 19:33:00 · 690 阅读 · 0 评论 -
C语言笔记
常量赋值无符号常数使用U后缀, 例如1U, 2U, 在需要对bit进行操作时使用num { IsDynamic = (1U << 0), // ... IsSharable = (1U << 1), // ... IsStrong = (1U << 2) // ...};就等价于enum { IsDynamic = 1U...原创 2019-11-04 21:43:00 · 698 阅读 · 0 评论 -
Redis C客户端Hiredis代码分析
初始化redisContext - Redis连接的上下文/* Context for a connection to Redis */typedef struct redisContext { int err; /* Error flags, 0 when there is no error */ char errstr[128]; /* String represen...原创 2018-08-31 12:25:00 · 275 阅读 · 0 评论 -
Ubuntu18.04中配置wxWidget3.0.4开发环境
准备工作在https://www.wxwidgets.org/downloads/ 下载最新的稳定版wxWidgets-3.0.4.tar.bz2安装依赖sudo apt install libgtk-3-dev build-essential checkinstall编译安装$ make# ... 略 ...$ sudo checkinstall checkinst...原创 2018-08-28 14:32:00 · 192 阅读 · 0 评论 -
C++比较特殊的构造函数和初始化语法
C++的构造函数看Qt创建的示例函数, 第一个构造函数就没看懂. 是这样的Notepad::Notepad(QWidget *parent) : QMainWindow(parent), ui(new Ui::Notepad) { ui->setupUi(this);}语法 - 使用初始化列表来初始化字段Line::Line(double len)...原创 2018-08-26 23:32:00 · 159 阅读 · 0 评论 -
QT & C++笔记
语法变量声明直接声明的变量, 其赋值操作会产生值拷贝, 例如QString b("some text");QString a(b);int a = 10;int b = a;对于QList, QMap容器, 赋值操作是值拷贝, 例如下面的b变量会得到一份a的拷贝.QStringList a({"aa", "bb", "cc"});QStringList b = a;...原创 2020-05-28 12:23:00 · 275 阅读 · 0 评论 -
QT5.x开发环境配置
准备工作参考https://wiki.qt.io/Install_Qt_5_on_Ubuntu .# 安装g++sudo apt install build-essential# sudo apt install libfontconfig1# 安装openGL支持sudo apt install mesa-common-dev libglu1-mesa-dev从ustc镜...原创 2018-08-25 22:59:00 · 534 阅读 · 0 评论 -
QT C++工程CI环境笔记
开发环境Ubuntu18.04 or Ubuntu20.04Qt Creator 4.6.x (Based on Qt 5.11.x)APT list:apt-transport-https git dh-make build-essential autoconf autotools-dev qt5-default libssl-dev qt5keychain-dev devscrip...原创 2020-05-19 19:22:00 · 376 阅读 · 0 评论 -
Ubuntu x86-64汇编(6)
寻址方式 Addressing Modes地址和值 Addresses vs Values在64bit架构中, 地址是64bit. 访问内存内容的唯一方式就是通过方括号, 不加方括号读取的只是地址, 例如mov rax, qword [var1] ; value of var1 in raxmov rax, var1 ; address of var1 ...原创 2018-05-30 01:58:00 · 168 阅读 · 0 评论 -
Ubuntu x86-64汇编(5) 控制指令
控制指令 Control Instructions汇编的控制指令主要包含标签, 无条件跳转和有条件跳转几种标签 Label标签用于标记跳转的目的, 必须以字母开头, 后面跟着字母, 数字和下划线, 最后以冒号:结束yasm里的标签是区分大小写的无条件跳转 Unconditional Control Instructions格式jmp <label>jmp st...原创 2018-05-29 17:39:00 · 126 阅读 · 0 评论 -
Ubuntu x86-64汇编(3) 数值操作指令
指令标注 Operand Notation指令instruction即运算operation, 操作的对象为一个或多个运算数operand, 使用不同的标记表示不同的约束<reg> 寄存器, 运算数必须是一个寄存器. Register operand. The operand must be a register.<reg8>, <reg16>, &l...原创 2018-05-28 10:46:00 · 272 阅读 · 0 评论 -
Ubuntu x86-64汇编(4) 数值操作指令
整数乘法指令 Integer Multiplication对于有符号数的乘法有特殊的规则, 因此无符号数乘法和有符号数乘法对应着不同的指令mul和imul. 乘法会产生两倍尺寸的数值结果, 即两个n-bit数相乘会产生2n-bit的数. 两个8bit数相乘会产生16bit的数. 对于乘法指令有许多变种, 例如对于带符号乘法, 一些指令能将结果裁剪至和源数值一样的尺寸.无符号的乘法 Unsig...原创 2018-05-28 23:58:00 · 323 阅读 · 0 评论 -
Ubuntu x86-64汇编(1)
x86-64 Assembly Language Programming with Ubuntu 的读书记录x86计算机体系架构架构总览CPU, RAM, 存储, 输入输出设备等, 数据的尺寸(byte 8bit, word 16bit, double-word 32bit, quadword 64bit, double-quadword 128bit)CPU寄存器64bit寄存器: ...原创 2018-05-12 23:45:00 · 261 阅读 · 0 评论 -
Ubuntu x86-64汇编(2)
开发工具链汇编编译器: yasm连接器: ld载入工具: os自带Debug工具: dddyasm安装tar zxvf yasm-1.3.0.tar.gz cd yasm-1.3.0/./configure --prefix=/opt/yasmmakesudo make installcd /usr/bin/sudo ln -s /opt/yasm/bin/yasm yas...原创 2018-05-13 00:20:00 · 109 阅读 · 0 评论 -
二进制的手工计算, 以及计算机的浮点数存储
十进制转二进制的计算1. 整数部分 按二进制数的定义, 将十进制转为二进制实际上就是将十进制拆分为用2的级数表示的序列, 计算方法实际上就是在模拟程序的处理方式: 将二进制不断地">" (shift right, 右移), 舍掉小数部分, 记下每次个位的值, 就能得到二进制的序列. 举例, 计算201的二进制序列201 -> 1 //除2为100, 余1100 -> 0...原创 2017-12-11 16:39:00 · 256 阅读 · 0 评论 -
用C读取json文件
ajconf_t *read_jconf(const char *file){ static jconf_t conf; // 清空数据 memset(&conf, 0, sizeof(jconf_t)); // 用于存储文件内容的字符串指针 char *buf; // 解析文件内容后的json结构化数据 json_valu...原创 2017-12-06 01:48:00 · 175 阅读 · 0 评论 -
在CLion项目中指定不同版本的链接库
在项目中, 需要使用到libevent-2.1.x, 但是Ubuntu16.04自带的libevent版本为2.0.5, 需要另外编译安装新版的libevent, 安装过程很简单tar zxvf libevent-2.1.8-stable.tar.gz cd libevent-2.1.8-stable/# 指定另外的安装路径, 以免覆盖系统自带的版本./configure --pref...原创 2017-12-05 15:07:00 · 277 阅读 · 0 评论 -
m4, autoconf
http://www.gnu.org/software/m4/m4.htmlGNU M4 is an implementation of the traditional Unix macro processor. It is mostly SVR4 compatible although it has some extensions (for example, handling more th...原创 2017-10-30 13:53:00 · 198 阅读 · 0 评论 -
Libevent例子(二)
服务端#include<netinet/in.h>#include<stdio.h>#include<string.h>#include<event.h>#include<event2/listener.h>#include<event2/bufferevent.h>#include<event2/th...原创 2017-11-17 01:51:00 · 100 阅读 · 0 评论 -
Libevent官方代码样例学习(一)
在Ubuntu16.04中, libevent的默认安装位置为#在 trusty 发行版中 amd64 硬件架构下的 libevent-2.0-5 软件包文件清单/usr/lib/x86_64-linux-gnu/libevent-2.0.so.5/usr/lib/x86_64-linux-gnu/libevent-2.0.so.5.1.9/usr/share/doc/libevent...原创 2017-12-05 01:07:00 · 99 阅读 · 0 评论 -
Libevent官方代码样例学习(二)
连接监听器: 接收TCP连接请求evconnlistener机制用于监听并接受TCP连接请求. 这些方法在event2/listener.h中声明, 在Libevent 2.0.2-alpha之后的版本中可用.创建和释放evconnlistener接口struct evconnlistener *evconnlistener_new( struct event_base *b...原创 2017-12-05 02:08:00 · 104 阅读 · 0 评论 -
Libevent例子(一)
服务器端#include<stdio.h>#include<string.h>#include<errno.h>#include<event.h>#include<event2/bufferevent.h>void accept_cb(int fd, short events, void* arg);void sock...原创 2017-11-15 10:58:00 · 91 阅读 · 0 评论 -
Makefile 和 CMakeLists.txt
MakefileMakefile 的格式target: prerequisites[tab]command例子#Makefileall:chap1 chap2chap1: 1-1 1-21-1 : 1_1.c gcc -o o_1_1 1_1.c -lc1-2 : 1_2.c gcc -o o_1_2 1_2.c -lcchap2: 2-1 2-2...原创 2017-10-28 16:48:00 · 192 阅读 · 0 评论