自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(90)
  • 资源 (6)
  • 收藏
  • 关注

原创 C/C++提高代码稳定性/健壮性的一些小细节

对于C/C++编程本来就是要摸透两大块,一个是编译器,另一个是相应处理器的内核和外设的知识和特性,这其中编译器是比较容易被忽视的

2024-03-29 10:07:58 412

原创 git使用记录

将第一个提交记录的动作保持为 "pick" 或 "p"。1.使用 "git reset --hard 版本号"的方式回退版本号会覆盖从当前版本到回退版本之间的版本号,为避免这种情况,可以用"git revert -n 版本号"指令,具体看:https://blog.csdn.net/L1147484597/article/details/128480953。12.git合并两次提交:git rebase -i HEAD~2,HEAD~2表示要合并的提交数量,2表示合并最近两个,要合并最近三个则改为3;

2024-02-20 09:48:24 1031

原创 C/C++与汇编交互总结

并且在C中调用汇编函数时可以传入参数,需要传入哪些参数和参数类型只要在extern时声明下就可;也可以有返回值,存在R0或R0-R1中,但是。如果该C函数有传递参数的,则在调用前把参数赋值到R0-R4即可;若有返回值的,则调用后从R0或者R0-R1(返回值为64位)读取即可;2.汇编当中可以引用C全局变量,也是"IMPORT"一下即可,如上例;引用进来的是该变量的地址,不是变量的值。当有返回值时,汇编函数中在退出前需要将返回值赋值给R0或R0-R1。4.C当中也可以使用汇编的标号,用法还是先。

2024-02-18 18:39:19 718

原创 ARM/CM3/CM4:读写内核寄存器和内核特殊寄存器

可以发现每一个函数都用到了“ldr r0,=core_res_c”这句话,这句话可以非常神奇的将core_res_c全局变量的地址传递给内核寄存器,就相当于建立了一个C和汇编直接数据传输的通道,我们就可以借助这个通道对内核寄存器进行读写了,当然这个通道的存在是借助于编译器的,所以文章第一句话就声明了和编译器的瓜葛。注:以下代码涉及内联汇编,所以跟C编译器有关,有些编译器可能会不支持(每种编译器内联汇编的形式都不一样),本代码在MDK的“defaul compiler version 6”编译器里测试通过。

2024-01-29 15:07:52 543

原创 记录:获取栈顶地址

此时就要结合任务栈的栈底地址和栈大小来判断任务栈有没有溢出了;当然对于很多嵌入式操作系统来说都会提供一个获取任务最高水位线的函数,如对于freertos是:uxTaskGetStackHighWaterMark()。有了栈顶地址再加上栈底地址(__initial_sp)和栈的大小就可以判断出当前栈有没有溢出了。

2024-01-04 10:30:10 427

原创 链接文件/分散加载文件的作用

上诉代码中UNINIT就是表示该段不需要初始化的意思,在这里面存的数据就不用担心程序异常复位后数据丢失的问题了;只要不是上电复位里面存的数据都会在(上电复位是因为断电了,RAM断电的话数据是必然丢失的)6.新增一个flash或者RAM段(如外挂FLASH或RAM的情况),并指定将某些数据存在该段里面。上面三行代码分别指定了gd32f30x.o文件的堆、RW、ZI、RO的存储位置。那个+First是指首先存储,即存储在开头位置。7.目前知道的就这么多,后续发现更多作用再增加。

2023-12-22 17:28:05 375

原创 MDK(Keil)的MAP文件都记录了啥

MDK-ARM软件为基于Cortex-M、Cortex-R4、ARM7、ARM9处理器设备提供了一个完整的开发环境。 MDK-ARM专为微控制器应用而设计,不仅易学易用,而且功能强大,能够满足大多数苛刻的嵌入式应用。

2023-10-08 10:05:53 226

原创 记录一个Cortex-M23的一个重要问题

对于Cortex-M23,它要求按照字访问的内存,其访问地址必须是字(4字节)对齐的,否则就进入Hard_fault

2023-09-22 16:36:01 263

原创 git使用记录

Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 [1]也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。

2023-08-02 18:37:28 102

原创 C/C++:将数值作为函数执行、assert、结构体位域

位域:是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。

2023-07-27 18:36:34 672 1

原创 关于SVC和PendSV

