define和unsigned int在单片机中都是定义的意思,在应用中怎么区分,谢谢
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了define和unsigned int在单片机中都是定义的意思,在应用中怎么区分,谢谢相关的知识,希望对你有一定的参考价值。
define 只是定义一个名称,比如你叫小亮,那么:#define NAME 小亮
以后代码中,凡是出现‘NAME’的地方,都会被替换成 ‘小亮’。
在编译上看,#define只是告诉编译器 ‘一个名称替换’, 编译器不会为其分配内存空间,即使你定义了一个#define,然后在代码中没有使用,编译器也不会给出任何警告。
相反,unsigned int是一个变量定义,编译器会为其分配内存,如果你定义了一个变量,但程序中没有使用,编译器也会为其分配内存,同时给出警告。
在单片机中,因为内存资源非常有限,如果能用#define定义一些端口,地址之类的常量,一定要用#define.追问
能举例说下unsigned int吗,整型变量和费整型变量怎么区分,多谢
追答unsigned 表示没有符号,无法表示负数,但相同位长下,unsigned int 比int 表示的正数范围要大,注意,是正数。 如果程序需要处理负数,就要写int。
整形就是 unsigned int 或者int。
非整形包括 char ,short, float, double, 指针,结构体,枚举。
可以理解为就是给变量取个别名,这个别名在整个工程都可以用;
2)unsigned int 是类型定义,无符号整型。
是给变量定义具体的类型,而且有使用的范围,在哪个函数里定义,就只能在这个函数里使用。 参考技术B define和unsigned int,不是单片机中的东西。
它们是 C 语言中的。
楼主想要仔细的深入的研究,就应该去看专门介绍 C 语言的书。
在单片机领域,不会仔细讨论这些。
只是拿来就用,不讲道理。追问
但单片机变成需要呀
追答需要,你就用呗。
想要弄明白,就应该去看专门介绍 C 语言的书。
宏定义什么意思,具体点
unsigned int还有
#define A 100
int main()
int PA(int);\\\\PA函数声明
int a=1,b; \\\\局部变量小a和b
printf("\\d",PA); \\\\用于第二函数
a+A=b; \\\\b等于a加大A,A已在main函数外定义过了是宏定义在函数里不用再定义了
printf("%d",b);\\\\输出b值
return 0;
int PA(int c);
int z=0,c;
c=A+z; \\\\不需要在定义A了
return(c);
unsigned int是无符号整型的值在0~65535,int(整数值)是-32768~32767。无符号是说 100前没有符号是正数值unsigned int 只能为正数
(C)理解 #define write(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b))
1. 理解
嵌入式系统编程,要求程序员能够利用C语言访问固定的内存地址。
既然是个地址,那么按照C语言的语法规则,这个表示地址的量应该是指针类型。
所以,知道要访问的内存地址后,比如0x57000040(这儿的addr就是内存地址0x57000040)
第一步是要把它强制转换为指针类型
(unsigned int*)(0x57000040);
所以0x57000040强制转换为指向unsigned int类型。
volatile(可变的)这个关键字说明这变量可能会被意想不到地改变,这样编译器就不会去假设这个变量的值了。
简单的说使用volatile的目的就是: 让对volatile 变量的存取不能缓存到寄存器,每次使用时需要重新存取。
第二步,对指针变量解引用,就能操作指针所指向的地址的内容了
*(volatile unsigned int*)(0x57000040)
小心地把#define宏中的参数用括号括起来,这是一个很好的习惯。
所以,write(b,addr) 的作用就是把值b写入addr所指的内存地址单元。
以上是关于define和unsigned int在单片机中都是定义的意思,在应用中怎么区分,谢谢的主要内容,如果未能解决你的问题,请参考以下文章
unsigned char 与 char 有啥却别?何时适用
单片机中unsigned char 和unsigned int的区别
单片机中编程为甚么很多都用 unsigned int ,和int有啥区别?
#include <reg52.h> #define uchar unsigned char //宏定义 #define uint unsigned int void de