嵌入式C语言的变量和函数存储类型

目录

概述

1 嵌入式C的数据类型

2 嵌入式C语言存储类型

2.1 auto存储类型

2.2 extern存储类型

2.3 register存储类型

2.4 static存储类型


概述

本文主要介绍嵌入式C语言中的数据变量的类型,包括其数据长度,在内存中的存储方式。还介绍了数据的存储类型的相关内容。

1 嵌入式C的数据类型

数据类型主要用来之门变量的存储大小,即一个类型变量占用了多大的内存空间,嵌入式C的数据类型包括如下这些:

1)基本数据类型(32位MCU)

整形数据类型

类型数值范围
short int-32768 ~ 32768
unsigned short int0~65535
int-2 147 483 648 ~ 2 147 483 647
unsigned int0 ~ 4 294 967 295
long int-2 147 483 648 ~ 2 147 483 647
unsigned long int0 ~ 4 294 967 295

浮点类型

float: 单精度浮点数

double: 双精度浮点数

long double: 扩展精度浮点数

字符型

char: 该类型变量可以用任意的单字符赋值

char ch;ch = 'a';
ch = '1';
ch = '-';

字符型数据也可以分为:

有符合字符: 字符范围(-128 ~ 127 )

无符号字符 :字符范围(0 ~ 255 )

2)用户自定义数据类型

自定义类型包括:

类型说明
struct结构体定义
enum枚举型数据
typedef类型重定义
union联合型定义

2 嵌入式C语言存储类型

2.1 auto存储类型

auto只能用来标识变量的存储类型,意义上是自动类型,标识该局部变量存储在正在运行的进程栈区域。一般情况,对于局部变量,auto为默认的存储类型,不需要显示指定。

局部变量的特点:

1)局部变量的作用域在一队{ }类,生存周期为当前函数

2)局部变量如果没有被初始化,系统将会为其分配一个随机值

2.2 extern存储类型

extern关键字,既可以标识变量,也可以标识函数。

标识变量:用来声明当前文件中的引用,该变量已经被初始化到数据区。所以,声明其他文件中的变量,内存不在为其分配存储区。

标识函数:存贮类型仅仅标记函数的作用域,函数默认的存储方式为extern。也就是说,在一个项目中,没有一个文件中函数没有被声明函数类型,该函数可以被项目中所有的函数引用。

2.3 register存储类型

 register关键字只能用来标识变量,被标识为register类型的数据只能为整形和字符型。此关键字只用来标识长期被使用的变量

普通变量和register变量的差异:

1)普通变量: 在运行程序时,所有的数据都将调入到MCU的寄存器中才能被真正的处理,而由于CPU的寄存器有限,普通的变量存储在内存单元中,只有在使用时,才能加载到CPU的寄存器中,使用完成后,立即清除掉。

2)register类型变量: register类型的变量常驻在CPU的寄存器中

register类型数据的特点:

从内存加载摸个数据到CPU的寄存器至少需要一个周期,访问寄存器类型的变量将在很大程度上提高效率。

和auto类型一样,未初始化的register类型变量,也会被分配一个随机值。

2.4 static存储类型

static为静态类型,既可以标识变量,也可以表示函数。被声明为静态类型的变量(无论是全局变量还是局部变量)存储在数据区,其生命周期为整个运行程序的周期。

如果该变量在{ } 内,其作用域聚在该{ }内;如果在变量时一个全局变量,其作用域在当前文件。

静态变量没有被初始化,将会被自动初始化为0。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/8708.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言 | Leetcode C语言题解之第77题组合

