国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

嵌入式系統的內存指針操作

電子工程師 ? 來源:張飛實戰(zhàn)電子 ? 作者:蔡琰老師 ? 2021-08-27 11:33 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

嵌入式系統中,對內存地址的操作是一個重要的方面,從廣義上講,嵌入式系統的地址空間可以分成以下三種類型:

系統的內存

處理器內部的寄存器映射

處理器外部部件的內存映射

無論哪種內存,一般都映射到處理器的內存空間中。在x86系統中,分為內存和I/O映射兩種內存;在ARM體系中,全部的地址都在32位的內存空間中,所有的操作都是對32位地址空間內存的操作。

編程的角度看,嵌入式系統和PC系統的軟件設計的一個重要的區(qū)別即在于嵌入式系統更重視對硬件的操作。而對硬件的操作需要通過操作內部寄存器和外圍部件內存映射的地址實現,其實現方式都是通過對內存讀、寫兩種操作。

匯編語言中,各種處理器都有對內存的不同的尋址方式讀寫內存。在高級語言中,C語言是唯一可以進行內存操作的語言,C語言對內存的操作主要需要通過指針來完成。

1、使用指針操作內存

在C語言中,指針是一種非常重要的數據類型。使用指針變量可以表示各種數據結構,能很方便地使用數組和字符串,并能像匯編一樣處理內存地址。指針的本質就是一個地址,在32位的系統中,指針是一個32位的無符號整數。指針可以用一個變量來表示,變量的指針實際上就是變量的地址。存放變量地址的變量是指針變量。一個指針變量的值就是某個變量的地址或稱為某變量的指針。

一個簡單的指針應用如下所示:

int a;

int *p = &a;

這個例子表示,整型指針型變量p指向a的地址,此時對*p的操作等同于對a的操作。

使用指針可以指向一個變量,也可以指向一個由malloc函數分配的內存,例如:

void *p = malloc(1024);

系統分配1024字節(jié)的內存,然后讓變量p指向這塊內存,即p的值是這1024字節(jié)的連續(xù)內存的地址。在程序中就可以通過p來操作這塊內存區(qū)域。在內存使用完成后,需要使用free函數講內存釋放。

free(p);

在嵌入式系統中的程序開發(fā)中,指針的值除了以上的兩種形式(從系統內存分配或者指向變量)以外,還可以使用絕對的數值。這是由于在嵌入式系統中,外設寄存器和外部部件的內存映射的地址空間可能都是固定的,因此可以使用指針來處理他們。

例如,如果需要在地址0x0040處寫入一個字節(jié)的數據0xf0,可以使用如下的程序:

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

*p = 0xf0;

這個程序定義了一個指向0x0040地址的字節(jié)型的指針,然后向該地址寫入數據0xf0。

上面的程序等同于:

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

所以說不使用指針變量也可以對實際的地址操作。讀內存的程序與之類似,可以使用指針變量或者直接使用地址得到內存中的數據。

2、指針的類型

前面的程序在內存的一個指定的地址處寫入一個字節(jié)(8位)的數據。如果需要寫入兩個字節(jié)(16位)的數據,需要改變指針類型。例如:同樣向地址0x0040處寫入兩個字節(jié)的數據0x0f0f,需要使用如下的語句:

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

在這個語句中,使用unsigned short而不使用unsigned char,short在C語言中代表16位的整數。

如果寫入4個字節(jié)(32位)的數據,則需要使用一下的程序:

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

在這個語句中,使用unsigned long,long在C語言中代表32位的整數。

在32位的系統中,一般編譯器認為int代表是32位的整數,等同于long,所以習慣使用int代替long作為內存操作的數據類型。

注意:指針的類型決定了使用指針進行讀寫操作時每次讀寫字節(jié)的數目。

3、指針的增量

在對指針變量的操作中,有時需要對指針變量進行加減運算。例如:

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

P++;

*p = 0xf0;

這段程序的含義是向地址0x0041的字節(jié)處寫入數據0xf0。

指針加減運算的含義是:指針的單位增量(或減量)等于指針類型所占的內存量。

對指針進行增量操作的使用,增加的單位是以指針類型的大小:char類型的增量表示增加1字節(jié)的內存,short表示增加2字節(jié)的內存,long和int表示增加4字節(jié)的內存,這些工作是編譯器根據指針的類型自動完成的。

總結:對指針進行加減運算的時候,它的變化量與指針的類型有關。

4、指針的類型轉換

在C語言中,指針的類型可以在使用的時候進行轉換。指針的本質是一個地址,在32位系統中,指針就是一個32位無符號的整數。因此,各種指針都可以相互轉化,而且指針在轉換過程并沒有任何實質性的變化,只是告訴編譯器,目前的指針指向何種的內存區(qū)域。

在嵌入式系統中,處理器的片內設備一般都會映射到處理器的地址空間中。這些寄存器有可能是32位的,有可能只有8位,這時就需要使用C語言中不同類型的指針。

總結:指針的本質是一個無符號的整數,各個類型的指針都可以進行相互轉換。

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    20250

    瀏覽量

    252204
  • 嵌入式
    +關注

    關注

    5198

    文章

    20442

    瀏覽量

    333967
  • 內存
    +關注

    關注

    9

    文章

    3209

    瀏覽量

    76357

原文標題:聊一聊內存指針操作

