① dsp的程序問題。解釋一下dsp c 語言的問題
從這些宏定義可以看到C語言是如何支持硬體編程的。
以#define IMR *(volatile unsigned int *)0x0004 為例:
1)0x0004,這個容易理解,是一個十六進制的常數
2)再看(volatile unsigned int *),這是一個強制轉換,將0x0004轉換成(volatile usigned int *)
3)現在解釋volatile usigned int *是什麼。* 表示指針(地址),這個指針指向一個 usigned int的數。最前面的volatile有特殊含義:這個指針必須保存在RAM中(不是FLASH或DSP寄存器中)
4)綜合上面1)2)3)可知: (volatile unsigned int *)0x0004 的含義是:
0x0004是一個地址,在這個地址內保存的是一個unsigned int 類型的整數。這個地址存在於RAM
5)*(volatile unsigned int *)0x0004 最左邊多一個*,表示取地址指向單元的內容。綜合起來的意思是:從0x0004地址單元中取出一個usigned int 類型的數據值
6)#define IMR *(volatile unsigned int *)0x0004 的意思是,將從0x0004地址單元中取出一個usigned int 類型的數據值定義為IMR
7)根據DSP硬體,在DSP中RAM中的 0x0004地址單元恰好是中斷管理寄存器!
8)繞了半天,#define IMR *(volatile unsigned int *)0x0004 的意思是:在C語言程序中,定義了一個宏標示符 IMR 來表示DSP中的中斷管理寄存器。在程序中,可以通過這個宏標示符來使用這個寄存器:
unsigned int v = IMR; //取出中斷管理寄存器的值並賦給v
② 怎麼才能看懂DSP的程序
要看懂程序,一是要掌握基本語句的寫法,TI的DSP多採用結構體的方式來操作寄存器。二是要理解程序的思路,就是了解程序的基本流程。從上述兩點出發,應該能讀懂,當然,讀某個程序時,首先應該對程序所涉及的外設的寄存器有所了解,或者說對相關外設的功能要有所了解,這樣才知道,語句這么寫是為了實現什麼功能。 查看原帖>>
求採納
③ DSP程序和方案
你這個10000財富值都沒人做,淘寶直接買,或者網路找吧。
④ DSP程序跑飛的原因有哪些
跑飛指的是程序指針混亂,堆棧被破壞,跑飛算是程序運行問題中較嚴重的一類,對指針未初回始化或未指向值答就解引用常會引起跑飛 如: struct AA { int i; char j; } *p; 如未p = (AA *)malloc(sizeof(struct AA))等之類進行初始化就 使用p->i,j等
⑤ DSP中AD的c程序 求詳細註解!!!
第一部分,定義寄存器地址,
主程序,main 對控制寄存器進行配置,定時器初始化,AD初始化及通道選擇,然後用while(1)等待中斷。
interrupt time,定時器中,對AD進行處理
⑥ 求解DSP程序分析
這都是一些宏定義或抄者說一些類型襲的定義,方便後期編程書寫和代碼查看。
如#define UINT16 unsigned int,後期你編程時要定義一個無符號整型,你就可以直接用UINT16去定義,這樣一眼就可以看出這個定義是一個無符號16位整型的數,同樣,UINT32一眼就知道該變數是無符號長整型的,佔32位。
另外還有其它的一些是寄存器及位的定義,如下面一張圖的PLLDIV,通常把寄存器定義成一個結構體,然後在結構體裡面定義各個位,這些位的名稱通常都和晶元的datasheet里寄存器的定義是一一對應的,後期編程時對寄存器操作就只要對這些結構體操作就可以了,而這些結構體很方便地跟datasheet聯系起來,方便了編程和後期維護。