Q格式 啟動過程 cmd檔案

2021-08-25 18:46:09 字數 3331 閱讀 4890

定點處理器對浮點數的處理:

1> 定義變數為浮點型(float,double),用c語言抹平定點處理器和浮點處理器的區別,但是程式的**龐大,運算速度也慢。

2> 放大若干倍表示小數。比如要表示精度為0.01的變數,放大100倍去運算,運算完成後再轉化。但是這個做法比較僵硬,如要將上面的變數重新定義成0.001精度,又需要放大1000倍,且要重新編寫整個程式,考慮溢位等問題。

3> 定標法:q格式:通過假定小數點位於哪一位的右側,從而確定小數的精度。

q0:小數點在第0位的後面,即我們一般採用的方法

q15 小數點在第15位的後面,0~14位都是小數字。

轉化公式:q=(int)(f×pow(2,q))

f=(float)(q×pow(2,-q))

q格式的運算

1> 定點加減法:須轉換成相同的q格式才能加減

2> 定點乘法:不同q格式的資料相乘,相當於q值相加

3> 定點除法:不同q格式的資料相除,相當於q值相減

4> 定點左移:左移相當於q值增加

5> 定點右移:右移相當於q減少

q格式的應用格式

實際應用中,浮點運算大都時候都是既有整數部分,也有小數部分的。所以要選擇乙個適當的定標格式才能更好的處理運算。一般用如下兩種方法:

1> 使用時使用適中的定標,既可以表示一定的整數復位也可以表示小數復位,如對於2812的32位系統,使用q15格式,可表示-65536.0~65535.999969482區間內的資料。

2> 全部採用小數,這樣因為小數之間相乘永遠是小數,永遠不會溢位。取乙個極限最大值(最好使用2的n次冪),轉換成x/max的小數(如果max是取的2的n次冪,就可以使用移位代替除法)。

5. ti的qmath.lib庫說明:

見ti的文件c28x iqmath library (sprc087a).zip的詳細說明。

ti公司給出了乙個q格式的數學庫qmath.lib

注意q格式函式使用的時序和空間要求,盡量避重就輕。

來看個具體的例子吧

#define maxf 120; //整數預設的是q0;

f=50.01 //想表示的頻率

unsigned int f;

f=((unsigned long )5001<<15)/(maxf*100) //先移位擴大100倍,轉換格式之後移位15位後結果就是想要的

可以得到f=13656

dsp2812的啟動過程

a)程式硬體復位或者軟體復位

b)判斷mp/mc是否為0,微計算機模式(為1,當為微處理器模式時,2812內部的bootrom被禁止,通過zone7從外部調引導程式啟動。這個比較適合flash引導的啟動。)

c)為0則從boot rom啟動,否則從外部啟動(0x3f fc00)

d)到boot rom的0x3f fc00處取出復位向量,跳到boot函式:2812有一塊flash位址從0x3f f000-0x3f ffff在出廠時ti已經固化好了引導程式initboot:iniboot函式判斷幾個gpio引腳來判斷使用哪一種引導模式,比如flash boot模式,檢測spiclka,scitxa,gpio34的電平,當都為高電平時表明是片內flash boot模式,那麼initboot執行完後跳轉到0x3f 7ff6處,這個時候指令佔據兩個位元組,剛好在**模組之前。一定是是跳轉指令才行。。。)

e)採集io管腳狀態,確定啟動模式。2812提供幾種啟動模式:

scitxda(gpiof4) mdxa(gpiof12) spistea(gpiof3) spiclk(gpiof2)

1 x x x flash啟動

0 1 x x spi啟動

0 0 1 1 sci啟動

0 0 0 0 parallel啟動

f)根據io狀態選擇boot方式

g)如果是flash,程式退出boot函式,跳轉到0x3f 7ff6(codestart)

h)取出跳轉指令,跳轉到自己的指定位址或者c初始化的入口_c_int00(0x3f6000)處(dsp281x_codestartbranch.asm中)

i)在c初始化的入口_c_int00對一些變數,堆疊和暫存器進行必要的設定,該函式在c的庫函式內(rts library)

j)進入main函式(0x3f658e,這個位址不是固定的。但是在flash裡面。)

注:根據ti中文手冊總結如上。。。。。

3f8238

_c_int00: 這個位址是我一次程式執行觀測到的。這個位址會隨時的變化,但是總在3f8000到3fa 000 之間,也就是在h0 sram中間。

具體的可以參照tms320f2812的儲存器的空間。。

cmd檔案的編寫

首先簡要介紹:

鏈結命令檔案(.cmd檔案)通過段定位控制命令,分配程式**和資料執行儲存空間。

(1)、memory

指出目標系統中物理上存在的儲存空間的範圍,即可供程式使用的儲存空間範圍。在預設狀態下,page0代表程式空間,page1代表資料空間。

(2)、sections

1)、描述輸入段如何組合成輸出段。

2)、定義可執行程式的輸出段。

3)、指出輸出段存放在儲存空間中的位置。

4)、允許重新命名輸出段。

.cmd檔案編寫的目的 確定程式和數椐的裝載執行空間,校驗資料和程式**的長度,定義輸入/輸出檔案,安排系統中可用的儲存器,程式段、資料段、堆疊以及復位向量和中斷向量的位址空間。

鏈結命令檔案通過段定位控制命令,分配程式**空間、資料**空間、程式執行空間、堆疊空間。

.cmd檔案命令格式

ø memory:定義目標板物理儲存空間分配,預設狀態下,page0為程式空間, page1為資料空間。

① 給出輸入段組合成輸出段的方式;

② 定義可執行程式的輸出段;

③ 指出輸出段存放在儲存空間中的位置;

④ 允許重新命名輸出段。

下面分析乙個簡單的,helloword 經典的cmd

memory

sections

說明:.text: ;程式**在第0頁

.reset ;復位在第0頁

.cinit: ;初始化變數在第0頁

.pinit: ;初始化引數在第0頁

.vectors :一些向量在第0頁

.bss: ;非初始化變數在第1頁

.ebss ;初始化變數在第一頁。

.const: ;常數在第1頁

..sysmem: ;系統的東東,初始化一些東西,硬體的。

.cio: ;c語言i/o呼叫在第1頁

.stack: ;堆疊在第1頁

mysql啟動過程長 mysql啟動過程

mysql啟動過程經過以下順序 1.mysql讀取配置檔案的順序 讀取順序 etc my.cnf etc mysql my.cnf usr etc my.cnf my.cnf 2.mysql啟動方式 mysql啟動方式有三種 mysqld mysqld safe mysqld multi 主要用於多...

Linux啟動過程

1 開啟 pc電源 pc加電後,乙個特殊的硬體電路會觸發 cpu 的 reset 腳的邏輯值,然後一些 cpu 暫存器,如 cs eip 等被給定乙個值,接著 cpu 跳轉到乙個固定位址開始執行 bios 2 bios 自檢,按設定的裝置啟動 bios 對硬體進行一系列徹底的檢查,如 cpu 型別 ...

Flex 啟動過程

2008 11 16 11 58 然後才是 通常我們所說的flex應用程式,本質上來說是基於flex框架 採用actionscript 3.0編寫的flash應用程式,從這一點來說,它和普通的flash應用程式沒有任何差別。相對來說,傳統的使用flash ide 如flash cs3 建立flash...