各位大佬,还记得上周的那几个关键字么?其实,受性能限制,这里的内容在使用8051内核的MCU中用到的较少,而在对16/32位MCU编程时用到的较多。所以对于正在学习的8051MCU的同学来说,这些内容作为认知,看到知道它是什么意思即可。

先来回答上篇留下的结构体储存时的对齐问题。这里我用两个问题来引导。

1,结构体存储为什么要对齐?

Answer:对齐的形式更加有利于计算机进行快速的处理,在可接受的空间浪费的前提下,对齐使计算机处理需要的的时间尽可能的少。

2,结构体是如何对齐的?

Answer:这个问题其实解释起来是比较复杂(对于我而言),而且在不容的平台结果可能不一样。可以参阅博主“tsw123”的解释文章“解析C语言结构体对齐(内存对齐问题)”(阅读原文即可查看)。然后,下面这个结构体就好解释了。首先它的成员中最大字长是4,这样这个结构体占用的字节数将为4的倍数。然后a占用4字节,b[0],b[1]占用4字节,下面重点来了,b[2],c占用4字节,其中,前三个字节是真实数据,最后一个字节是无效数据。我能解释的,只有这么多了。

3,结构体何时才会考虑对齐问题?

Answer:拿正点原子的一个例子来说,在使用电阻屏时,计算触摸点需要记录四个参数xy方向的零点偏移,电阻率,它使用了一个结构体,专门保存触摸屏的函数、标志位、触摸点计算数据等等数据,这些数据是需要部分保存的EEPORM中的,上电时读取出来。这个时候就要考虑你的结构体占用多大空间。需要从基地址读取多少字节数据。

结构体struct:

结构体较多的用在库函数中,当我们初始化MCU的外设时,就是使用结构体将参数赋给结构体成员,然后调用初始化函数将数据写到寄存器。以上面的结构体为例。这里后面的GPIO_InitTypedef就是一个结构体类型,定义结构体时直接使用GPIO_InitTypedef

GPIO_Init_Structure

后面的GPIO_Init_Structure就是我新定义的一个结构体,给它的成员赋值,然后就可以初始化对应的外设,如上图的操作,就可以初始化GPIOB的Pin5

。上面文字得条理看起来的可能不是很清晰,你就可以理解为GPIO_InitTypedef相当于我们常用的 int

。GPIO_Init_Structure 就相当于我们定义的一个int型变量a。而a有int类型的特征,所以a也是一个结构体,它有三个成员。

枚举enum:

当大家看到上面的结构体可能看起来有些疑惑,明明是赋值,可是没看到一个数字,都是一串没见过的字符。那么请看结构体的第一个图,结构体成员的GPIO_Mode的类型是GPIOMode_TypeDef,这里的GPIOMode_TypeDef就是一个枚举型。枚举型规定,GPIO_Mode所给的值必须是上图中枚举型成员中有的,可以赋值GPIO_Mode_Out_PP,也可以赋值0x18。但是更好的方法是赋值GPIO_Mode_Out_PP,因为通过这个枚举型可以看出这里的配置成为推挽输出。而一个0x18,复查程序时,你又不知道这是哪一个配置了。同时使用枚举型又可以避免出错,因为赋给枚举型变量的值如果不是枚举成员,编译就不会通过。

联合体union:

联合体成员列表里的成员共用相同的内存空间,而不像struct结构体那样按顺序排列占用不同的内存空间。联合体用到的相当少,目前只在stdio.h中见过,所以不必深究。

断言assert:

