嵌入式C學習第三課

2021-10-19 02:54:42 字數 2576 閱讀 6797

記憶體操作

記憶體分配

資料放**

棧空間:區域性變數、函式形參、自動變數(呼叫後釋放)

堆空間:malloc、realloc、calloc分配空間

資料段:.bss:儲存未初始化的全域性變數

.rodata:常量

.data(靜態資料區):全域性變數、static修飾的區域性變數

記憶體分配方式

(1)從全域性資料區分配

(2)在棧上建立

(3)在堆上建立

常見的記憶體錯誤

(1)記憶體分配未成功,卻使用了它

(2)記憶體分配雖然成功,但是尚未初始化就引用它

(3)記憶體分配成功並已經初始化,但操作越過了記憶體的邊界

(4)忘記了釋放記憶體,造成了記憶體洩漏

(5) 釋放了記憶體卻繼續使用它

指標

整形指標定義: 

int a = 0;

int *pa = &a ;

指標的含義:指標實際上是一種存放位址的資料型別,比如上面的例子變數pa就可以被視為int *型別,pa中存放的是變數a的位址,變數a佔據四個位元組,a位址可以用首位址來代替,pa是個位址並指向a所佔的這四個位元組。pa本身佔據8個位元組,根據存放變數的型別不同,指標型別也應該與變數對應,對於64位系統,但不管什麼型別的指標,都佔據8個位元組,位址均為64位也就等於8個位元組。當然對於32位系統來說,不同型別的指標指標均佔據4個位元組。

* :可以代表兩種含義

1. * 前面有資料型別時,表示定義指標型別,比如 int *, char *,short *,double *等等

2. * 後面跟位址或指標時,表示修改這個位址或指標的值,比如 int *pa= &a;*pa = 1;

指標加1表示指標向後移動乙個資料型別長度的位址。

比如整形指標,整形佔據4個位元組,整形指標內存放的位址時62fe0c,將指標加1後,指標位址向後移動4個位元組。同理字元型佔1個位元組,指標加1後,位址向後移動1個位元組.

結構體指標

乙個指標變數當用來指向乙個結構體變數時,稱之為結構體指標變數。結構體指標變數中的值是所指向的結構變數的首位址。通過結構指標變數即可訪問該結構的變數。

結構指標變數說明的一般形式如下:

struct 結構名 *結構指標變數名

結構名和結構變數時兩個不同的概念,不能混淆。結構名只能表示乙個結構形式,編譯系統並不會對它分配記憶體空間。只有當某變數被說明為這種型別的結構時,才對該變數分配儲存空間。

有了結構指標變數,就能更方便地訪問結構變數的各個成員。其訪問的一般形式為:    

(*結構指標變數).成員名

結構體指標變數->成員名    

demo:

#include #include #include /*1.使用->引用結構體成員 */

int main ()

;//student=;

struct student stu;//定義struct student型別的變數stu

struct student *pstruct;//定義指向struct student型別資料的指標變數pstruct

pstruct = &stu; //pstruct指向stu

stu.num=10101;

strcpy(stu.name,"fan");//對結構體變數的成員賦值

stu.***='m';

stu.score=88;

printf("-----------the sudent's information----------\n");

printf("no.:%ld\nname:%s\n***%c\nscore:%5.1f\n",stu.num,stu.name,stu.***,stu.score);

printf("\nno.:%ld\nname:%s\n***%c\nscore:%5.1f\n",(*pstruct).num,(*pstruct).name,(*pstruct).***,(*pstruct).score);

printf("\nno.:%ld\nname:%s\n***%c\nscore:%5.1f\n",pstruct->num,pstruct->name,pstruct->***,pstruct->score);

return 0;

}

(*pstruct).num中的(*pstruct)表示,*pstruct指向結構體變數,(*pstruct).num表示pstruct指向結構體變數中的成員num,注意括號不能省略,因為成員運算子「.」優先於「*」運算子。為了直觀和使用方便,c語言允許把(*pstruct).num用pstruct->num來代替,上面的三種表達方式等價。

指標nice)

沒看的)

感謝大佬們!!!!!!!!!!!!!!!

嵌入式第三課 儲存管理和SDNAND

儲存管理器的作用是,cpu根據儲存管理器內的配置資訊,決定如何訪問外部裝置。負責包括片選訊號 bank選擇訊號 列位址 行位址等內容。對jz2440,使用sdram需要配置儲存管理器,操作方式還是改寫三個暫存器 bwscon,bankcon,banksize。程式描述 將上節課的led閃爍程式放入s...

第三課學習

emi,emc,電池干擾,電池相容 低頻濾波電容,本處採用的是100u發 100微法,能耐16v的電壓 的電容,其主要作用有兩個,乙個是防止瞬間電壓波動,二是提供較為平穩的電源,通常在需要提供電源的地方都可以考慮加上這麼乙個電容。要考慮其耐壓值,一般要超過整個電壓的兩倍以上。第二個是考慮其容值,電容...

python第三課答案 python第三課

字串操作 s alexwusir s1 s.capitalize 首字母大寫 print s1 全大寫,全小寫 s2 s.upper s21 s.lower print s2,s21 大小寫翻轉 s3 s.swapcase print s3 每個隔開 特殊字元或數字 的單詞首字母大寫 s alex ...