STM32变量类型定义及延伸

本文详细解析了STM32微控制器中各种变量类型的定义及其范围,包括确切宽度的有符号和无符号整数类型、最小宽度类型、最快类型、指针承载类型以及最大宽度类型。同时提供了每个类型的最大和最小值,帮助开发者正确选择和使用变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

注意:数据的运算可能会超过变量定义的类型 ,所以定义变量时要注意!

STM32F4内的变量类型定义:在stdint中

    /* exact-width signed integer types */
typedef   signed          char int8_t;
typedef   signed short     int int16_t;
typedef   signed           int int32_t;//在32位环境里,int代表4个字节32位
typedef   signed       __INT64 int64_t;

    /* exact-width unsigned integer types */
typedef unsigned          char uint8_t;
typedef unsigned short     int uint16_t;
typedef unsigned           int uint32_t;
typedef unsigned       __INT64 uint64_t;

    /* 7.18.1.2 */

    /* smallest type of at least n bits */
    /* minimum-width signed integer types */
typedef   signed          char int_least8_t;
typedef   signed short     int int_least16_t;
typedef   signed           int int_least32_t;
typedef   signed       __INT64 int_least64_t;

    /* minimum-width unsigned integer types */
typedef unsigned          char uint_least8_t;
typedef unsigned short     int uint_least16_t;
typedef unsigned           int uint_least32_t;
typedef unsigned       __INT64 uint_least64_t;

    /* 7.18.1.3 */

    /* fastest minimum-width signed integer types */
typedef   signed           int int_fast8_t;
typedef   signed           int int_fast16_t;
typedef   signed           int int_fast32_t;
typedef   signed       __INT64 int_fast64_t;

    /* fastest minimum-width unsigned integer types */
typedef unsigned           int uint_fast8_t;
typedef unsigned           int uint_fast16_t;
typedef unsigned           int uint_fast32_t;
typedef unsigned       __INT64 uint_fast64_t;

    /* 7.18.1.4 integer types capable of holding object pointers */
#if __sizeof_ptr == 8
typedef   signed       __INT64 intptr_t;
typedef unsigned       __INT64 uintptr_t;
#else
typedef   signed           int intptr_t;
typedef unsigned           int uintptr_t;
#endif

    /* 7.18.1.5 greatest-width integer types */
typedef   signed     __LONGLONG intmax_t;
typedef unsigned     __LONGLONG uintmax_t;


#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS)

    /* 7.18.2.1 */

    /* minimum values of exact-width signed integer types */
#define INT8_MIN                   -128
#define INT16_MIN                -32768
#define INT32_MIN          (~0x7fffffff)   /* -2147483648 is unsigned */
#define INT64_MIN  __INT64_C(~0x7fffffffffffffff) /* -9223372036854775808 is unsigned */

    /* maximum values of exact-width signed integer types */
#define INT8_MAX                    127
#define INT16_MAX                 32767
#define INT32_MAX            2147483647
#define INT64_MAX  __INT64_C(9223372036854775807)

    /* maximum values of exact-width unsigned integer types */
#define UINT8_MAX                   255
#define UINT16_MAX                65535
#define UINT32_MAX           4294967295u
#define UINT64_MAX __UINT64_C(18446744073709551615)

 参考:https://blog.youkuaiyun.com/f1engmin11/article/details/70946471  和上述库文件中的一致

参考:http://www.cnblogs.com/wangh0802PositiveANDupward/archive/2013/01/01/2841697.html

 

【1】STM32库文件

【2】STM32变量类型定义 https://www.cnblogs.com/dion-90/articles/9120146.html

 【3】https://blog.youkuaiyun.com/hailin0716/article/details/49201025

 

STM32单片机编程中建立全局变量是一个相对简单的过程,但也需要遵循一定的规范以保证程序的健壮性和可维护性。 ### 全局变量的基本概念 **全局变量**是指可以在整个项目范围内访问的变量。它通常声明在一个头文件或源文件中,并通过`extern`关键字引入到其他文件中使用。全局变量的作用域从其定义的地方一直延伸到包含它的所有模块结束。 ### 定义步骤: #### 1. **选择合适的位置定义** - 可以将全局变量直接放在`.c`文件里最开始的部分(即函数外面),不过这样做只能让这个.c文件里的函数可以访问该变量。 ```cpp // main.c 或者任意 .c 文件开头处 int globalVar = 0; // 这样定义了一个初始化值为0 的int 类型全局变量 ``` #### 2. **如果希望其他文件也能看到此全局变量,则应在.h文件申明并加上extern关键词** - 在对应的头文件如 `globals.h` 中添加如下内容 ```cpp #ifndef GLOBALS_H_ #define GLOBALS_H_ extern int globalVar; #endif /*GLOBALS_H_*/ ``` - 然后再回到之前创建了实际存储空间的那个 `.c` 文件里面,在相应位置给出具体的定义而不再加extern: ```cpp // globals.c (或者main.c) int globalVar; ``` #### 3. **引用全局变量** 当你需要在另一个文件中使用已有的全局变量时,只需在那个文件顶部加入相应的头文件即可: ```cpp // otherfile.c #include "globals.h" void someFunction() { // 直接读取/修改globalVar... globalVar += 5; } ``` 需要注意的是滥用全局变量可能会导致代码难以调试以及理解;因此除非必要尽量减少它们的数量。对于那些只会在少数几个地方使用的数据考虑采用局部静态变量、传递参数等方式代替。 另外,在编写多线程应用程序的时候也要小心处理共享资源的问题,比如对某些临界区内的操作应该采取适当的同步机制防止竞争条件的发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

heda3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值