① 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联系起来,方便了编程和后期维护。