自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(392)
  • 收藏
  • 关注

原创 【C语言】C tips

【代码】【C语言】C tips。

2024-04-11 14:05:52 244

原创 【C语言】Traps in C Bitfield

【代码】【C语言】Traps in C Bitfield。

2024-03-15 15:08:46 392

原创 【嵌入式】About USB Powering

由于Type-C接口自身的强大性能和便利性,以及欧洲议会和理事会谈判达成的协议:“ 从2024年秋季开始,所有在欧盟销售的便携电子产品,包括手机、平板电脑、耳机等,都需统一配备USB-C(即Type-C)充电接口”。新一代iPhone全面放弃Lightning接口,采用Type-C接口,同时低端手机舍弃Micro USB接口,低端笔记本舍弃DC接口,Type-C接口终于迎来在手机、平板及笔记本等消费领域的大一统时代。Type-C接口有多强?一文了解各大手机厂商的快充协议 - 百度文库。

2024-01-04 15:10:19 527

原创 【嵌入式】LIBSCLI - Simple Command Line Interface

【代码】【嵌入式】LIBSCLI - Simple Command Line Interface。

2023-03-04 11:01:47 521 1

原创 【嵌入式】wear-leveling design for flash-based NVRAM

【代码】【嵌入式】wear-leveling design for flash-based NVRAM。

2023-02-19 11:44:40 546

原创 【JustPlay】Brushless ESC calibration

【代码】【JustPlay】Brushless ESC calibration。

2023-02-11 14:20:43 387

原创 【嵌入式】MDK使用sct文件将代码段放入RAM中执行

当CPU主频为72Mhz的时候,为了弥补CPU和Flash之间的速度差异,需要在访问Flash的时候插入等待周期,否则Flash访问会有问题。为了提高代码运行速度,可以将代码装入RAM中,MCU的RAM速度和CPU速度没有差异(不像MPU,中间需要使用cache弥补CPU和RAM之间的速度差异),因此从RAM中执行代码可以提高运行速度。同时在进行Flash编程擦写的时候,Flash是无法读写的,这时候如果遇到中断的话,是无法进入中断处理函数的,但是如果代码放在RAM中,就没有影响了。

2023-02-03 18:44:27 2759

原创 【嵌入式】STM32F103 SPI主从收发实验

【代码】【嵌入式】STM32F103 SPI主从收发实验。

2022-12-23 14:39:55 1044

原创 【计算机】可信平台模块Trusted Platform Module - TPM

引述:什么是Boot Guard?电脑启动中的信任链条解析 - 知乎“无事可干”的黑客们早已经把目光从操作系统转移到固件上了,毕竟一旦攻破了固件的大门,那么在其上的操作系统也会门户洞开。现在电脑或者x86服务器系统中固件众多: UEFI在其中居于中间地位,它的安全性也是重中…

2022-11-29 15:20:24 2862

原创 【计算机网络】以太网供电PoE - Power over Ethernet

PoE was firstly introduced by Cisco in 2000s for their IP phones, and it was called Cisco Inline Power at that time. (POE最初由思科在2000年代为自家的IP电话供电发明,期初叫做Cisco Inline Power)重要名词缩写:PD: Powered Device 指被供电设备,如IP电话、AP、照明灯等。

2022-11-25 15:27:32 1891

原创 【嵌入式】Cortex M4F DSP库

使用CM4内核自带的FPU需要在编译的时候添加编译选项:--cpu Cortex-M4.fp,以使能FPU指令集,否则使用的是普通Thumb2指令实现的DSP函数。同时还需添加宏定义:ARM_MATH_CM4,这在CMSIS DSP Library的arm_math.h里面用到。CMSIS DSP Library可以在ARM的官网找到:https://developer.arm.com/tools-and-software/embedded/cmsishttps://developer.arm.com/to

2022-06-19 11:24:12 1255

原创 【嵌入式】如何使用JLINK RTT打印log日志

没有串口的情况下可以使用JLINK的RTT即 Real Time Transfer功能。RTT的工作原理大致就是在内存里面创建一个RTT控制块RTT Control Block,即SEGGER_RTT_CB结构体。这个结构体里面存放了若干个上行通道和下行通道,每个通道都有一个数据buffer以及读写指针,构成了数据队列。向RTT控制块里面的任意一个上传通道写入log信息,然后JLINK能够通过读取RAM内容,获取到数据buffer和读写指针的内容。在JLINK的安装目录里面有RTT的代码:可以直

2022-05-28 11:12:24 3170 5

原创 【电路设计】AD Usage Notes

