首页 > 其他分享 >嵌入式杂谈——(问题解决三:嵌入式中的数据类型)

嵌入式杂谈——(问题解决三:嵌入式中的数据类型)

时间:2025-01-16 20:59:24浏览次数:3  
标签:符号 数据类型 杂谈 uint8 整数 嵌入式 类型 uint32

列举

1. 标准固定宽度整数类型

这些类型定义在 <stdint.h> 头文件中,用于明确指定数据的位数,适合嵌入式系统中需要精确控制数据大小的场景。

类型位数范围(有符号)范围(无符号)说明
int8_t8-128 到 127-8 位有符号整数
uint8_t8-0 到 2558 位无符号整数
int16_t16-32,768 到 32,767-16 位有符号整数
uint16_t16-0 到 65,53516 位无符号整数
int32_t32-2,147,483,648 到 2,147,483,647-32 位有符号整数
uint32_t32-0 到 4,294,967,29532 位无符号整数
int64_t64-2^63 到 2^63-1-64 位有符号整数
uint64_t64-0 到 2^64-164 位无符号整数

特点

  • 明确指定数据宽度,避免平台差异。

  • 适合与硬件寄存器、协议数据包等交互。

2. 通用整数类型

这些是 C 语言中的标准数据类型,但其大小可能因平台而异,因此在嵌入式系统中使用时需要谨慎。

类型典型位数范围(有符号)范围(无符号)说明
char8-128 到 1270 到 255字符类型,也可用于小整数
short16-32,768 到 32,7670 到 65,535短整数
int16/32依赖于平台依赖于平台整数类型
long32/64依赖于平台依赖于平台长整数
long long64-2^63 到 2^63-10 到 2^64-1超长整数

特点

  • 大小依赖于编译器和平台,可移植性较差。

  • 在嵌入式系统中,建议优先使用 <stdint.h> 中的固定宽度类型。

3. 浮点类型

嵌入式系统中浮点运算通常较慢,且某些低端微控制器可能不支持硬件浮点单元(FPU),因此浮点类型的使用需要谨慎。

类型位数范围说明
float32约 ±3.4e-38 到 ±3.4e38单精度浮点数
double64约 ±1.7e-308 到 ±1.7e308双精度浮点数

特点

  • 浮点运算可能占用较多资源。

  • 如果微控制器没有 FPU,浮点运算会通过软件模拟,效率较低。


4. 布尔类型

用于表示逻辑值(真或假)。

类型位数范围说明
bool8true/false布尔类型,定义在 <stdbool.h>

特点

  • 通常用 8 位存储,但实际只使用 1 位。

  • 在嵌入式系统中,可以用 uint8_t 或位域替代以节省空间。


5. 指针类型

指针用于直接访问内存地址,在嵌入式系统中常用于操作硬件寄存器或动态内存管理。

类型说明
void*通用指针类型
uint8_t*指向 8 位无符号整数的指针
uint32_t*指向 32 位无符号整数的指针

特点

  • 指针的大小依赖于架构(例如 8 位、16 位、32 位或 64 位微控制器)。


6. 位域(Bit-field)

用于节省内存,将多个布尔值或小范围整数打包到一个字节中。

c

复制

struct {
    uint8_t flag1 : 1;  // 1 位
    uint8_t flag2 : 1;  // 1 位
    uint8_t value : 6;  // 6 位
} status;

特点

  • 适合存储多个标志位或小范围整数。

  • 节省内存,但访问效率可能较低。


 7. 枚举类型

用于定义一组命名的常量值。

c

复制

typedef enum {
    STATE_IDLE,
    STATE_RUNNING,
    STATE_ERROR
} SystemState;

特点

  • 提高代码可读性。

  • 实际存储为整数类型(通常是 int)。

  •    8.特殊硬件相关类型

  • 嵌入式系统中,某些硬件寄存器可能需要特定的数据类型,例如:

  • volatile 类型:用于修饰可能被硬件改变的变量,防止编译器优化。

    volatile uint32_t* reg = (uint32_t*)0x40000000;
  • const 类型:用于修饰只读数据,通常存储在 Flash 中。

    const uint8_t table[] = {0x01, 0x02, 0x03};

如何使用