实时操作系统(Real Time Operating System,简称RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源完成实时任务,并控制所有实时任务协调一致运行的操作系统。提供及时响应和高可靠性是其主要特点。

2023-07-21 14:10:11 601

原创 指针、常量指针、指针常量以及const、volatile修饰符

指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是内存地址,指针变量是用来存放内存地址的变量,在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。

2023-07-19 18:10:31 883

原创 今日C/C++二维数组理解简记

二维数组本质上是以数组作为数组元素的数组,即“数组的数组”,类型说明符 数组名[常量表达式][常量表达式]。二维数组又称为矩阵,行列数相等的矩阵称为方阵。对称矩阵a[i][j] = a[j][i],对角矩阵:n阶方阵主对角线外都是零元素。

2023-07-18 18:27:17 50

原创 VSCode常用快捷键设置

vscode是一种简化且高效的代码编辑器,同时支持诸如调试,任务执行和版本管理之类的开发操作。它的目标是提供一种快速的编码编译调试工具。然后将其余部分留给IDE。vscode集成了所有一款现代编辑器所应该具备的特性,包括语法高亮、可定制的热键绑定、括号匹配、以及代码片段收集等。要快速高效的使用此软件,就得把常用快捷键设置成自己顺手的

2023-07-10 16:46:30 57

原创 SolidWorks鼠标滚轮方向反转

SolidWorks的默认滚轮方向是:向外为缩小,向内为放大,这和我们常识认为的相反,下面给出反转的方式

2023-03-11 15:10:45 2635 1

原创 面向过程和面向对象编程详解

面向对象是把跟要处理的事情相关的所有事物封装成一个对象,每个对象内有各种属性、行为(函数)和变量,然后用这些对象的属性、行为、变量去完成事情;所有高级语言都是面向对象的或者说能够面向对象编程的,然后几乎所有高级语言都是在C的基础上发展起来的,所以说面向对象编程是正确的编程语言发展方向,是大势所趋,因为面向过程更符合机器的思维(机器就是想让你告诉他一步一步该怎么做),而面向过程更符合人类的思维,而编程语言的发展肯定是要让人类更加方便快速的编程,所以发展面向对象编程是理所应当的。

2023-03-10 17:23:21 154

原创 关于BLE的一些知识总结

学习BLE知识的一些总结

2023-03-10 15:56:53 1401

原创 git学习记录/菜鸟教程(基于Gitcode)

本文章记录了从零开始使用git的操作

2023-02-28 15:53:20 662

原创 DXP中如何寻找未连接的网络

PCB Layout时有时会有些未连接的网络很难找,可以按照如下的方案试下

2023-02-27 19:44:26 329

原创 在PCB中增加网络

有时候我们会需要在PCB中增加网络,而不是都通过原理图导入,这篇文章就教你如何在PCB中添加网络

2023-02-27 18:43:45 1314

原创 SOLIDWORKS 快捷键设置

SOLIDWORKS 快捷键设置

2023-01-31 15:44:41 1178

原创 实测STM32 DMA的数据传输速率不如CPU

用CPU和DMA同样搬运32KB的数据(内存到内存),对比搬运耗时。实测下来DMA搬运数据并没有CPU快,使用DMA只是省CPU并不省时间

2022-12-29 09:43:18 2566 3

原创 STM32F4 DMA的关键要点分析

STM32F4 DMA详解,有些比较难理解的概念讲的比较清楚

2022-12-14 19:03:56 1396

原创 关于CM3/CM4位带操作的总结

位带操作定义、优越性和使用

2022-12-13 15:34:49 946

原创 关于强制转换数据类型后再存储或发送是否会影响数据字节顺序不一致问题

强制类型转换与数据大小端问题

2022-12-07 17:59:33 204

原创 GCC编译输出中text,data,bss和dec的含义

bss是不会算入最终生成的bin文件里面的,因为对于未初始化的变量,只需要在内存中开辟个相应大小的空间就行了。2.data:已初始化的全局/静态变量,相当于MDK的rw_data。3.bss:未初始化的全局/静态变量,相当于MDK的ZI_DATA。1.text:代码和常量,相当于MDK的code+ro_data。4.dec:上述3者的算术和。

2022-09-08 22:37:49 2440

原创 visual c++:error LNK2019: 无法解析的外部符号 __imp....

visual studio;c++;error LNK2019

2022-05-30 15:34:19 877

原创 Windows环境变量是啥

环境变量代表的就是一个文件夹路径,即用一个变量代表一个路径,类似C/C++的宏定义。 环境变量有两种:系统环境变量(简称系统变量)和用户环境变量(简称环境变量),顾名思义,系统环境变量不区分用户,作用于所有用户;用户环境变量只作用于当前用户。环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如Windows和DOS操作系统中的path环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序...

2022-04-21 14:53:56 2413

转载 内联函数简介与作用

简介 在计算机科学中,内联函数(有时称作在线函数或编译时期展开函数)是一种编程语言结构,用来建议编译器对一些特殊函数进行内联扩展(有时称作在线扩展);也就是说建议编译器将指定的函数体插入并取代每一处调用该函数的地方(上下文),从而节省了每次调用函数带来的额外时间开支。但在选择使用内联函数时,必须在程序占用空间和程序执行效率之间进行权衡,因为过多的比较复杂的函数进行内联扩展将带来很大的存储资源开支。另外还需要特别注意的是对递归函数的内联扩展可能引起部分编译器的无穷编译。设计内联函数的动机 ...

2022-03-08 15:59:43 526

原创 Linux系统主要目录的功用

/var 某些大文件的溢出区,比方说各种服务的日志文件 /lost+found 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里 /proc 虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息 /mnt 系统提供这个目录是让用户临时挂载其他的文件系统 /root 系统管理员的主目录(呵呵,特权阶级) /tmp 公用的临时文件存储点 /sbin 系统管理命令,这里存放的是系统管理员

2022-01-10 14:55:24 65

原创 文件系统类型总结/简介

ext2 早期linux中常用的文件系统 ext3 ext2的升级版,带日志功能 RAMFS 内存文件系统,速度很快 NFS 网络文件系统,由SUN发明,主要用于远程文件共享 MS-DOS MS-DOS文件系统 VFAT Windows 95/98 操作系统采用的文件系统 FAT Windows XP 操作系统采用的文件系统 NTFS Windows NT/XP 操作系统采用的文件系统 HPFS OS/2 操作系统采用的文

2022-01-10 14:23:49 273

原创 关于C/C++宏定义/预编译

1.宏定义在函数内部和外部是一样的(都视为在外部),所以一般不把宏定义放在函数内部以免造成误导;如果一个函数里面只有宏定义 那么该函数相当于不存在。2.在一个文件或者多个文件中重复定义一个标志编译不会报错,有的编译器会出警告。3.预编译时对宏定义的处理就是简单的替换,如果说涉及标志重定义的,那么替换时就以最新宏定义为准,关于这点下面作详细说明:假设现在有a.c,a.h,b.c,b.h四个文件:1.先在a.h中定义testdef为20,再在b.h中定义testdef为30,然后在a.c中先包含

2022-01-07 18:14:07 1179

原创 关于音频EQ、DRC、等响度、3D环绕音、虚拟低音、变音、AEC、AGC、ANS等解释

1.EQ:EQ是均衡器的缩写。它的基本作用是通过对声音某一个或多个频段进行增益或衰减,达到调整音色的目的。当然,EQ还有一个显著的功能,降噪。EQ通常包括如下参数:F(requency),频率――这是用于设定你要进行调整的频率点用的参数;G(ain),增益――用于调整在你设定好的F值上进行增益或衰减的参数;Q(uantize)――用于设定你要进行增益或衰减的频段 “宽度”。2.DRC(动态压缩)当输出的音频信号不是很大的时候,系统会按照原来的设定输出,但是当输出的音频信号过大的时候,为了保护喇叭

2021-12-30 15:06:20 11355

转载 关于C与C++区别的摘录

1.博主:恒虚之境作者:恒虚之境链接:https://www.zhihu.com/question/28834538/answer/477487776来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。大家都知道,上古时代,猿猴用机器代码写程序,而且好像还是01二进制编码的表现方式。这些01代码精确表达了计算机CPU所要做的每一个动作(每一条指令)从内存的某个地址中读数到寄存器中,寄存器中又再做那些事情,动作完了之后,又将运算结果送回内存,程序计数器跳转到那个位置.

2021-12-23 18:11:12 125

原创 记录:程序跳转前一定要先禁止所有中断

之前在做程序更新时,有发现程序跳转后莫名出现执行异常或卡死问题,后面百般调试发现如果跳转前禁止所有中断的话就好了,但是不知道具体为什么; 今天看到个大神写的文章才知道,原来是在程序跳转后,并且在新程序的__main函数执行之后(该函数负责初始化新程序的内存)并在新程序的SCB->VTOR执行之前刚好发生中断了,而中断中用到的变量的地址刚好和新程序的内存使用空间重合,这样就导致新程序的内存被篡改,导致程序运行不正常或卡死。...

2021-12-23 10:30:28 312

原创 记录:HAL释义

HAL:Hardware Abstraction Layer,硬件抽象层硬件抽象层技术最初是由Microsoft公司为确保WindowsNT的稳定性和兼容性而提出的。针对过去Windows系列操作系统经常出现的系统死机或崩溃等现象,Microsoft总结发现,程序设计直接与硬件通信,是造成系统不稳定的主要原因。在得出这个结论的基础上,微软公司在WindowsNT上取消了对硬件的直接访问,首先提出了硬件抽象层(Hardware Abstraction Layer,简称HAL)的概念,硬件抽象层就是:“将硬

2021-12-23 10:21:53 1466

原创 从函数指针到回调函数

函数指针:指向函数的指针,某个函数指针表示指向某一类型函数的指针。我们知道,指针类型有整型、浮点型、字符型等,现在又加了一种类型:函数型;浮点型指针就叫浮点指针,那么函数型指针就叫函数指针;我们既然可以把浮点指针当做函数的传递参数,那么自然也可以把函数指针当做函数的传参,函数A在其传参中带有函数指针类型一般是为回调函数做准备的,在调用函数A时被传递进去的函数(如B)我们一般称之为回调函数。那么为什么函数A要带有一个函数指针类型,弄得这么复杂呢,那是因为写函数A的人(如写系统的人)不确定其他人

2021-12-09 22:02:35 152

原创 按键硬件去抖电路

如图,主要利用了电容的充放电时间来实现去抖;电容越大、电阻越大,充放电时间越长,去抖效果越好,不过太长了按键响应会太长;相反则反之;一般而言用上图的阻容值效果刚好。...

2021-08-24 21:38:11 3463

原创 关于VSCode编码:自动猜测编码字符集

VSCode有自动猜测打开文件的编码的功能,设置如下:点击 文件->首选项->设置搜索设置处搜索“编码”图中红框处打钩即可.

2021-08-24 16:24:45 1607

原创 FreeRTOS任务调度

1.FreeRTOS内核支持抢占式调度和时间片轮转调度,默认情况下时间片轮转调度是使能了的,抢占式调度需要用户在FreeRTOSConfig.h中自己使能(configUSE_PREEMPTION)2.抢占式调度用于不同优先级的任务之间,时间片轮转调度用于同优先级任务之间3.有且只有以下5种情况会触发任务切换: 1.有比当前运行任务更高优先级的任务进入了就绪态 2.当前运行任务调用了阻塞函数(如vTaskDelay、等待任务通知、等待信号量等)使自己进入了阻塞态,...

2021-07-19 16:52:20 817

vscode-1.65.2-x64.exe

vscode官方最新版,直接从官网下载而来; 由于官网下载速度很慢,遂上传供大家下载。

2022-03-18

c166v757.exe

Keil for C166最新版,在官网下载速度很慢并且需要验证信息,特此提供给大家。 Keil C166也称C166,PK166等,是ARM/Keil专门针对XC16x,C16x和ST10微控制器推出的嵌入式软件开发工具。目前,Keil C166国内由亿道电子提供销售服务和技术支持。

2020-09-10

c251v560.exe

Keil for C251最新版,在官网下载比较慢,且需要验证信息之类的,特此提供给大家。 Keil DK251是一个完整的软件开发环境,支持基于251的微控制器,适合每个阶段的开发人员,不管是专业的应用工程师,还是刚学习嵌入式软件开发的学生。

2020-09-10

MDK531.EXE

Keil公司是一家业界领先的微控制器(MCU)软件开发工具的独立供应商。Keil公司由两家私人公司联合运营,分别是德国慕尼黑的Keil Elektronik GmbH和美国德克萨斯的Keil Software Inc。Keil公司制造和销售种类广泛的开发工具,包括ANSI C编译器、宏汇编程序、调试器、连接器、库管理器、固件和实时操作系统核心(real-time kernel)。有超过10万名微控制器开发人员在使用这种得到业界认可的解决方案。其Keil C51编译器自1988年引入市场以来成为事实上的行业标准,并支持超过500种8051变种。

2020-07-31

KEA128+FreeRTOS.zip

移植好的Free_RTOS。 Kinetis EA 系列 MCU 是针对汽车市场开发的 MCU。它的内核基于 32 位 ARM Cortex-M0+,具有高度可扩展性。此款产品系列对于成本敏感的应用进行了优化, 可提供低引脚的选择,且具有极低功耗的工作状态。2.7~5.5v 供电及优异的 EMC/ESD 健壮性,使 Kinetis EA 系列 MCU 非常适合从车身电子到车身安全或通用传感器节点等应用。

2020-06-19

文件截取/裁剪工具

可以将任意文件类型从任意位置开始到任意位置结束--截取/裁剪成任意大小

2018-07-25

空空如也

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

TA关注的人

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