- 博客(8)
- 收藏
- 关注
转载 C语言:结构体—关于内存字节对齐图文详解
现代计算机中内存空间都是按照字节(byte)划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序地一个接一个地排放,这就是对齐。
2023-05-15 21:48:06 570
转载 GPIO的八种工作模式
(2)一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。可以简单的理解为:在所有引脚连在一起时,外接一上拉电阻,如果有一个引脚输出为逻辑0,相当于接地,与之并联的回路“相当于被一根导线短路”,所以外电路逻辑电平便为0,只有都为高电平时,与的结果才为逻辑1。(3)开漏输出提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。
2023-05-15 21:33:55 1117 1
原创 C语言 变量的作用域、生命周期与内存分配
如果对于一个变量而言,假设不期望其它文件有修改这个变量的能力,但其它文件又需要该变量的值,就可以在源文件中定义一个静态全局变量,同时使用函数对其的值进行修改和获取,对外只提供函数接口即可,其它文件通过函数接口间接使用该变量。函数中,变量num是静态局部变量,在第一次进入函数的时候被声明,然后执行自加操作,当第二次进入函数时,num不会被重新初始化变成0,而是保持1,再自增,其作用域仍然是cnt函数体内。在函数内使用static修饰一个变量,它的生命周期将同全局变量一样,作用域被限制在函数内。
2023-05-15 11:18:59 994
原创 ARM汇编学习笔记总结
SWP R1,R1,[R2] 将寄存器 R1 的值和 R2 指定的存储单元的内容交换,将R2的数值作 为一个地址,将此地址处的数值与R1中的内容交换。当我们进行出栈和入栈的时候,都将根据该寄存器的值来决定访问内存的位置(即出入栈的内存位置),同时在出栈和入栈操作完成后,SP寄存器的值也应该相应增加或减少。先 R0=R0-4 ,然后把 R1 的值寄存到 R0 指定的存储单元。
2023-05-15 00:31:14 286
原创 模拟升降控制器项目
2. LCD显示模块中,最初将当前平台和目标平台的数字跟随RTC的刷新时间,测试过程中发现过于浪费资源,于是定义二者的刷新标志,在状态机函数中将标志进行赋值,置1时才进行刷新,大大减少无用的刷新次数。状态3:停留等待状态,清空到达平台标志,将门状态置为保持,停留2s时间结束后重新切换到状态0,此时完成逻辑闭环,未走完标记的平台时进入新一轮状态机切换,直到没有标记的平台。3. 一次可以设定多个目标平台,升降机的升降顺序与按键顺序无关,当存在要上行的平台时,优先走完设定的上行平台,之后再走下行的平台;
2023-05-14 17:50:04 292
原创 SPI、IIC、UART协议时序图总结笔记
接口引脚数据同步方式数据传输方向UARTTXD:发送端RXD:接收端GND:公共地异步通信全双工IICSCL:同步时钟SDA:数据输入输出端同步通信半双工SPISCK:同步时钟MISO:主机输入,从机输出MOSI:主机输出,从机输入CS:片选信号同步通信全双工。
2023-05-13 22:50:30 1486
原创 C语言学习之volatile关键字
测试时发现与实际设定的时间不符,通过调试发现count变量有时没有正确调用更新的值,想到volatile和编译器相关知识点:这些变量被频繁地跨文件赋值和调用,变量赋值或取值的操作可能在编译过程中被编译器优化,用volatile关键字声明的变量,在每次对其值进行引用的时候都会从原始地址取值,用来消除编译器的优化。不幸的话,(或者你不认真的查看编译器警告),你的程序无法正常执行。“一些编译器允许把所有的变量隐式的声明为volatile,请抵制这种诱惑,因为它会令你不再思考,当然也会导致生成低效的代码。
2023-05-13 22:36:42 169
蓝桥杯嵌入式第八届省赛真题-模拟升降控制器
2023-05-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人