Electronics 版 (精华区)
发信人: dsp (Z族@ Z~笨笨), 信区: Electronics
标 题: [合集]请教一个DSP的C编程问题
发信站: 哈工大紫丁香 (2003年10月07日16:15:38 星期二), 站内信件
────────────────────────────────────────
xilin (西林) 于 2002年12月28日10:19:39 星期六 说道:
用C编了一段很短的程序
程序是简单的点灯程序,我想让发光管依次点亮,循环进行
总是能够循环2,3次,就出现了死住的情况
往往停在
C$$EXIT
011C 8B00 NOP 这句上
那位高手给指点一下,到底是怎么回事
────────────────────────────────────────
mydsp (Z~族@Z~笨笨) 于 2002年12月28日13:13:31 星期六 说道:
如果用的是硬件仿真器,
最好关闭所有中断,并禁止看门狗(如果有的话)。
【 在 xilin (西林) 的大作中提到: 】
: 用C编了一段很短的程序
: 程序是简单的点灯程序,我想让发光管依次点亮,循环进行
: 总是能够循环2,3次,就出现了死住的情况
: 往往停在
: C$$EXIT
: 011C 8B00 NOP 这句上
: 那位高手给指点一下,到底是怎么回事
────────────────────────────────────────
xilin (西林) 于 2002年12月28日13:34:39 星期六 说道:
用的是硬件仿真器
中断也关闭了
dsp的片子是206,没有看门狗
【 在 mydsp (Z~族@Z~笨笨) 的大作中提到: 】
: 如果用的是硬件仿真器,
: 最好关闭所有中断,并禁止看门狗(如果有的话)。
: 【 在 xilin (西林) 的大作中提到: 】
: : 用C编了一段很短的程序
: : 程序是简单的点灯程序,我想让发光管依次点亮,循环进行
: : 总是能够循环2,3次,就出现了死住的情况
: : 往往停在
: : C$$EXIT
: : 011C 8B00 NOP 这句上
: : 那位高手给指点一下,到底是怎么回事
────────────────────────────────────────
freebird (终结者) 于 Sat Dec 28 13:42:57 2002) 说道:
肯定是复位中断向量没设好。
【 在 xilin (西林) 的大作中提到: 】
: 用的是硬件仿真器
: 中断也关闭了
: dsp的片子是206,没有看门狗
: 【 在 mydsp (Z~族@Z~笨笨) 的大作中提到: 】
: : 如果用的是硬件仿真器,
: : 最好关闭所有中断,并禁止看门狗(如果有的话)。
: : 【 在 xilin (西林) 的大作中提到: 】
: : : 用C编了一段很短的程序
: : : 程序是简单的点灯程序,我想让发光管依次点亮,循环进行
: : : 总是能够循环2,3次,就出现了死住的情况
: : : 往往停在
: : : C$$EXIT
: : : 011C 8B00 NOP 这句上
: : : 那位高手给指点一下,到底是怎么回事
────────────────────────────────────────
camel (哭泣的骆驼) 于 2002年12月28日14:57:55 星期六 说道:
你就把张xx的程序改改就行了呀!
哪个是好使的!
我把它的email明天给你
你给他发信就行了
【 在 xilin (西林) 的大作中提到: 】
: 用C编了一段很短的程序
: 程序是简单的点灯程序,我想让发光管依次点亮,循环进行
: 总是能够循环2,3次,就出现了死住的情况
: 往往停在
: C$$EXIT
: 011C 8B00 NOP 这句上
: 那位高手给指点一下,到底是怎么回事
────────────────────────────────────────
LJELLY (从头再来) 于 2002年12月28日14:59:37 星期六 说道:
C和汇编混合编程,你有成功的程序吗?
哪方面的都行,能否见识一下
【 在 freebird (终结者) 的大作中提到: 】
:
: 肯定是复位中断向量没设好。
:
:
: 【 在 xilin (西林) 的大作中提到: 】
: : 用的是硬件仿真器
: : 中断也关闭了
: : dsp的片子是206,没有看门狗
: : 【 在 mydsp (Z~族@Z~笨笨) 的大作中提到: 】
────────────────────────────────────────
mydsp (Z~族@Z~笨笨) 于 2002年12月28日15:19:31 星期六 说道:
如果可以的话,把程序贴出来让大家看看,
另外,单步执行试试,看看是在哪句程序出问题的。
【 在 xilin (西林) 的大作中提到: 】
: 用的是硬件仿真器
: 中断也关闭了
: dsp的片子是206,没有看门狗
: 【 在 mydsp (Z~族@Z~笨笨) 的大作中提到: 】
: : 如果用的是硬件仿真器,
: : 最好关闭所有中断,并禁止看门狗(如果有的话)。
────────────────────────────────────────
xilin (西林) 于 2002年12月28日15:40:46 星期六 说道:
还不是很明白复位中断向量怎么设
我的初始化子程序是这样的
void init(void)
{asm(" clrc CNF");
asm(" ldp #0h");
asm(" setc INTM");
asm(" setc OVM");
asm(" clrc SXM");
WSGR=0x0000;
}
【 在 freebird (终结者) 的大作中提到: 】
:
: 肯定是复位中断向量没设好。
:
:
: 【 在 xilin (西林) 的大作中提到: 】
: : 用的是硬件仿真器
: : 中断也关闭了
: : dsp的片子是206,没有看门狗
: : 【 在 mydsp (Z~族@Z~笨笨) 的大作中提到: 】
────────────────────────────────────────
xilin (西林) 于 2002年12月28日15:52:05 星期六 说道:
单步执行没什么问题
程序如下:
void init(void) /* 初始化子程序*/
{
asm(" clrc CNF ") ;
asm(" ldp #0h ") ;
asm(" setc INTM ") ;
asm(" setc OVM ") ;
asm(" clrc sxm ") ;
WSGR=0x0000;
}
void delay(uint timer) /*延时子程序*/
{static uint a=0;
for (a=0;a<=timer;a++)
{;}
}
void main(void)
{int i,j,k;
init();
while(1)
{LED=1;
for(j=0;j<10;j++)
{LED=LED<<1;
delay(60000);
};
};
}
在刚开始调试的时候问题总出在延时子程序上
【 在 mydsp (Z~族@Z~笨笨) 的大作中提到: 】
: 如果可以的话,把程序贴出来让大家看看,
: 另外,单步执行试试,看看是在哪句程序出问题的。
: 【 在 xilin (西林) 的大作中提到: 】
: : 用的是硬件仿真器
: : 中断也关闭了
: : dsp的片子是206,没有看门狗
────────────────────────────────────────
xilin (西林) 于 2002年12月28日15:52:45 星期六 说道:
我就是照他的作蓝本
【 在 camel (哭泣的骆驼) 的大作中提到: 】
: 你就把张xx的程序改改就行了呀!
: 哪个是好使的!
: 我把它的email明天给你
: 你给他发信就行了
: 【 在 xilin (西林) 的大作中提到: 】
: : 用C编了一段很短的程序
: : 程序是简单的点灯程序,我想让发光管依次点亮,循环进行
: : 总是能够循环2,3次,就出现了死住的情况
: : 往往停在
────────────────────────────────────────
mydsp (Z~族@Z~笨笨) 于 2002年12月28日16:30:47 星期六 说道:
复位中断向量一般在汇编文件.asm中设,
象这样:
.ref _c_int0
.ref _NOINT
.sect "vectors"
RSVECT B _c_int0 ; PM 0 Reset Vector
INT1 B _VNAINT ; PM 2 Int level 1
INT2 B _TIMER1 ; PM 4 Int level 2
INT3 B _NOINT ; PM 6 Int level 3
INT4 B _NOINT ; PM 8 Int level 4
.
.
当然了,如果你没有用到中断,就让所有的中断入口都指向一个自己定义的
函数NOINT.
然后在.cmd文件中把vectors段分配到00地址就ok了。
【 在 xilin (西林) 的大作中提到: 】
: 还不是很明白复位中断向量怎么设
: 我的初始化子程序是这样的
: void init(void)
: {asm(" clrc CNF");
: asm(" ldp #0h");
: asm(" setc INTM");
: asm(" setc OVM");
: asm(" clrc SXM");
: WSGR=0x0000;
: }
────────────────────────────────────────
xilin (西林) 于 2002年12月28日18:18:30 星期六 说道:
我的vector.h文件和.cmd文件如下,是从别人好使得工程上copy下来的
对它不很懂,好像是定义了几个中断向量
但是我的程序里并没有用到中断,目前。
这两个文件是否需要修改?
* File: vector.h *
* File defines Interrupt vector labels *
.sect "vectors"
b start
b inpt1
b inpt23
b timer
b codrx
b codtx
b uart
.space 45*16
.word 1,2,3,4,5
.cmd文件如下:
MEMORY
{
PAGE 0: FLASH : o =0000H , l =8000H
PAGE 1:
REGS : o = 0H , l = 0060H /* memory-mapped registers an
d reserved space */
BLKB2 : o = 0060H , l = 0020H /* BLK B2 */
RAM : o = 0200H , l = 0200H /* BLK B0 & B1 */
EXTDAT : o = 800H , l =0f800H /* External Data*/
}
SECTIONS
{
vectors : {}> FLASH PAGE 0
.text : {}> FLASH PAGE 0
.cinit : {}> EXTDAT PAGE 1
.switch : {}> EXTDAT PAGE 1
.const : {}> EXTDAT PAGE 1
.bss : {}> EXTDAT PAGE 1
.stack : {}> EXTDAT PAGE 1
.sysmem : {}> EXTDAT PAGE 1
}
【 在 mydsp (Z~族@Z~笨笨) 的大作中提到: 】
: 复位中断向量一般在汇编文件.asm中设,
: 象这样:
: .ref _c_int0
: .ref _NOINT
: .sect "vectors"
: RSVECT B _c_int0 ; PM 0 Reset Vector
: INT1 B _VNAINT ; PM 2 Int level 1
: INT2 B _TIMER1 ; PM 4 Int level 2
: INT3 B _NOINT ; PM 6 Int level 3
: INT4 B _NOINT ; PM 8 Int level 4
: .
────────────────────────────────────────
mydsp (Z~族@Z~笨笨) 于 2002年12月28日18:47:14 星期六 说道:
【 在 xilin (西林) 的大作中提到: 】
: 我的vector.h文件和.cmd文件如下,是从别人好使得工程上copy下来的
: 对它不很懂,好像是定义了几个中断向量
: 但是我的程序里并没有用到中断,目前。
: 这两个文件是否需要修改?
: * File: vector.h *
: * File defines Interrupt vector labels *
: .sect "vectors"
: b start
~~~~~~~~~~这个就是你的复位中断入口
: b inpt1
: b inpt23
: b timer
如果你的程序中没有定义start,就有可能找不到正确的复位入口。
一般来说,c程序的入口定义为_c_int0,这个是在rts2xx.lib中定义的。
我以前看到过的在.h文件中定义中断入口好像都是6000系列把,2000系列一般都是在
.asm文件中定义中断入口的。
这些基本的东西,用一用就熟练了,不过最好还是看看资料把。
────────────────────────────────────────
xilin (西林) 于 2002年12月29日11:50:48 星期天 说道:
3x very much!
【 在 mydsp (Z~族@Z~笨笨) 的大作中提到: 】
: 【 在 xilin (西林) 的大作中提到: 】
: : 我的vector.h文件和.cmd文件如下,是从别人好使得工程上copy下来的
: : 对它不很懂,好像是定义了几个中断向量
: : 但是我的程序里并没有用到中断,目前。
: : 这两个文件是否需要修改?
: : * File: vector.h *
: : * File defines Interrupt vector labels *
: : .sect "vectors"
: : b start
: ~~~~~~~~~~这个就是你的复位中断入口
────────────────────────────────────────
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:206.840毫秒