SoC第二講 結合SDK熟悉C語言的使用(三)

2021-09-25 21:02:26 字數 2575 閱讀 9816

soc第二講——結合sdk熟悉c語言的使用(三)

上節介紹c語言在sdk中的應用和sdk軟體的使用操作,結合具體的實際案例來介紹, 主要是關於變數和指標的在記憶體中的情況。本次將介紹結構體變數在記憶體中的使用情況,並結合具體例項檢視、初始化、訪問結構體。結構體在c開發中非常重要,類似於verilog中模組的呼叫及引數傳遞。

並且介紹zynq (ocm)位址空間分配。

一、結構體變數記憶體空間的使用情況

結構體變數:在初始化gpio時會用到結構體變數,具體的形式:

**srtuct 結構體變數型別結構體名稱;**		//結構體變數在記憶體中是連續的位址
如:

struct data		//變數型別為data

time1,time2;

//結構體名稱是time1,time2

例一,結構體的初始化
#include 

#include "platform.h"

#include "xil_printf.h"

intmain()

sta;

//宣告乙個結構體

sta.index =

0xff

;//對成員變數訪問

sta.dataa =

0xffff

; sta.buffa[0]

=0x04

; sta.buffa[1]

=0x05

; sta.buffa[2]

=0x06

; sta.buffa[3]

=0x07

;print

("hello world\n\r");

return0;

}

應當注意:訪問結構體變數時,格式為

結構體名.成員變數名 = 賦值; // sta.index =0xff;
如果時指標,需要用 -> 訪問 ,(見例二)

指標名 -> 成員變數名 = 賦值;
例二,使用指標訪問結構體

對於乙個結構體的,可以根據這個結構體的型別,定義乙個指標,通過宣告指標的方式訪問結構體的成員變數,並賦值。

宣告指標的格式

struct 結構體型別 * 指標名;	//struct stra * stptr;
#include 

#include "platform.h"

#include "xil_printf.h"

intmain()

sta;

//宣告乙個結構體

sta.index =

0xff

;//對成員變數訪問

sta.dataa =

0xffff

; sta.buffa[0]

=0x04

; sta.buffa[1]

=0x05

; sta.buffa[2]

=0x06

; sta.buffa[3]

=0x07;

struct stra * stptr;

//宣告指標需要加stra,或者可以用typdef宣告

stptr =

0x1000000

;//指定指標的位址,和之前sta不是乙個位址了(新賦值乙個位址)

stptr-

> index =

0x55

; stptr-

> dataa =

0xcccceeee

; stptr-

> buffa[0]

=0x01

; stptr-

> buffa[1]

=0x11

; stptr-

> buffa[2]

=0x21

; stptr-

> buffa[3]

=0x31

;print

("hello world\n\r");

return0;

}

可以看到載指標賦值為位址0x1000000,成員變數首先從該位址開始,一次向後均是該結構體的位址。memory顯示的是執行了對dataa的訪問賦值。

下面是buffa的位址和記憶體中的情況:

二、zynq 位址空間分配

1、從0位址開始的1g為 ddr與256kb的ocm空間,注意ocm的分配較為複雜,

2、從0x4000_0000開始的1g為m_gp0的空間

3、從0x8000_0000開始的1g為m_gp1的空間

4、從e000_0000開始的為usb、spi、iic、eth這些外設的空間

5、然後從fffc_0000開始的256kb中分配給ocm(ocm分配方式有兩種)。

6、剩餘的較少用

問題 F 開燈問題(第二講)c語言

有n盞燈,編號為1 n,第1個人把所有燈開啟,第2個人按下所有編號為2的倍數的開關 這些燈將被關掉 第3個人按下所有編號為3的倍數的開關 其中關掉的燈被開啟,開著燈將被關閉 依此類推。一共有k個人,問最後有哪些燈開著?n和k,輸出開著的燈編號。k n 1000。輸出開著的燈編號 7 31 5 6 7...

匯入 C 發現之旅第二講 C XSLT開發

摘要 為了讓大家更深入的了解和使用c 我們開始這一系列的主題為 c 發現之旅 的技術講座。考慮到各位大多是進行web資料庫開發的,而所謂發現就是發現我們所不熟悉的領域,因此本系列講座內容將是c 在web資料庫開發以外的應用。目前規劃的主要內容是圖形開發和xml開發,並計畫編排了多個課程。在未來的c ...

C 研發 泛型程式設計 第二講 初步認識STL

不管是物件導向,還是泛型程式設計,這兩種思想的目的都是 降低模組與模組之間的耦合度,提高復用性。但是,一直沒有乙個標準,為了建立資料結構和演算法的一套標準,誕生了stl。stl大體分為六大元件,分別是 容器 演算法 迭代器 仿函式 介面卡 配接器 空間配置器 容器 各種資料結構,如vector li...