场景推荐数据类型原因
硬件寄存器操作uint8_tuint16_tuint32_t寄存器宽度固定,使用固定宽度类型确保数据匹配。volatile 防止编译器优化。
存储小范围整数或标志位uint8_tint8_t、位域(Bit-field)节省内存,适合小范围数据或多个布尔值打包。
计数器或循环变量uint8_tuint16_tuint32_t根据计数范围选择合适类型,避免溢出。
浮点运算float、定点数(Fixed-point)浮点运算较慢,定点数适合没有硬件浮点单元(FPU)的系统。
布尔值和标志位booluint8_t、位域(Bit-field)bool 可读性高,位域节省内存。
协议数据包或通信数据uint8_tuint16_tuint32_t协议字段通常有固定宽度,使用固定宽度类型确保数据对齐和解析正确。
时间和延时uint32_tuint16_t时间值通常较大,uint32_t 覆盖较大范围。
枚举类型enum提高代码可读性,实际存储为整数类型。
动态内存管理void*uint8_t*动态内存管理需要灵活处理不同类型的数据。
特殊硬件相关类型volatileconstvolatile 防止编译器优化,const 将数据存储在 Flash 中,节省 RAM。

标签:符号,数据类型,杂谈,uint8,整数,嵌入式,类型,uint32
From: https://blog.csdn.net/JK03820/article/details/145191692

相关文章

  • MYSQL数据类型
    数据类型结构化数据、例如关系型数据库半结构化数据、HTML、XML、JSON非结构化数据SQL(结构化查询语言)命令关系型数据库擅长处理结构化数据、可以通过结构化查询语言对数据进行CRUD(增删改查)DDL(数据定义语言):主要包含的命令有create、drop、a......
  • Rust如何在代码中查看一个变量的数据类型?
    Rust如何在代码中查看一个变量的数据类型?UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU在Rust中,你可以使用std::any::TypeId来查看一个变量的类型,但是这种方式通常用于调试或元编程,而不是日常开发的主要方法。Rust是强类型语言,通常在编译时就能检查类型,开发者无需显式查看类型。但......
  • (四)C语言基础学习(3):深入理解输入输出函数、数据类型的格式控制与流程控制
    一、标准输入输出函数1.字符输入输出:getchar和putchar这两个函数是最基本的输入输出函数,用于单个字符的读取和显示。intgetchar(void);//从键盘获取一个字符intputchar(intc);//向终端输出一个字符示例:charch=getchar();//读取一个字符putchar(ch);......
  • 自学嵌入式
    #学习嵌入式第二天##C语言的基本数据类型C语言的基本数据类型,基本的数据类型有整型、浮点型(单精度、双精度)、字符型。整型数据有int、short、long、longlong四种类型。数据又分为有符号数和无符号数,二者数据表示的范围不同。int型:占4个字节;对于有符号数(signed)数据表示......
  • 嵌入式学习
    #C语言基础#今天学习了输入输出函数(printf、scanf)、流程控制——选择结构(if语句)#输入输出函数#printf()函数printf()函数为格式化输入输出函数,其函数原型为:intprintf(constchar*format,...);调用方法为:printf("格式化控制字符串",输出参数列表)。格式化字符串中分为普通字......
  • Open FPV VTX开源之嵌入式OSD配置
    OpenFPVVTX开源之嵌入式OSD配置1.源由2.安装3.配置步骤一:备份`/etc/telemetry.conf`步骤二:修改`/etc/telemetry.conf`步骤三:配置时区步骤四:重启摄像头4.实测5.参考资料1.源由穿越机模拟图传延迟通常在10ms左右。最近为什么OpenIPC这么热,主要原因就是该项目......
  • 嵌入式中fputc重定向
    #include"stm32f4xx_hal.h"#include<stdio.h>//假设存在两个输出目标externUART_HandleTypeDefhuart1;//UART1externUART_HandleTypeDefhuart2;//UART2//自定义fputc,区分不同的FILE*流intfputc(intch,FILE*f){  if(f==stdout){   ......
  • 嵌入式杂谈(问题解决一:使用HAL库时keil中代码的分区)
     如图,代码分区代码区域作用Privateincludes引入所需头文件,提供函数声明、类型定义和宏等Privatetypedef创建自定义数据类型,增强代码可读性与维护性Privatedefine定义常量和宏,方便代码修改与简化Privatemacro实现简单代码替换,简化代码逻辑Privatevariables声明和初始化......
  • 嵌入式学习录2
    数据类型运算符和表达式一、什么是编程用编程语言把人类的思想告诉计算机,让计算机解决人类的问题。是人类与计算机“交流”的途径。编程语言有很多种类:C语言pythonjava......等,本文章主要学习C语言。1、学习目标(1)语法//格式(2)编程思维 //思路(3)编程习惯二、常量......
  • 嵌入式学习录3
    书接上回数据类型运算符和表达式(2)一、转义字符及字符常量转义字符是由反斜杠\将后面的字符转换成其他的意义以下为转义字符及其作用:二、算术运算符+  加法-  减法*  乘法/  除法   注:1.如果是两个整型数相除效果相当于是整除    ......