这里的断言,可以认为他是一个安全检测;assert_param(duty<="" p="">

程序中常用的代码剪裁,功能限定:

在早期的库函数的conf.h和map.h中往往会有这样的代码,这是什么意思呢?这里是用作代码剪裁,或者屏蔽掉部分外设的库函数。就是说,我把_ADC3这个宏注释掉,下面的条件编译就不能通过,那么库函数中就不能使用ADC3的所有相关。一旦出现ADC3相关就会出现未定义的Error。在可剪裁的RTOS中,也会经常使用这种宏定义的方式来控制功能是否启用。

写在最后:多学无害,技多不压身。

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com

c语言编写对答机器人_RM机器人开发之C语言(二)相关推荐

  1. 【转载】Android逆向开发之smali语言的学习

    Android逆向开发之smali语言的学习 该文转载自乱码三千 – 分享实用IT技术 smali和java基本数据类型对比 smali java B byte S short I int J lon ...

  2. c语言二维数组输入数据,c语言编写程序,把下面的数据输入到一个二维数组中:...

    c语言编写程序,把下面的数据输入到一个二维数组中: 答案:3  信息版本:手机版 解决时间 2019-10-07 01:08 已解决 2019-10-06 03:19 1. 编写程序,把下面的数据输入 ...

  3. iOS开发之c语言入门教程

    苹果作为移动互联的高端品牌,iOS操作系统也被用户公认为是最好用的移动互联网操作系统.据了解,曾一度拒绝为iOS平台对出浏览器的火狐在今年5月份的时候,他们却食言了.今天,Mozilla宣布iOS版F ...

  4. python开发之Django(二)

    python开发之Django(二) 一.ORM 1. ORM基础 2. Django ORM语法 2.1 表(模型)的创建: 2.2 表的操作 2.2.1 增删改查 2.2.2 对象查询,单表条件查 ...

  5. c语言编写对答机器人_用C语言机器人编程

    用 C 语言机器人编程 目前市场上机器人套装或完整的产品, 都提供一个图形化编程界面, 这些编程界面对机 器人入门教育取到了很大的作用. 它使初学者不用了解计算机语言就能进行基本的机器人操 控编程,汉 ...

  6. c语言编写对答机器人_C语言编程-机器人课程.pdf

    机器人课程 机器人课程 2018 年5 月 免责条款:相关案例以实际项目为准 RobotAnno | TEL:0755Email:sales@ 1 机器人课程 目录 目录 2 教学内容.学时分配 7 ...

  7. 用c语言编写图书成绩管理系统,学生成绩管理系统(c语言编写).doc

    学生成绩管理系统(c语言编写) C程序 学生管理系统 /* Note:Your choice is C IDE */ #include "stdio.h" #include&quo ...

  8. C语言编写一个赋值程序,实验2 用C语言编写简单程序——2.1 基本数据处理.doc

    实验2 用C语言编写简单程序--2.1 基本数据处理 实验2 用C语言编写简单程序 2.1 基本数据处理 [实验目的] (1)掌握算术表达式和赋值表达式的使用. (2)掌握基本输出函数的使用. (3) ...

  9. java语言编写计算器_第二次作业利用java语言编写计算器进行四则运算

    随着第一次作业的完成,助教 牛老师又布置了第二次作业:用java语言编写一个程序然后进行四则运算用户用键盘输入一个字符来结束程序显示统计结果.一开始看到这个题目我也着实吓了一跳 因为不知道如何下手而且 ...

  10. 电大c 语言程序形考作业,国开电大 C语言程序设计 形考三答案

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 国开电大 C语言程序设计 形考三答案 786971758 一.选择题(共30分,每小题2分) 题目1还未回答满分2.00标记题目题干 在下面的函数声明语句 ...

最新文章

  1. IOCP , kqueue , epoll ... 有多重要?
  2. 什么时候可以全面升级鸿蒙系统,华为已做好全面升级准备,鸿蒙系统将替换底层安卓系统...
  3. 山东大学继续教育计算机3,山东大学继续教育数字电子技术基础试题3及答案.doc...
  4. plsql job执行多个存储过程_在Kubernetes的一个Pod内连续依次执行Container
  5. js控制每行输出2个LI隔行换色
  6. 将SQL中数据输出到Excel中
  7. Windows操作系统启动介绍(二)
  8. json文件转为excel_2分钟上手、3小时学会无代码软件开发---XML、Json处理
  9. 网络安全01-网络安全入坑
  10. linux下的安装:openssl
  11. bootstrap中表格、修饰图片、浮动、背景框、提示框及关闭提示框、元素淡入淡出及jQuery中操作类名
  12. 【编程】基本程序设计模式
  13. Linux驱动实现灯循环闪烁,TQ2440上LED灯闪烁效果的驱动程序实现
  14. openfire源码解读--用户登录
  15. 串口通信实例vb.net serialport
  16. 2022-4-23基于单片机的酒驾检测报警系统(MQ3酒精传感器)(风吹摇铃 奔赴星海)
  17. SANGFOR-AD-6.3负载均衡机业务配置
  18. 工作中 pyspark的小知识点
  19. 【JMeter】后置处理器之JSON提取器
  20. 破解tumblr背景音乐

热门文章

  1. 想要永久清除微信记录?一招解决你的后顾之忧,再无法恢复
  2. 火车浏览器抓取国家统计局省、市、区、街道
  3. MITgcm-Darwin project key paper阅读
  4. Java刺客信条回复生命_《刺客信条:英灵殿》回复生命值方法
  5. C中的有符号数和无符号数之间的转换
  6. 想开一个菜鸟驿站,需要投资多少钱,要准备什么?
  7. python 微信wxpy 限制无法发送大于0.5m文件、图片、视频等问题
  8. View平移动画的正确写法
  9. MySql按条件插入数据,MySQL插入语句写where条件,MySQL在插入时做幂等
  10. C# NOPI导出EXCEL报错