题目: 题解: int** combine(int n, int k, int* returnSize, int** returnColumnSizes) {int* temp malloc(sizeof(int) * (k 1));int tempSize 0;int** ans malloc(sizeof(int*) * 200001);int ansSize 0;// 初始化// 将 temp 中 [0, k - 1] 每个…

Vue项目中使用echarts教程

Vue项目中使用echarts教程 步骤npm 安装ECharts引入 ECharts老版本引入方式 (v4版本)新版本引入方式 (v5版本) ECharts初体验ECharts组件化(进阶写法) 步骤 npm 安装ECharts npm install echarts --save引…

回答篇:测试开发高频面试题目

引用之前文章:《测试开发高频面试题目》 https://blog.csdn.net/qq_41214208/article/details/138193469?spm1001.2014.3001.5502 本篇文章是回答篇(持续更新中) 1. 什么是测试开发以及其在软件开发流程中的作用。 a. 测试开发是指测试人员或…

关于Anaconda常用的命令

常用命令 查看当前环境下的环境:conda env list查看当前conda的版本;conda --version conda create -n your_env_name pythonX.X(2.7、3.6等)命令创建python版本为X.X。名字为your_env_name的虚拟环境。your_env_name文件可以在Anaconda安装…

收银系统源码--什么是千呼智慧新零售系统?

千呼智慧新零售系统是一套针对零售行业线上线下一体化收银系统。给门店提供线下称重收银、o2o线上商城、erp进销存、精细化会员管理、丰富营销插件等一体化解决方案。多端数据打通,实现线上线下一体化,提升门店工作效率,实现数字化升级&#…

前端项目加载离线的百度地图,利用工具进行切指定区域的地图影像,自定义图层getTilesUrl

百度地图在开发中我们经常使用,但是有些项目是需要在内网进行,这时候我们不得不考虑项目中一些功能需要请求外网静态资源,比如百度地图。只有把包下载到本地,才能让静态资源文件的正常的访问。 目录 获取百度地图开发秘钥 引入在…

设计模式——装饰者模式(Decorator)

装饰者模式(Decorator Pattern)是一种结构型设计模式,它允许你动态地给一个对象添加一些额外的职责,就增加功能来说,装饰者模式相比生成子类更为灵活。在装饰者模式中,一个装饰类会包装一个对象&#xff08…

Transformer优化加速--xformers

一、定义 1 作用 2 优化创新点 3. 使用demo 二、实现 作用 facebook 提出, xformers能够有效加速attention计算并降低显存。 参考: https://github.com/facebookresearch/xformers https://zhuanlan.zhihu.com/p/688745007 接口:https://f…

Java | Leetcode Java题解之第78题子集

题目&#xff1a; 题解&#xff1a; class Solution {List<Integer> t new ArrayList<Integer>();List<List<Integer>> ans new ArrayList<List<Integer>>();public List<List<Integer>> subsets(int[] nums) {dfs(0, nums…

C++容器——map和pair对组

pair&#xff08;对组&#xff09; 是一种模板类&#xff0c;允许将两个不同类型的值组合在一起。它由两个数据成员first和second组成&#xff0c;分别用来保存这两个值。 头文件 加头文件 #include<utility> 对于 C11 及以上标准&#xff0c;pair 类型可以在不包含头…

牛客网刷题 | BC81 KiKi求质数个数

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 KiKi知道了什么是质…

【离散数学】集合上二元关系性质判定的实现(c语言实现)

实验要求 关系矩阵的初始化和打印 我们将关系矩阵存入一个二维数组中&#xff0c;因为集合元素个数不会超过5个所以就用一个5行5列二维数组来表示。 在我们得到了集合元素个数之后我们就可以对数组进行0,1随机赋值 //初始关系矩阵 void init_matrix(int array[][5], int n) {…

python使用f-string时如何保留原始的{}

如果想在 f-string 中使用 {} 符号&#xff0c;但又不想让它被解释成 f-string 的占位符&#xff0c;可以使用两个连续的 {} 来表示一个单独的 {} 符号&#xff0c;从而使其保留原始的形式。 例如&#xff1a; name "John" age 30 text f"{{Hello {name}, …

力扣:1005. K 次取反后最大化的数组和

1005. K 次取反后最大化的数组和 给你一个整数数组 nums 和一个整数 k &#xff0c;按以下方法修改该数组&#xff1a; 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后&#xff0c;返回数组 可能…

多核DSP并行计算跨平台通信解决方案

并行计算的核心是计算节点以及节点间的通信与协调机制。OpenMP虽然给开发者提供了极易上手的增量式开发方式&#xff0c;但是OpenMP在与复杂架构的MCSDK结合后&#xff0c;工具与代码产生了大量不可调试的黑盒子&#xff0c;更是决定了它不能用于关键任务领域&#xff0c;如军工…

算法学习Day2——单调栈习题

第一题&#xff0c;合并球 题解&#xff1a;一开始写了一次暴力双循环&#xff0c;直接O(n^2)严重超时&#xff0c;后面于是又想到了O(n)时间复杂度的链表&#xff0c;但是还是卡在 最后一个数据会TLE&#xff0c;我也是高兴的拍起来安塞腰鼓和华氏护肤水&#xff0c;后面学长给…

MongoDB聚合运算符:$toObjectId

MongoDB聚合运算符&#xff1a;$toObjectId 文章目录 MongoDB聚合运算符&#xff1a;$toObjectId语法使用举例 $toObjectId聚合运算符将指定的值转换为ObjectId。如果值无法被转换为ObjectId&#xff0c;则报错。 语法 {$toObjectId: <expression> }$toObjectId接受任何…

基于模糊控制的AMT自动变速汽车换档智能控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于模糊控制的AMT自动变速汽车换档智能控制系统simulink建模与仿真。 2.系统仿真结果 输入的V&#xff0c;Ac&#xff0c;a 输出的档位&#xff1a; 3.核心程序与模型 版…

【算法题】机试指南篇

每日更新&#xff0c;建议关注收藏&#xff01; 目录 须知评判结果考试规则提前了解语言与IDE选择 精选分类可暴力求解的题目基础&#xff1a;排序查找基础&#xff1a;字符串STL向量vector队列queue栈stack 贪心简单贪心区间贪心 递归与分治搜索深搜广搜 数据结构进阶二叉树二…

【C语言】static关键字用法

目录 一、static修饰局部变量 二、static修饰全局变量 三、static修饰函数 一、static修饰局部变量 首先我们来看两段代码: 代码1&#xff08;不加static&#xff09; #include <stdio.h> void test() {int i 0;i;printf("%d ", i); } int main() {int i…