自己习惯的AD操作:1、高亮当前层:shift + s2、修改多个被选中器件的共通属性: view -> workspace panels -> PCB -> pcb inspector3、选中多个器件,并进行上、下、左、右对齐:a + t/b/l/r4、原理图器件快速粘性复制:shift + move7、粘性移动:ctrl + move8、DRC检查:tdr9、根据选中的形状定义板子外形:dsd10、尺寸测量:ctrl + m11、清空测量标注:shift + c1

2022-05-22 19:32:30 2862 1

原创 【嵌入式】基于平头哥内核的W801 WIFI SoC的OTA方案设计

W801是平头哥内核的WIFI芯片。给到的SDK里面没有找到中断向量表重定向的函数,类似于STM32的NVIC_SetVectorTable,所以中断向量表只能给主程序用,那么BootLoader就没法弄了。干脆不用BootLoader了,直接划一个分区用来存放updater用于更新固件。分区表设计如下图:国产芯片就是资料不全,规格书里面写了Flash的寻址空间为0x0800 0000 ~ 0x0FFF FFFF,但是在SDK里面,链接脚本是从0x080d0400开始的,如果把起始地址改成0x0

2022-05-10 16:51:37 2791

原创 【嵌入式】计算机加密SSL/TLS协议基础

参考文章:https://www.internetsociety.org/deploy360/tls/basics/?gclid=Cj0KCQjwpcOTBhCZARIsAEAYLuXVTtaCVNbegx5XuY-WxZ7BwerSisLhr3GEhNiP-3VkXxGzPY5f6UMaAtAmEALw_wcBhttps://www.internetsociety.org/deploy360/tls/basics/?gclid=Cj0KCQjwpcOTBhCZARIsAEAYLuXVTtaCVNbegx5

2022-05-03 18:56:47 1121

原创 【嵌入式】IoT Security: Anti-Rollback

参考:https://www.silabs.com/security/anti-rollbackAdversaries may have knowledge of a security flaw found in an older firmware version and attempt to take advantage of it. The adversary attempts to load previously signed to re-open a closed security flaw.

2022-04-25 14:41:12 1380

原创 【C语言】浮点数精度问题

浮点数精度问题。

2022-03-29 11:50:22 1108

原创 【LittlevGL】看看LVGL8的draw_ctx

