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毫秒