0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

嵌入式系统的内存指针操作

电子工程师 ? 来源:张飞实战电子 ? 作者:蔡琰老师 ? 2021-08-27 11:33 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

嵌入式系统中,对内存地址的操作是一个重要的方面,从广义上讲,嵌入式系统的地址空间可以分成以下三种类型:

系统的内存

处理器内部的寄存器映射

处理器外部部件的内存映射

无论哪种内存,一般都映射到处理器的内存空间中。在x86系统中,分为内存和I/O映射两种内存;在ARM体系中,全部的地址都在32位的内存空间中,所有的操作都是对32位地址空间内存的操作。

编程的角度看,嵌入式系统和PC系统的软件设计的一个重要的区别即在于嵌入式系统更重视对硬件的操作。而对硬件的操作需要通过操作内部寄存器和外围部件内存映射的地址实现,其实现方式都是通过对内存读、写两种操作。

汇编语言中,各种处理器都有对内存的不同的寻址方式读写内存。在高级语言中,C语言是唯一可以进行内存操作的语言,C语言对内存的操作主要需要通过指针来完成。

1、使用指针操作内存

在C语言中,指针是一种非常重要的数据类型。使用指针变量可以表示各种数据结构,能很方便地使用数组和字符串,并能像汇编一样处理内存地址。指针的本质就是一个地址,在32位的系统中,指针是一个32位的无符号整数。指针可以用一个变量来表示,变量的指针实际上就是变量的地址。存放变量地址的变量是指针变量。一个指针变量的值就是某个变量的地址或称为某变量的指针。

一个简单的指针应用如下所示:

int a;

int *p = &a;

这个例子表示,整型指针型变量p指向a的地址,此时对*p的操作等同于对a的操作。

使用指针可以指向一个变量,也可以指向一个由malloc函数分配的内存,例如:

void *p = malloc(1024);

系统分配1024字节的内存,然后让变量p指向这块内存,即p的值是这1024字节的连续内存的地址。在程序中就可以通过p来操作这块内存区域。在内存使用完成后,需要使用free函数讲内存释放。

free(p);

在嵌入式系统中的程序开发中,指针的值除了以上的两种形式(从系统内存分配或者指向变量)以外,还可以使用绝对的数值。这是由于在嵌入式系统中,外设寄存器和外部部件的内存映射的地址空间可能都是固定的,因此可以使用指针来处理他们。

例如,如果需要在地址0x0040处写入一个字节的数据0xf0,可以使用如下的程序:

unsigned char *p = (unsigned char *)0x0040;

*p = 0xf0;

这个程序定义了一个指向0x0040地址的字节型的指针,然后向该地址写入数据0xf0。

上面的程序等同于:

*(unsigned char *)0x0040 = 0xf0;

所以说不使用指针变量也可以对实际的地址操作。读内存的程序与之类似,可以使用指针变量或者直接使用地址得到内存中的数据。

2、指针的类型

前面的程序在内存的一个指定的地址处写入一个字节(8位)的数据。如果需要写入两个字节(16位)的数据,需要改变指针类型。例如:同样向地址0x0040处写入两个字节的数据0x0f0f,需要使用如下的语句:

*(unsigned short*)0x0040 = 0x0f0f;

在这个语句中,使用unsigned short而不使用unsigned char,short在C语言中代表16位的整数。

如果写入4个字节(32位)的数据,则需要使用一下的程序:

*(unsigned long*)0x0040 = 0xf0f0f0f0;

在这个语句中,使用unsigned long,long在C语言中代表32位的整数。

在32位的系统中,一般编译器认为int代表是32位的整数,等同于long,所以习惯使用int代替long作为内存操作的数据类型。

注意:指针的类型决定了使用指针进行读写操作时每次读写字节的数目。

3、指针的增量

在对指针变量的操作中,有时需要对指针变量进行加减运算。例如:

unsigned char *p = (unsigned char *)0x0040;

P++;

*p = 0xf0;

这段程序的含义是向地址0x0041的字节处写入数据0xf0。

指针加减运算的含义是:指针的单位增量(或减量)等于指针类型所占的内存量。

对指针进行增量操作的使用,增加的单位是以指针类型的大小:char类型的增量表示增加1字节的内存,short表示增加2字节的内存,long和int表示增加4字节的内存,这些工作是编译器根据指针的类型自动完成的。

总结:对指针进行加减运算的时候,它的变化量与指针的类型有关。

4、指针的类型转换

在C语言中,指针的类型可以在使用的时候进行转换。指针的本质是一个地址,在32位系统中,指针就是一个32位无符号的整数。因此,各种指针都可以相互转化,而且指针在转换过程并没有任何实质性的变化,只是告诉编译器,目前的指针指向何种的内存区域。

在嵌入式系统中,处理器的片内设备一般都会映射到处理器的地址空间中。这些寄存器有可能是32位的,有可能只有8位,这时就需要使用C语言中不同类型的指针。

