MDK下C语言基础复习
写在前面:就在前几天我刚刚参加完了蓝桥杯的省赛,在比赛之前我阅读了社区里许多优秀博主的文章,所以也想把自己的收获当作笔记记下,希望能够帮助后面也要参赛的同学,顺便也总结一下自己这段时间的收获。
这一部分是MDK中有关C语言的部分,如果大家C语言都学得很好就忽略,主要是讲一些基本操作。
1.1位操作
在MDK下常用的位操作符和微操作技巧
C语言支持如下6钟位操作
其中这里与、或、异或和取反不用我多讲我在这里讲一下移位运算。
移位运算包括左移和右移
左移运算:x< 例子: 假设u8 A=0000 0001 A<<1=0000 0010 位操作技巧 1)不改变其他位的值的状况下,对某几位进行设值。 方法:先对需要设置的位用&操作符进行清零操作,然后用|操作符设置值。 GPIOA->CRL&=0XFFFFFF0F; //将第4-7位清0 然后再与需要设置的值进行|或运算 GPIOA->CRL|=0X00000040; //设置相应位的值 2)移位操作提高代码的可读性 可以利用移位操作让代码更直观 GPIOA->ODR|=1<<5; //PA.5输出高,不改变其他位 这样我们一目了然,5告诉我们是第5位也就是第6个端口,1告诉我们是设置为1了。 常见问题总结 Q1:0x20代表什么? A1:0x是整型常量的表示方式。以0x开头的整型常量,代表后续字符为16进制的表达。于是0x20代表十六进制的20,也就是10进制的32. Q2:&=、|=是什么意思 A2:按位与后赋值和按位或后赋值 扩展资料: https://zhidao.baidu.com/question/1576758038983362220.html 内含几个例子和解释 1.2 define 宏定义 格式 #define 标识符 字符串 1.3 ifdef 条件编译 单片机程序开发过程中,经常会遇到一种情况,当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。 条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程序度2 #endif 它的作用是: 当标识符已经被定义过(一般是用#define命令定义), 则会对程序段1进行编译, 否则编译程序段2。 其中#else部分也可以没有, 这个条件编译在MDK里面是用的很多的。 其实这个语句是专门用在写.h文件上的,大家记住就可以了 #ifndef __ADC_H #define __ADC_H /* Includes ------------------------------------------------------------------*/ #include "stm32f10x.h" void ADC1_Init(void); u16 ADC_Read(void); #endif 这个是我写的ADC的.h文件,之后的.h文件也都是这么写就可以了 在程序段中写函数声明就行了 1.4 extern变量声明 C语言中extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。 当我们编程时候经常会在main.c中声明变量,而在.h文件中对这个变量进行重新的赋值或者操作,我们就需要在.h文件中声明这个变量在其他地方定义过了,就是运用我们的extern。大家可能这里不是很理解extern是怎么用的,不用担心我们到了之后就自然会了,这里有个印象就好
设计资源 培训 开发板 精华推荐
- 有奖直播已结束【如何利用 TI MSPM0 汽车微控制器提高检测和控制性能】
- 雷柏、京造的无线充电鼠标垫,等你拆开看——EEWorld邀你来玩拆解(第三期)
- 老T叔的藏书阁——一位老工程师多年的资料积累
- 有奖直播|第三代 TI C2000™ 新特性资源更新
- 有奖直播:NXP 汽车系统电源管理开讲啦,从功能安全架构到新品FS26,预约有礼~
- 带你零起点入门STM32(专为嵌入式应用而开发的内核)
- 【社区大讲堂】揭秘ADI实验室电路!
- 电路图站2.0版上线,公开征集网友建议,填写调查问卷赢积分!
- 遇见春天,“愚”你同乐 快来与keysight一起学习 光通信测试测量解决方案 下载赢好礼!
- 有奖直播报名|ST 家用电器三相电机控制解决方案