文章出處:【微信號:CanaanTech,微信公眾號:嘉楠科技】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    嵌入式單片機開發(fā)學習路徑

    學習C語言 C語言是嵌入式開發(fā)的基礎。掌握C語言的基本語法、指針、結構體、內存管理等內容是進入嵌入式開發(fā)的前提。 2. 硬件知識 2.1 認識單片機 單片機是
    發(fā)表于 02-09 15:42

    什么是嵌入式應用開發(fā)?

    概述 所謂的嵌入式應用開發(fā)就是在嵌入式操作系統下進行開發(fā)、軟硬件綜合開發(fā) ?嵌入式應用開發(fā)?是指在嵌入式
    發(fā)表于 01-12 16:13

    C語言嵌入式系統編程注意事項-內存操作

    C語言嵌入式系統編程注意事項之內存操作嵌入式系統的編程中,常常要求在特定的
    發(fā)表于 01-04 07:31

    嵌入式系統中,動態(tài)分配內存可能發(fā)生的問題是什么?

    盡管不像非嵌入式計算機那么常見,嵌入式系統還是有從堆(heap)中動態(tài)分配內存的過程的。 那么嵌入式
    發(fā)表于 12-22 09:42

    什么是嵌入式操作系統

    要理解嵌入式操作系統(Embedded Operating System,簡稱 RTOS/EOS),我們可以從本質定義→核心區(qū)別→實際作用→典型特征→嵌入式開發(fā)場景適配,五個維度來拆解, 一
    發(fā)表于 12-09 10:33

    嵌入式系統的定義和應用領域

    。盡管有些嵌入式系統可能包含操作系統,但大多數情況下,它們僅由一個程序來控制整個邏輯。 從更專業(yè)的角度來看,嵌入式系統可以被定義為:以應用
    發(fā)表于 11-17 06:49

    嵌入式實時操作系統的特點

    操作系統具備高效的中斷處理機制,能夠快速響應和處理系統的中斷事件。 資源管理:實時嵌入式操作系統提供有效的資源管理機制,包括內存管理、設備驅
    發(fā)表于 11-13 06:30

    RusT-Thread:基于Rust面向資源受限嵌入式設備的操作系統的實踐 | 技術集結

    摘要隨著物聯網和嵌入式系統的發(fā)展,實時操作系統(RTOS)的安全性和性能需求日益提高。傳統基于C語言的RTOS在內存安全和并發(fā)控制方面存在局限,容易導致緩沖區(qū)溢出、數據競爭等問題。本項
    的頭像 發(fā)表于 11-07 17:37 ?6858次閱讀
    RusT-Thread:基于Rust面向資源受限<b class='flag-5'>嵌入式</b>設備的<b class='flag-5'>操作系統</b>的實踐 | 技術集結

    嵌入式需要掌握哪些核心技能?

    : 1)C語言與底層編程 核心地位:C語言是嵌入式開發(fā)的基石,需精通指針操作內存管理、位運算,直接操控硬件資源。 延伸技能:C++用于復雜項目架構設計,匯編語言優(yōu)化底層性能(如啟動代
    發(fā)表于 10-21 16:25

    嵌入式達到什么水平才能就業(yè)?

    、LoRa、NB-IoT,能實現嵌入式設備與云端平臺的數據交互了解 RTOS 實時操作系統:如 FreeRTOS、RT-Thread,能進行任務創(chuàng)建、信號量管理、內存分配
    發(fā)表于 09-15 10:20

    入行嵌入式應該怎么準備?

    知識: 一、C/C++編程C/C++是嵌入式系統開發(fā)中最常用的編程語言。熟練掌握C/C++語言將使你能夠理解和編寫底層驅動程序、操作系統以及與硬件交互的代碼。對于嵌入式
    發(fā)表于 08-06 10:34

    Linux嵌入式和單片機嵌入式的區(qū)別?

    :使用Linux操作系統,可以運行各種復雜的應用程序和驅動程序。 4. 資源需求 : 單片機嵌入式 :對硬件資源的需求較低,通常只需要一個單片機芯片,內存和存儲空間較小。 Linux嵌入
    發(fā)表于 06-20 09:46

    嵌入式開發(fā),如何選擇適合的系統

    嵌入式ARM開發(fā)中,面對多種操作系統的選擇,如何做出最適合項目的決策?本文將為您梳理常見系統的特性,幫助您快速了解它們的優(yōu)缺點,以便更好地選擇適合的系統。引言在
    的頭像 發(fā)表于 05-20 11:32 ?1140次閱讀
    <b class='flag-5'>嵌入式</b>開發(fā),如何選擇適合的<b class='flag-5'>系統</b>?

    嵌入式開發(fā)入門指南:從零開始學習嵌入式

    特定功能的計算機系統,廣泛應用于智能家居、工業(yè)控制、醫(yī)療設備、車載系統等領域。 2. 學習嵌入式開發(fā)的前置知識熟悉C語言編程掌握基本的數據結構與算法了解數字電路與微控制器原理熟悉Linux操作
    發(fā)表于 05-15 09:29

    RT-Thread嵌入式操作系統專業(yè)培訓班-深圳站重磅開啟!

    RT-Thread官方將在深圳舉辦為期三天的嵌入式操作系統專業(yè)培訓班!本次培訓將深入講解RT-Thread嵌入式實時操作系統的核心技術與實戰(zhàn)應用,助力開發(fā)者快速掌握RTOS開發(fā)精髓。無
    的頭像 發(fā)表于 04-11 18:18 ?828次閱讀
    RT-Thread<b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統</b>專業(yè)培訓班-深圳站重磅開啟!