调用"lv_disp_drv_init"函数初始化一个显示设备驱动,一个显示设备驱动的结构体内容如下:typedef struct _lv_disp_drv_t { lv_coord_t hor_res; /**< Horizontal resolution.*/ lv_coord_t ver_res; /**< Vertical resolution.*/ lv_coord_t physical_hor_res;

2022-03-28 14:50:09 2049

原创 闲居即兴 - 反卷诗篇

依山傍水房树间,行也安然,住也安然。一条耕牛伴顷田,收也凭天,荒也凭天。雨过天晴驾小船,鱼在一边,酒在一边。夜晚妻子话灯前,今也淡淡,古也淡淡。日上三竿尤在眠,不是神仙,胜是神仙。他人穿好我褴衫,生也坦然,去也坦然。日复一日年复年,愁也一天,欢也一天。冬梅腊雪坐窗沿,炉在一边,茶在一边。傍晚知己酒桌前,哀也谈谈,乐也谈谈。寒时卧榻正好眠,不是神仙,胜似神仙。...

2022-03-13 15:07:45 2602

原创 【C语言】printf函数陷阱

URL被编码/转义之后(转换工具地址:URL在线编码转换工具)字符串内容改变了,例如:&fm=217&app=126&f=JPEG?w=363&h=225&s=9转为:%26fm%3D217%26app%3D126%26f%3DJPEG%3Fw%3D363%26h%3D225%26s%3D9可以发现其中“&s=9”被转成了“%26s%3D9”,注意,“%26s”在printf格式化打印函数看来是一个参数,表示打印一个字符串,一共打印26个字符,

2022-03-03 10:46:37 681

原创 【C语言】堆内存调试追踪

#ifdef MEMORY_DEBUG#define MALLOC(_SIZE) malloc(_SIZE)#define FREE(_P) free(_P)#else#define MALLOC(_SIZE) malloc_debug(_SIZE, __MODULE__, __LINE__)#define FREE(_P) free_debug(_SIZE, __MODULE__, __LINE__)#endif

2021-12-29 15:14:45 904

原创 【计算机】32位和64位系统代码兼容

代码为了兼容32位MCU和64位PC机(例如PC上运行UI模拟器,PC上的UI代码需要可以在MCU上无修改直接编译运行),需要注意在64位的PC上,指针的长度是8个字节,计算机的字长可以使用:sizeof(long)或者sizeof(void *)来计算。如果需要分配一个指针的内存空间,不能直接分配4字节,而是分配字长的字节数。另外,进行指针的强制类型转换获取指针的值的时候,需要注意不要用 uint32_t 这样的32位类型进行强制装换指针,可能会丢失数据。 realloc(sizeof(test)

2021-12-02 11:23:16 921

原创 【嵌入式】使用链接脚本从零创建STM32代码工程

链接脚本文件,用于控制链接过程。以stm32在Linux环境下编译作为示例,项目链接git库地址:tangquan/test.ld_file.proghttps://gitee.com/tq797/test.ld_file.prog各种原因,参考教程的地址在文件startup_stm32f401xc.c里面。...

2021-10-24 14:55:56 2525

原创 【计算机】MBR GRUB

参考文章:主引导目录(MBR)结构及作用详解MBR 也就是主引导记录,位于硬盘的 0 磁道、0 柱面、1 扇区中,主要记录了启动引导程序和磁盘的分区表。我们通过图 1 来看看 MBR 的结构。 图 1 MBR的结构 MBR 共占用了一个扇区,也就是http://c.biancheng.net/view/1015.htmlgrub原理及使用详解_终身学习的程序猿-CSDN博客_grubgrub原理及使用详解转载请注明出处:http://blog.csdn.net/rosetta 实验环境V...

2021-10-16 12:54:14 379

原创 【FreeRTOS】内存溢出检测

FreeRTOS官方给了两种内存溢出检测方案:FreeRTOS - stacks and stack overflow checkingFreeRTOS is a portable, open source, mini Real Time kernel. A free RTOS for small embedded systemshttps://www.freertos.org/Stacks-and-stack-overflow-checking.html【进阶】三种" 堆栈溢出检测 "方法,请拿去吹牛

2021-10-13 16:33:52 1298

原创 【计算机】ABI and EABI

参考维基百科文章:Application binary interfacehttps://en.wikipedia.org/wiki/Application_binary_interfaceABI全称Application binary interface,和API(Application programming interface)的概念很像,都是规定了不同软件模块之间的调用规范(接口)。不同的是API是规定在较高的源码层的调用规范,而ABI是定义在CPU硬件层的规范。API可以由应用开发程序员设

2021-10-13 14:42:27 364

原创 【OS】Microkernel and Monolithic kernel

参考文章,介绍微内核操作系统概念:操作系统微内核介绍https://zhuanlan.zhihu.com/p/364429755下面这篇文章是将微内核和宏内核的概念放在应用软件开发中去的,微内核架构的软件支持插件的形式扩展软件功能:什么是微内核架构_春哥大魔王的博客-CSDN博客什么是微内核架构相信大家都听说过微内核架构,也或多或少做过一些类似于微内核架构的设计,为了可以更好的设计出微内核的架构,我们了解下什么是微内核架构。说到微内核架构,大家首先会想到的是Ecl...https://blog.cs

2021-10-12 10:36:13 209

原创 【Linux】System Calls

man syscallsThe system call is the fundamental interface between an application and the Linux kernel.

2021-09-30 11:22:57 428

原创 【Algo】快排第一趟

参考文章:快速排序算法(QSort,快排)及C语言实现上节介绍了如何使用起泡排序的思想对无序表中的记录按照一定的规则进行排序,本节再介绍一种排序算法 快速排序 (Quick Sort,简称快排) 。 C语言中自带函数库中就有快速排序qsorhttp://data.biancheng.net/view/71.html49,38,66,90,75,10,20...

2021-09-26 17:01:51 162

原创 【C语言】定义二维数组并不会在创建一个指针数组

突然感觉自己的C语言基础好差劲。定义一个二维数组:char a[8][64];又有两个函数定义如下:void testfun1(char **strings, int count);void testfun2(char strings[][64], int count);如果把数组a传入到 testfun1 中去,软件挂了。如果把数组a传入到 testfun2 中去,软件正常。定义数组a的时候,按照我原先的想法是会在内存中创建一个 char * 类型的数组,名字就叫a,.

2021-09-24 15:47:31 211

原创 【C语言】缺少GDB时的问题定位

#define MARK DUER_PRINT_FUN("MARK:[%s,%d]", __FUNCTION__, __LINE__);Crash在121行了。

2021-08-31 19:22:20 282

原创 【ARM】STM32内置DFU的使用

所有STM32系列芯片都自带ISP功能,进入ISP的方式就是BOOT0置1,然后上电或复位,这时候芯片从系统存储区启动,进入ISP功能,可以使用串口0进行软件烧写。STM32F2/3/4系列芯片不仅有传统的UART ISP功能,还有USB ISP功能(拥有USB功能的芯片),工作方式就是使用自带的USB外设,配置成一个USB HID设备,通过HID协议下载软件,速度和串口相比......。从系统存储区启动即可进入USB ISP,然后通过USB接上Windows,无需安装驱动,设备管理器里面出现一个HID

2021-08-19 22:41:38 10483 4

原创 【ARM】STM32在RAM中运行代码测试

#include <stm32f10x_conf.h>#include "sys.h"#include "delay.h"#include "usart.h"#include "string.h"__align(8) uint8_t value[1024] __attribute__((at(0x20000100)));void UartSendByte(USART_TypeDef* uart,u8 data);void test(void (*p)(USART_TypeD.

2021-08-15 17:53:25 1106

原创 【ARM】Thumb2指令集中函数的地址不对齐?

简介ARM指令集、Thumb指令集和Thumb2指令集:ARM指令集:编代码全部是 32bits 的,每条指令能承载更多的信息,因此使用最少的指令完成功能, 所以在相同频率下运行速度也是最快的, 但也因为每条指令是32bits 的而占用了最多的程序空间。Thumb指令集:编代码全部是 16bits 的,每条指令所能承载的信息少,因此它需要使用更多的指令才能完成功能, 因此运行速度慢, 但它也占用了最少的程序空间Thumb-2指令集:在前面两者之间取了一个平衡, 兼有二者的优势, 当一个

2021-08-15 17:05:31 1261

原创 【C语言】不合理的include顺序导致的问题

如下图,编译cmd_test.c 文件的时候先包含 cmd_test.h,然后cmd_test.h内部又包含了command.h,command.h内部包含scli.h,在scli.h里面又反过来包含了command.h,这种存在循环包含关系的容易出现错误。因为在前面已经包含过command.h,所以__LIBSCLI_COMMAND_H__这个宏就已经被定义过了,那么在处理scli.h头文件的时候command.h里面的内容就不会被包含了,这时候就会报错了。...

2021-08-12 11:25:32 485

转载 【计算机网络】FTP Connection Modes Active and Passive

FTP协议中规定创建两个通讯链路,第一个是固定由客户端连接到服务器的控制通路,一个是数据通路。数据通路的建立有两种方式,一种是Active方式,一种是被动方式。FTPmay operate in an active or a passive mode, which determines how a data connection is established. In both cases, a client creates aTCPcontrol connection to anFTPserv...

2021-08-05 09:57:19 250

原创 【嵌入式】修改ELF文件中的符号表

RTOS系统应用经常需要导入三方库,但是RTOS系统有别于Linux系统,无法使用动态链接库,所以很多库都是重复的,这会导致链接过程中出现: symbol xxx multiply defined by xxx的错误。如果某个库重复了,例如常用的cJSON库,可以单独把cJSON库单独打包成库,而不用集成到整体的库中去,这样整个系统只需要包含一次cJSON.lib即可,节省了空间也防止了冲突。但是使用的三方库多了之后,有时候又会出现各自的库有重复定义函数符号的问题,比如A.lib定义了test函数,B.

2021-07-16 12:34:10 747

原创 【计算机网络】家用路由器的NAT模式和路由模式

参考视频:https://haokan.baidu.com/v?vid=17283785740956069571&pd=bjh&fr=bjhauthor&type=video参考文章:https://hsk.oray.com/news/5952.html家用上网一般都是使用的路由器NAT模式,NAT(Network Address Translation)就是把内部私有网络地址转换成合法外部网络地址。家庭用户发出的网络请求都会被NAT路由器将数据帧的源地址(内部地址)转换

2021-07-16 10:33:33 6156

原创 【Git】修改历史提交记录中的代码内容

提交代码到服务器需要评审,但是评审过程很慢,期间本地代码需要继续开发,继续提交到本地仓库。也不能干等着,也不好老是麻烦别人给评审,那本地先提交着,等评审过了再继续提交本地仓库里面的下一个commit,提交某一个commit的指令为:git push origin e5333babc5604134f80a4befcba56859b0c293ab:refs/for/remote_branch但是问题是如果评审没过的话,就要对之前的那个 commit 进行修复,我的做法可能比较笨,但是也可用。1、基

2021-07-14 11:20:10 1315

原创 【C语言】预编译先于enum

C语言的预编译是先于enum,什么意思呢,看代码:#include <errno.h>#include <unistd.h>#include <string.h>#include <sys/ioctl.h>enum{ ENUM_ABC, ENUM_DEF,};#define DEF ENUM_DEF int main(int argc, char **argv){#if DEF == ENUM_ABC

2021-05-04 15:26:18 881 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除