总结:指针的本质是一个无符号的整数,各个类型的指针都可以进行相互转换。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19971

    浏览量

    237890
  • 嵌入式
    +关注

    关注

    5161

    文章

    19801

    浏览量

    320061
  • 内存
    +关注

    关注

    8

    文章

    3133

    浏览量

    75482

原文标题:聊一聊内存指针操作

文章出处:【微信号:CanaanTech,微信公众号:嘉楠科技】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Linux嵌入式和单片机嵌入式的区别?

    :使用Linux操作系统,可以运行各种复杂的应用程序和驱动程序。 4. 资源需求 : 单片机嵌入式 :对硬件资源的需求较低,通常只需要一个单片机芯片,内存和存储空间较小。 Linux嵌入
    发表于 06-20 09:46

    嵌入式开发,如何选择适合的系统

    嵌入式ARM开发中,面对多种操作系统的选择,如何做出最适合项目的决策?本文将为您梳理常见系统的特性,帮助您快速了解它们的优缺点,以便更好地选择适合的系统。引言在
    的头像 发表于 05-20 11:32 ?549次阅读
    <b class='flag-5'>嵌入式</b>开发,如何选择适合的<b class='flag-5'>系统</b>?

    如何提高嵌入式代码质量?

    。 3. 嵌入式操作系统的使用:选择和配置合适的嵌入式操作系统(如FreeRTOS、uC/OS等),能够提供任务调度、内存管理和通信支持,减
    发表于 01-15 10:48

    嵌入式主板的概述与发展

    未来发展趋势进行深入探讨。嵌入式主板的基本概念嵌入式主板是指为嵌入式系统设计的电路板,它通常集成了微处理器、内存、输入输出接口等关键组件。与
    的头像 发表于 01-13 16:30 ?869次阅读
    <b class='flag-5'>嵌入式</b>主板的概述与发展

    2025嵌入式操作系统专业培训班正式启动!

    RT-Thread官方将在河南-郑州发起为期三天的嵌入式操作系统专业培训班!本次培训将会深入讲解RT-Thread嵌入式实时操作系统的核心概念、实战技巧和应用场景!无论企业团队/工程师
    的头像 发表于 01-09 18:46 ?983次阅读
    2025<b class='flag-5'>嵌入式</b><b class='flag-5'>操作系统</b>专业培训班正式启动!

    ARM嵌入式实时操作系统比较

    嵌入式系统领域,实时操作系统(RTOS)是确保任务按时完成的关键技术。ARM架构因其低功耗、高性能的特点,在嵌入式系统中得到了广泛应用。本
    的头像 发表于 12-28 09:15 ?1659次阅读

    新手怎么学嵌入式?

    嵌入式系统的发展,嵌入式操作系统也变得越来越重要。学习嵌入式操作系统可以帮助你更好地管理
    发表于 12-12 10:51

    嵌入式系统开发与硬件的关系 嵌入式系统开发常见问题解决

    系统开发与硬件关系的几个关键点: 硬件依赖性 :嵌入式系统的软件必须能够在特定的硬件上运行,这包括处理器、内存、输入/输出接口等。软件必须能够充分利用硬件的特性,同时绕过其限制。 资源
    的头像 发表于 12-09 09:38 ?1105次阅读

    什么是嵌入式操作系统?

    什么是嵌入式操作系统? 想象一下,如果一个智能设备,比如你口袋里的智能手机,是一个有头脑的机器人,那么嵌入式操作系统(Embedded Operating System,简称EOS)就
    发表于 11-08 15:07

    嵌入式 Linux 操作系统配置

    随着物联网(IoT)和智能设备的快速发展,嵌入式系统在各个领域扮演着越来越重要的角色。Linux因其开源、灵活和稳定的特性,成为嵌入式系统的首选操作
    的头像 发表于 11-06 10:22 ?1309次阅读

    嵌入式系统的启动流程

    嵌入式系统的启动流程是一个复杂但有序的过程,它涉及从系统上电到操作系统内核及应用程序启动的多个阶段。
    的头像 发表于 10-05 17:44 ?1125次阅读

    嵌入式系统的原理和应用

    嵌入式系统是一种专用的计算机系统,其设计初衷是执行特定任务,而非作为通用计算机使用。这类系统通常作为更大系统的一部分,起到控制、监控或辅助的
    的头像 发表于 10-05 17:03 ?2411次阅读

    嵌入式系统的未来趋势有哪些?

    嵌入式系统是指将我们的操作系统和功能软件集成于计算机硬件系统之中,形成一个专用的计算机系统。那么嵌入式
    发表于 09-12 15:42

    嵌入式linux开发板怎么操作

    嵌入式Linux开发板是一种基于Linux操作系统嵌入式系统开发平台。它通常包括一个处理器、内存、存储器、输入/输出接口等硬件组件,以及一
    的头像 发表于 09-02 09:09 ?896次阅读

    嵌入式linux开发板芯片的工作原理

    嵌入式Linux开发板是一种基于Linux操作系统嵌入式系统开发平台,它广泛应用于工业控制、智能家居、智能交通、医疗设备等领域。 嵌入式L
    的头像 发表于 09-02 09:07 ?943次阅读