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...