找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2122|回复: 1
打印 上一主题 下一主题
收起左侧

关于基本数据类型的定义

[复制链接]
跳转到指定楼层
楼主
ID:105323 发表于 2016-2-24 17:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
写这篇博文的目的就是为了清晰的缕一下自己的思路,把用到的记录下来以便将来方便使用。
char:1个字节
short:2个字节
int:在51等8位单片机下为2字节,32位RAM单片机下为4字节​(在考虑不同平台移植时最好用short和long)
long:4个字节​
float:4个字节
double:8个字节
下面是stm32中常用到的类型:​
u8 是 unsigned char
u16 是 unsigned short
u32 是 unsigned int(32位下,下面省略)


关于uint8_t/uint16_t/uint32_t/uint64_t等数据类型​
在inttypes.h下可以看到
00001
00017
00018 #ifndef __INTTYPES_H_
00019 #define __INTTYPES_H_
00020
00021
00023
00024 typedef signed char int8_t;
00025 typedef unsigned char uint8_t;
00026
00027 typedef int int16_t;
00028 typedef unsigned int uint16_t;
00029
00030 typedef long int32_t;
00031 typedef unsigned long uint32_t;
00032
00033 typedef long long int64_t;
00034 typedef unsigned long long uint64_t;
00035 ​
00036 typedef int16_t intptr_t;
00037 typedef uint16_t uintptr_t;
00038
00039 #endif
使用uint_t定义更加方便,由于使用了typedef(为C语言的关键字
,作用是为一种数据类型定义一个新名字。)使得在不同的平台下更好的移植。


还有三种遇到的类型​
typedef __IO int32_t  vs32;
typedef __IO int16_t  vs16;
typedef __IO int8_t   vs8;
#define __IO volatile ​
volatile 影响编译器编译的结果,指出,volatile变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错。
它的作用使得编译器​每次都会调用它本身,不会因为变量因为寄存器等变化出现错误,volatile可以保证对特殊地址的稳定访问,不会出错。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:105323 发表于 2016-2-24 17:12 | 只看该作者
基本指针,数组,结构体
记录下自己比较灵活比较实用的用法。
1.指针在函数中的数值传递。
首先举一个例子:
void GetData(T_float_angle *dmp_angle,T_short_xyz*gyr,T_short_xyz *acc)
{
if(mpu_dmp_get_data(&dmp_angle->pit,&dmp_angle->rol,&dmp_angle->yaw)==0)
{
mpu6050_GetGyroData(&gyr->x,&gyr->y,&gyr->z);
mpu6050_GetAccData(&acc->x,&acc->y,&acc->z);
}}
​下面这样调用它:(变量已在前面定义)
void DataRefresh(void)
{
static u8 rc_cnt=0;
GetData(&MPU_Angle,&MPU_Gyr,&MPU_Acc);
while(ERROR!=NRF_Rx_Dat(RX_BUF));
DataReceiveTransfer(RX_BUF,32,&Rc_in);
Rc_Fun(&Rc_in,FLY_Lock);
}
这样使用的优势在于可以减少变量的定义,把自己需要用到的变量在调用函数的同时讲变量进行不同函数之间的传递,减少中间变量的定义,使得思路清晰,方便。

​2.指针与数组的关系
举个例子:​
void usart1_SendBuf(u8 *buf,u8 len)
{
int i;
for(i=0;i
usart1_SendChar(*(buf+i));       //可以换成usart1_SendChar(*buf);  buf++;
}
调用:​
u8 code[5]={1,2,3,4,5}​;
usart1_SendBuf​(code,5);
这说明​数组名相当于一个指针,同时数组名所在的地址就是指向指针的首个地址。

3.结构体的定义​
typedef struct  int16_xyz{
                    int16_tX;
                    int16_tY;
                    int16_tZ;}T_int16_xyz;
一个典型的例子,通过struct定义了结构体​名为int16_xyz,里面包含了int16_tX,Y,Z三个变量,为了方便定义用了typedef方便这个结构体声明类型T_int16_xyz。
​只需调用T_int16_xyz GYRO;​
这时GYRO中包含了X,Y,Z三个整型变量。​
使用结构体会使得结构清晰,提高代码的可读性。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表