学习笔记
文章平均质量分 56
星沉地动
简洁是一种美!
展开
-
STM32F407移植OpenHarmony笔记9
继上一篇笔记,已经完成liteos内核的基本功能适配。今天尝试启动OHOS和XTS兼容性测试。原创 2024-02-04 16:40:13 · 1048 阅读 · 0 评论 -
STM32F407移植OpenHarmony笔记8
继上一篇笔记,成功开启了littlefs文件系统,能读写FLASH上的文件了。今天继续研究网络功能,让控制台的ping命令能工作。原创 2024-02-02 18:15:40 · 1106 阅读 · 0 评论 -
STM32F407移植OpenHarmony笔记7
继上一篇笔记,成功启动了liteos_m内核,可以创建线程了,也能看到shell控制台了。今天研究文件系统,让控制台相关文件命令如mkdir和ls能工作。原创 2024-02-01 17:40:12 · 1626 阅读 · 0 评论 -
STM32F407移植OpenHarmony笔记6
继上一篇笔记,编译好STM32的裸机程序,能点亮LED灯了。下一步就是启动liteos_m内核了。原创 2024-01-31 17:40:16 · 651 阅读 · 0 评论 -
STM32F407移植OpenHarmony笔记5
继上一篇笔记,搭建好STM32的编译框架,编译出来的OHOS_Image.bin并不能跑不起来。今天要在bsp里面添加一些代码,让程序能跑起来。原创 2024-01-31 15:50:27 · 643 阅读 · 0 评论 -
STM32F407移植OpenHarmony笔记4
上一篇写到make menuconfig报错,继续开整。make menuconfig需要/device/soc/*下面有对应的Kconfig文件。直接去gitee下载stm32的配置文件拿来参考用。先提取Kconfig文件,后面再添加其它文件。原创 2024-01-30 17:27:35 · 1249 阅读 · 1 评论 -
STM32F407移植OpenHarmony笔记3
接上一篇,搭建完环境,找个DEMO能跑,现在我准备尝试从0开始搬砖。首先把/device和/vendor之前的代码全删除,这个时候用hb set命令看不到任何项目了。/device目录是硬件设备目录,包括soc芯片厂商和board板级支持代码。创建目录规则:“device/{芯片厂商}/{芯片开发板}”。/vendor目录是产品项目定义目录。创建目录规则:“vendor/{产品模组厂商}/{产品模组名称}”。原创 2024-01-30 16:03:27 · 625 阅读 · 0 评论 -
STM32F407移植OpenHarmony笔记2
搭建完开发环境后,我们还要继续工作。官方合作的开发板刚好有STM32F407,我准备试一下开发板的demo,虽然我用的不是他们的开发板。原创 2024-01-24 16:00:21 · 655 阅读 · 0 评论 -
STM32F407移植OpenHarmony笔记1
STM32F407移植OpenHarmony笔记1, 搭建开发环境。原创 2024-01-24 15:16:48 · 649 阅读 · 0 评论 -
解决VSCode使用SSH远程连接时无法指定用户名的问题
解决VSCode使用SSH远程连接时无法指定用户名的问题原创 2023-11-01 14:30:07 · 1259 阅读 · 0 评论 -
解释 Git 的基本概念
Git是一种分布式版本控制系统,用于管理代码和其他项目文件的版本,以及协调多个开发者对同一项目的工作。原创 2023-08-28 09:01:39 · 836 阅读 · 0 评论 -
apktool打包失败
在解包时如果加上-r参数,不反编译资源,则重打包没有问题。原创 2023-04-29 00:06:35 · 482 阅读 · 1 评论 -
APK安装失败:Failed to extract native libraries
错误提示:Failure [INSTALL_FAILED_INVALID_APK: Failed to extract native libraries, res=-2]可能是因为AndroidManifest.xml 中设置 extractNativeLibs= false导致的,将其修改为true。APK使用apktool重新编译后安装失败。原创 2023-04-28 23:59:41 · 2652 阅读 · 0 评论 -
常见分组加密算法和加密模式
常用加密算法及加密模式原创 2023-01-05 20:24:55 · 3573 阅读 · 2 评论 -
Marvell交换机芯片SMI接口读写协议
Marvell的88E6XXX系列交换机芯片基本都提供SMI(Serial Management Interface)接口。SMI接口使用2线串行通信,一个MDC提供时钟,一个MDIO为双向数据引脚。原创 2022-12-14 17:39:17 · 2849 阅读 · 0 评论 -
TELNET协议笔记
TELNET是基于TCP协议的应用层协议,服务器默认监听23端口。客户端与服务器建立连接后有一个协商过程,这个过程是可选的。协商完成后,就是数据透传了,服务器发什么客户端就显示什么内容。原创 2022-11-01 11:41:42 · 555 阅读 · 0 评论 -
一种简单通用的获取函数栈空间大小的方法
有些时候我们需要评估某个函数所使用的栈空间大小,比如创建线程的时候,我们需要估算该线程函数所需的栈空间,分配合适的线程栈。本文介绍一种简单的方法,来获取某个函数所占用的栈空间大小。...原创 2022-07-27 13:33:42 · 1720 阅读 · 0 评论 -
SNMP协议中OID的编码规则
SNMP协议中请求数据主要是读和写操作。每个操作会有一个目标对象,这个对象用OID来表示。OID是用一串数字表示:比如.1.3.6.1.2.1.1.5表示设备名称。并且父子节点之间用小数点(.)分隔,形成类似于文件夹的树形结构。...原创 2022-07-18 14:39:50 · 5603 阅读 · 0 评论 -
MODBUS常用功能码
Modbus中常用的功能码有8个,可以分为位操作和字操作两类.转载 2022-06-15 11:14:54 · 32343 阅读 · 7 评论 -
TFTP文件传输协议
TFTP是一个简单的文件传输协议,默认使用UDP,服务器开放69端口。关于协议的细节网上可以找到,在此不再赘述。本文用一个简单的通信实例来分析通信协议。原创 2022-06-15 10:58:08 · 1613 阅读 · 0 评论 -
代码缩进对齐用空格还是制表符?
代码缩进对齐用空格还是制表符?这是一个一直都存在争议的问题,C、C++语言没有要求。而python作为一门新兴语言,它规定了必须保持一致的缩进,不能混用空格和制表进行缩进。原创 2022-04-22 18:05:29 · 2220 阅读 · 0 评论 -
ANSI终端常用控制字符
以前收藏了一篇关于ANSI终端的介绍[http://www.termsys.demon.co.uk/vtansi.htm]最近发现这个链接已经打不开了!于是将相关的内容记录到博客当作备份。这里记录的是常用的控制字符,还有一些不常用的就没有列出来了。原创 2022-03-22 18:07:33 · 872 阅读 · 0 评论 -
Ambiq Apollo3使用内建SBL进行固件升级
Apollo3系列MCU出厂时内置了一段代码,官方名叫:SBL(Secure BootLoader)这段代码在片上FLASH的0x0000地址,占用空间48KB。这就是为什么我们在KEIL里面看到的IROM起始地址是0xC000。这段代码实现了开机通过UART、I2C、SPI下载用户程序的功能,同时还实现了IAP固件升级功能。原创 2021-12-16 14:23:17 · 1325 阅读 · 0 评论 -
蓝牙HID键盘码表
键名 键值 A 0x04 B 0x05 C 0x06 D 0x07 E 0x08 F 0x09 G 0x0A H 0x0B I 0x0C J 0x0D K 0x0E L 0x0F M 0x10 N 0x11 O 0x12 P 0x13 Q 0x14 R 0x15 S 0x16 T 0x17 U原创 2021-09-23 09:28:17 · 3142 阅读 · 0 评论 -
C语言计算char/short/int的最大值和最小值
假设我们不知道目标平台的char、short、int长度是多少个字节,如何得到这个类型的最大值和最小值?简单思考过后,我觉得可以采用无符号的最大值再右移1位的方式来得到有符号整数的最大值,把这个值取反又能得到最小值。使用下面的C语言代码进行验证,发现打印值是正确的。把代码中的 int 换成 char 和 short 都能正常打印出最大值和最小值。void main(void){ unsigned int tmp; int max_val; int min_val; tmp = 0 -原创 2021-06-03 18:19:55 · 2435 阅读 · 2 评论 -
Win10PE纯64位无法重命名文件夹
基于WIN10_x64系统制作的PE系统,完全删掉SysWOW64,只保留纯64位系统,注册表也删掉关于WOW64和32位相关的项。结果进入PE发现无法给文件夹改名,但文件可以正常改名,用cmd命令ren也可以改名。经过一番测试,结果发现与如下注册表有关:添加红框内的项,问题解决。...原创 2021-04-08 11:02:34 · 427 阅读 · 0 评论 -
RS485-MODBUS协议总结
简介Modbus是一种串行通信协议,是Modicon公司(现施耐德电气)于1979年发表的。目前Modbus已经成为工业领域通信协议的业界标准,并且是工业电子设备之间常用的连接方式。Modbus协议的通信机制是主从模式,在一条链路上可以挂载多个设备,其中有且只有一个主设备,其余设备均为从设备。在通信过程中,所有命令均由主设备发起,从机设备只能被动接收并响应主设备发起的命令。Modbus协议的数据帧格式有两种类型:一种是ASCII类型,数据类型使用字符串输出。一种是RTU类型,数据类型使用原创 2021-02-26 12:54:49 · 3798 阅读 · 0 评论 -
win32实现飘浮文字的一种实现方法
飘浮文字效果如下图:不可点击,不可选中,任务栏不显示图标,文字背景完全透明。实现方法是通过创建透明窗口来实现,在透明窗口上绘制文字。主要依靠系统提供的窗口扩展风格:WS_EX_LAYERED 实现层级窗口WS_EX_TRANSPARENT 实现鼠标穿透WS_EX_TOOLWINDOW 实现不在任务栏显示WS_EX_TOPMOST 实现文本置顶还有一个关键函数SetLayeredWindowAttributes(hWnd,0,0,...原创 2020-12-02 14:40:09 · 989 阅读 · 0 评论 -
LWIP使用TCP自带的KEEPALIVE功能
TCP_KEEPALIVE功能可以用来检测或保持基于TCP协议的客户端和服务器之间的链路畅通。当客户端和服务器之间长时间没有数据通信时,协议栈会发送一个特殊的空数据包,用来检测链路是否正常。接收到这个空数据包的一方会自动发送一个应答包,表示网络链路通信正常。发送方如果在规定的时间内没有收到应答包,则表示链路中断,自动断开TCP连接,并通知应用层TCP连接断开。整个交互逻辑完全在协议栈内完成,不需要在应用层做额外的工作,比较方便。应用示例:如下图所示,两个交换机中间的网线损坏,导致网络原创 2020-12-01 17:10:51 · 6389 阅读 · 5 评论 -
LWIP+ENC28J60长时间运行后无法访问外网服务器
一台设备,硬件使用STM32+ENC28J60,协议栈使用LWIP-2.1.2版本。作为TCP客户端与外网的服务器通信,正常运行了约2个月后,出现出法连接服务器的故障,查看UART日志发现:使用lwip的函数tcp_connect建立连接,返回成功。但在等待连接成功的回调时,发生了error异常,错误代码是ERR_ABRT(-13),一般表示连接超时。1.重新插拔网线,可以正常检测到网线断开和连接,说明网口芯片工作正常,网口的绿灯和黄灯也正常点亮。2.使用同局域网的电脑调用ping命令,可以原创 2020-11-17 09:53:27 · 1217 阅读 · 1 评论 -
C语言参考代码: 绘制直线、圆、椭圆、贝塞尔曲线(作者:Alois Zingl)
/********************************************************************* ** Curve Rasterizing Algorithm ** .转载 2020-10-22 10:05:31 · 887 阅读 · 2 评论 -
FM17550读不到身份证UID的问题
项目需要读身份证UID,用的是复旦微FM17550芯片,这款芯片封装是QFN32,管脚兼容RC522、SI522。RC522只支持ISO/IEC-14443-A类卡片,FM17550同时支持A类和B类,身份证是ISO/IEC-14443-B类卡片。软件驱动用的是复亘微官方提供的DEMO程序,该程序是基于STM32F103平台。简单更换GPIO和SPI接口后,移植到STM32F429平台。测试能读到A类卡的UID,但刷身份证没有反应,ReaderB_Request返回244(FM175XX_TIM原创 2020-10-16 10:25:07 · 2901 阅读 · 5 评论 -
C语言快速画直线和画圆的代码
Bresenham算法的原理我就不深入研究了,总之用来快速画直线和画圆是很成熟的算法。整个算法过程中只用了整数加减和移位,非常适用于运算能力有限的单片机系统。以下代码只需要把SetPixel替换为目标平台的画点函数就可以了。//-------------------------------------------------------------------------------------------------//Bresenham算法: 画直线void DrawLine(int x原创 2020-10-15 08:44:29 · 3849 阅读 · 5 评论 -
MQTT协议基础资料
MQTT(Message Queuing Telemetry Transport)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在TCP协议之上,与HTTP同属于应用层协议,默认端口号是1883,通常情况下使用TCP长连接进行通信。MQTT是一个C/S架构的发布/订阅模式的消息传输协议。服务器端称为broker,broker不负责具体业务,只负责转发客户端的消息,将客户端发布的数据,转发到所有订阅了该主题的客户端。MQTT的应用模式是多个客户端之间的原创 2020-07-09 16:34:42 · 749 阅读 · 0 评论 -
使用RC522(SI522)写UID卡0扇区0块
在淘宝买的UID白卡,可以使用特殊指令写0扇区0块,达到修改卡号的目的。一开始淘宝白卡各类繁多,没搞明白,查了查以下几个关键词:IC卡:普通的S50卡,0扇区0块不可更改。UID:0扇区0块可以更改(使用特殊指令)。CUID:0扇区0块可以更改(使用标准扇区读写指令)。FUID:0扇区0块可以更改(与UID类似,但只能写一次)。手上刚好有一块SI522的板子,SI522据说完全兼容MFRC522,拿来测试。通过查阅资料,得知写UID的流程是这样的:#1.寻卡send:2.原创 2020-07-03 14:40:01 · 10969 阅读 · 2 评论 -
MFC调用winhttp实现简易的HTTP服务器程序
Windows提供的winhttp函数库用来快速实现HTTP协议的应用程序,包括客户端和服务器端。服务器开发一般流程是这样的:1.HttpInitialize 初始化WinHTTP函数库;2.HttpCreateHttpHandle 创建一个HTTP队列句柄,用来接收HTTP请求;3.HttpAddUrl 绑定要监听的URL,写为http://*:80/表示所有网卡80端口的HTTP请求都处理,其中的*号可以改为IP地址;4.创建一个线程用来处理HTTP请求队列;5.HttpRece原创 2020-07-01 16:30:35 · 3236 阅读 · 13 评论 -
PLMN=46004是中国移动的SIM卡
今天遇到一张SIM卡,其IMSI号码是46004开头的,导致自动识别运营商失败,百度搜索到的资料都没有46004。经过一番搜索发现网上的资料比较老,后再来工信部网站找到了2017年发布的通告,46004是分配给中国移动的。顺便记录一下目前已分配的MCC+MNC号段。1.号码结构ITU-TE.212国际移动用户识别码(IMSI)是在数字公用陆地蜂窝移动通信网中唯一地识别一个移动用户的号码,其结构如图2所示,最长位数为15位,目前我国IMSI的位数为所允许的最长位数,即为一个15位数字的..原创 2020-06-01 15:14:59 · 8567 阅读 · 2 评论 -
二维码版本与容量
二维码QR-版本与容量 版本 矩阵大小 纠错等级 数字 字母数字 八位字节 日本汉字 中国汉字 1 21 L 41 25 17 10 10 M 34 20 14 8 8 Q ...原创 2020-05-20 16:47:50 · 5636 阅读 · 0 评论 -
C语言在Windows控制台生成二维码
近期为了研究C语言生成二维码,实现了一个简单的工具,在windows的控制台显示二维码,效果如下:生成二维码的代码是从网上找的;控制台显示二维码的主要原理是改变控制台的字符背景颜色来实现。黑块是默认颜色,白块是修改字符背景色为白色,并输出空格来实现。由于默认字体是8*16的,所以为了保持比例正常,一个方块要输出两个空格字符。下面是在控制台输出色块的关键代码://在控制台画色块//蒋晓岗<[email protected]>#include <Windo原创 2020-05-20 10:10:37 · 1840 阅读 · 0 评论 -
JHM3000体温传感器驱动
因2020疫情影响,国内突然就冒出来一堆做体温计的厂商。。。硬件平台:nRF52832 + JHM3000JHM3000是个单线通信的体温传感器芯片,线性度较好,校准后精度可达0.1度。主要问题是通信是单IO输出,芯片上电后,IO就会不停地输出脉冲信号,需要MCU计算脉宽来解码数据。每个采样周期为:2.8ms间隔 + 6ms数据传输相邻两个高脉宽之比决定数据类型,START=3...原创 2020-04-21 08:35:30 · 1604 阅读 · 0 评论