![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
嵌入式软件
文章平均质量分 65
不熬夜,早点睡
积累是一个漫长的过程
展开
-
文本文件和二进制文件
记录文件,频率过高会导致数据丢失因为用sprintf函数会有一个转换的时间;所以就考虑记录二进制文件,提高记录效率。fdr记录60hz数据记录后的二进制文件放在MATLAB解码原创 2024-03-20 22:51:50 · 1418 阅读 · 0 评论 -
单目运算符、双目运算符、三目运算符
例如+,-,*,/,%,,>=,原创 2023-03-03 22:02:05 · 3978 阅读 · 0 评论 -
如何定义结构体数组、结构体数组数据如何访问
如何定义结构体数组、结构体数组数据如何访问原创 2023-03-03 11:58:36 · 222 阅读 · 0 评论 -
C语言中while(y–)如何计算?a++ 与 ++a 的区别
C语言中while(y–)如何计算?a++ 与 ++a 的区别转载 2023-01-20 15:37:58 · 584 阅读 · 0 评论 -
单片机堆栈知识总结
引用文章规律:出栈的每一个元素的后面,其中比该元素先入栈的一定按照入栈逆顺序排列。举例说明:已知入栈顺序: 1 2 3 4 5判断出栈顺序: 4 3 5 1 2结果:不合理,原因是出栈元素3之后有 5 1 2 这三个元素,其中1 2 是比3先入栈的,根据规律,这两个出栈的顺序必须和入栈顺序相反,也就是 2 1 出栈,不可能按照1 2 顺序出栈。已知入栈顺序: 1 2 3 4 5判断出栈顺序: 2 1 3 5 4。原创 2023-01-20 15:10:45 · 9062 阅读 · 2 评论 -
寄存器、RAM、ROM、Flash
存储器包括寄存器,,内存有ROM、Flash和RAM,单片机寄存器就是单片机片内存储器(片内RAM)一部分。原创 2023-01-20 15:08:41 · 6992 阅读 · 0 评论 -
单片机寄存器
分工的时代,如果认真深入的去了解学习单片机最底层的硬件原理的话,那会消耗大量的时间和精力,成为一名优秀的软件开发工程师的话,对底层硬件有一定的理解就好,更多精力花费在对代码数据结构,算法的优化,例如对P0OUT这个寄存器,何时写他,怎么写他,写多少比较合适,这都是需要考虑的事情,还有就是延时的时间是否过长,用定时器延时比较好,还是用阻塞延时比较好?另外,怎样的跑马灯动画更好看?值得高兴的是在GPIO一系列的寄存器里,我找到了切换输出电平的寄存器 P0OUT寄存器,我抽象的思考这样寄存器应该是这样的。原创 2023-01-20 15:08:37 · 6517 阅读 · 0 评论 -
为什么STM32设置Flash地址0x08000000而不是0x00000000?STM32的启动过程
引用文章,如有侵权请联系作者删除如果0x00000000-0x001 F FFFF之前是映射在系统存储器或者嵌入式SRAM上的,现在改变BOOT0、BOOT1的电平为0、X。0x00000000-0x001 FFFFF就被重新映射在了主FLASH上,这就是单片机的地址重映射。重映射就是本来是和张三进行映射的的,现在改为了和李四映射。原创 2023-01-19 22:48:10 · 10648 阅读 · 4 评论 -
存储器、51单片机存储结构、存储器映射
存储器是许多存储单元的集合,存储器单元实际上是时序逻辑电路(锁存器)的一种,按单元号顺序排列。每个单元由若干二进制位构成,以表示存储单元中存放的数值,这种结构和数组的结构非常相似。按存储器的使用类型可分为只读存储器(ROM)和随机存取存储器(RAM)。存储器本身不具备地址,所以把芯片内核所预先设定好的地址分配给寄存器,就是存储器映射。因为stm32的地址线是32位,也就是2的32次方,正好是对应4G的虚拟存储空间。原创 2023-01-19 22:12:14 · 2573 阅读 · 0 评论 -
一文读懂CPU工作原理、程序是如何在单片机内执行的、指令格式之操作码地址码
CPU的控制单元在时序脉冲的作用下,将指令计数器里所指向的指令地址(这个地址是在内存里的)送到地址总线上去,然后CPU将这个地址里的指令读到指令寄存器进行译码。由运算器执行对应的机器指令,并将结果通过地址总线写回数据段机器指令的二进制表示方式,是指令在程序存储器中存放形式,是CPU可直接读取、识别并执行的唯一形式。程序代码的本质就是一条一条的指令,我们需要通过编码的方式让CPU知道我们需要它干什么,最后由译码器翻译成一条条的机器指令。操作码。原创 2023-01-18 21:53:25 · 7910 阅读 · 1 评论 -
高级语言(C语言)、汇编语言、机器语言区别?编译器如何将高级语言编译成机器语言?
它是以⼈类的⽇常语⾔为基础的⼀种编程语⾔,使⽤⼀般⼈易于接受的⽂字来表⽰(例如汉字、不规则英⽂或其他外语),从⽽使程序编写员编写更容易,亦有较⾼的可读性,以⽅便对电脑认知较浅的⼈亦可以⼤概明⽩其内容。2、⽬标代码简短,占⽤内存少,执⾏速度快,是⾼效的程序设计语⾔,经常与⾼级语⾔配合使⽤,以改善程序的执⾏速度和效率,弥补⾼级语⾔在硬件控制⽅⾯的不⾜,应⽤⼗分⼴泛。汇编语⾔(符号语⾔)是⾯向CPU的,因此CPU不同,汇编语⾔就不⼀样,有什么CPU架构就有什么汇编语⾔,⽐如x86架构的就是x86汇。原创 2023-01-18 21:52:52 · 3850 阅读 · 0 评论 -
STM32的烧录和Hex/bin烧录文件解析、烧录文件是被如何存储到MCU中的?
以*.hex为后缀的文件我们称之为HEX文件。hex是intel规定的标准,hex的全称是Intel HEX,此类文件通常用于传输将被存于ROM或EEPROM中的程序和数据。是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。HEX的英语原始意思是16进制。这种文件格式主要用于保存单片机固件。整个文件以行为单位,每行以冒号开头,内容全部为16进制码,2个ASCII码字符表示1个Hex字节下面转自文章,如有侵权请联系作者删除。转载 2023-01-18 21:52:07 · 12565 阅读 · 2 评论 -
哈佛结构和冯诺依曼结构?STM32属于哈佛结构还是冯诺依曼结构?
哈佛结构是一种存储器并行体系结构,主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问。程序指令存储和数据存储分开,可以使指令和数据有不同的数据宽度。冯诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。数据与指令都存储在同一存储区中,取指令与取数据利用同一数据总线。E、ARM9是哈佛结构,取指和取数在同一周期进行,提高速度,改进哈佛体系结构分成三个存储区:程序、数据、程序和数据共用。原创 2023-01-18 14:41:55 · 5615 阅读 · 1 评论 -
灵魂问题:C语言里指针int *p=&a;相当于int *p; p=&a; int p=&a;这里面的p不是表示值吗?值可以等于地址&a?
而int *p=&a;为指针赋值,等号右边一定要是地址值,因为指针是一个对象,里面存放的是该指针所指向对象的地址值。赋值时,星号表示对指针所指地址中的值操作(读写)。就是将两行代码合并,并省略了重复的 p。定义变量时,星号属于类型说明的一部分;原创 2023-01-17 15:58:37 · 312 阅读 · 0 评论 -
(C语言)地址为什么要变成指针才能赋值给指针变量呢?
所以要初始化一个指针,你得给一个另外的地址。如果编译器不检查数值类型而是直接把一个int数值转换为地址并且不加警告,那么很可能因为程序员的一个粗心(把一个数值错误的赋值给了一个地址)产生灾难性的后果而且几乎无法发现。要给地址,对于一个非指针变量,你要取地址,对于一个指针变量,可以直接赋值。当然了,你可以这么理解:所有的变量都是有地址属性,只不过大部分都是隐式表现的(所以要&取地址),指针变量则是显式表现的。C语言中,指针的值就是地址,不过这个地址不是它自己的地址,而是绑定变量的地址。原创 2023-01-17 15:54:22 · 692 阅读 · 0 评论 -
指针?什么是指针?(C语言)地址为什么要变成指针才能赋值给指针变量呢?灵魂问题:C语言里指针int *p=&a;相当于int *p; p=&a; int *p=&a;这里面的*p不是表示值吗?值可以等
从根本上看,指针(pointer)是一个值为内存地址的变量(或数据对象)。正如char类型变量的值是字符,int 类型变量的值是整数,指针变量的值是地址。假设一个指针变量名是 ptr,可以编写如下语句:ptr=&pooh;//把pooh的地址赋给ptr对于这条语句,我们说ptr“指向”pooh。ptr和&pooh的区别是ptr 是变量,而&pooh 是常量或者,ptr是可修改的左值,而&pooh 是右值。还可以把 ptr 指向别处:ptr= &bah;原创 2023-01-17 15:50:11 · 295 阅读 · 0 评论 -
c语言中哪种数据类型的元素的地址是连续的,数组和结构体
结构体:可以是不同的数据类型,int,char,当描述同一个东西的时候,我们会把不同的变量弄到一个结构体中。数组:同一数组的不同数据的类型得一样。实例:控制LED闪烁。原创 2023-01-17 15:43:45 · 230 阅读 · 0 评论 -
32位机虚拟内存地址最大0xFFFFFFFF是怎么得出来的?内存大小与地址的对应关系以及计算方法?
3)4294967296 - 1换算成十六进制为:FFFFFFFF,而地址是按十六进制表示的。1)2是怎么来的呢?计算机中识别的是0和1二进制数,不是八进制、十进制等,所以是2^32。寻址空间0x0000 0000-0xFFFF FFFF。因为2^32Byte = 4GB.32位机最大虚拟内存为4GB。内存容量=末地址-⾸地址+1。2的10次⽅为1024。原创 2023-01-16 20:17:45 · 2074 阅读 · 0 评论 -
EditPlus下载安装及使用
如有侵权,请联系作者删除,原文链接:https://blog.csdn.net/weixin_43184774/article/details/98393253。Regcode填写:3AG46-JJ48E-CEACC-8E6EW-ECUAW。此处我的电脑是32位操作系统,所以我选择了32位的EditPlus版本。5、输入Username和Regcode后,点击Register。3、选择安装路径后,点击“Start Copy”6、点击“确定”,并重启EditPlus应用程序。2、点击“Accept”转载 2023-01-13 19:17:55 · 1907 阅读 · 0 评论 -
notepad++的下载安装
直接下载可能很慢,我是先下载“notepad-plus-8.4.6-installer_En9-iS1“这个下载管理器,具体可以在这个页面多找一下,然后在下载管理里面下载notepad++就快很多了!原创 2023-01-13 19:11:34 · 552 阅读 · 0 评论 -
Source Insight 许可证激活与停用
如果没有,请选择帮助>管理许可证。您的电子邮件地址是可选的,但强烈建议您这样做,以便在您丢失许可证时可以找回您的许可证。然后,Source Insight将使用我们的许可系统激活您的许可。一两秒钟后,您的许可证将被激活,您无需再次激活。在旧PC上,选择“帮助”>“管理许可证”,然后选择停用许可证”。这会减少您的激活次数,以便您可以在另一台PC上激活它。您最多可以同时在3台不同的PC上激活单用户许可证,供单个用户独占使用。停用引旧PC后,您可以在新PC上激活许可证。在新P℃上激活时,您需要提供许可证序列号。原创 2023-01-12 21:28:48 · 2122 阅读 · 0 评论 -
J-Link、ST-Link、DAPLink、ULink仿真器区别?以及支持的JTAG、SWD、SWIM下载模式、SWV、串口Printf调试差异?
简单来说,下载调试器是将PC(例如通过USB协议)发送的命令转换为MCU(负责MCU内部外围设备))理解的语言(例如SWD或JTAG协议)的设备,加载代码并精确控制执行。简单来说,标准是一组规则和协议,特定行业中的每个参与者都同意遵循并执行。符合某种内核的单片机Q,都可以使用这种协议来下载程序。JTAG和SWD其实都是一种标准的协议。比如JTAG和SWD,都支特下载ARMQ内核单片机的程序。1、JTAG接线比较多,高速模式下稳定性不如SWD;原创 2022-11-23 16:47:04 · 6728 阅读 · 0 评论 -
strlen函数详解
未初始化的结果如下定义一个字符数组变量,打印26个英文字母,并查看字符数据变量得实际长度,测试代码如下:// 未初始化 int i = 0;for(;i < 26;}可以看到strlen计算出的结果是77,显示是错误的。原创 2022-11-02 11:59:45 · 3786 阅读 · 1 评论 -
浅谈c/c++中main(),int main(),void main(),int main(void)四者之间的区别
main():相当于int main()int main():int是main()函数的返回类型。这表明main()函数返回的值是整数且授受任何数量的参数。void main():void为空型。这表明main函数无返回值目受任何数量的参数。int main(void):main不接受任何参数且返回的值是整数。另外请注意:main()为老式的写法。返回类型int在新型的编泽器通不可以省略,否则会有警告:void main()为老式的写法。6.0及之前的vC使用这祥的写法。原创 2022-11-01 21:56:24 · 16171 阅读 · 2 评论 -
Keil中translate,build和rebuild区别
Build是只编译工程中上次修改的文件及其它依赖于这些修改过的文件的模块,同时重新链接生成可执行文件。另外在技术文档中,Build实际上是指increase build,即增量编译。Rebuild是不管工程的文件有没有编译过,会对工程中所有文件重新进行编译生成可执行文件,因此时间较长。因此当平时对工程源文件里面main.c之类的进行修改时,选择用build编译链接生成可执行文件就行了。Translate是编译当前改动的源文件,在这个过程中检查语法错误。但并不生成可执行文件。原创 2022-10-31 16:33:56 · 2237 阅读 · 0 评论