Board logo

标题: 数组与指针的问题 [打印本页]

作者: ky3453079    时间: 2007-3-14 13:00     标题: 数组与指针的问题

程序如下:

#include <hidef.h>      /* common defines and macros */
#include <mc9s12a512.h>     /* derivative information */


#pragma LINK_INFO DERIVATIVE "SampleS12"
void PLL_init(uchar SYNR_data,uchar REFDV_data);
void main(void) {
  /* put your own code here */
  uchar *p;
  static uchar j=0;
  struct student
  {
    uchar a;
    uint b;
    float c;
    };
  union test
  {
   struct student d;
   uchar e[8];
   uchar f[1820];
   }h;
  h.d.c = 0.1;
  h.f[1799]=0x11;
  h.f[1800]=0x11;
  h.f[1801]=0x11;
  EnableInterrupts;
  p = &h.f[1799];
  p++;
  j = *p;
  PLL_init(1,1);
  for(;;)
  {
   }
 }
/****************************************************************************
* 名    称:PLL_init
* 功    能:PLL初始化程序
* 入口参数:SYNR_data  倍频系数
*           REFDV_data 分频系数
* 说    明:PLLCLK = 2*OSCCLK*(SYNR_data+1)/(REFDV_data+1)
* 出口参数:无
****************************************************************************/
void  PLL_init(uchar SYNR_data,uchar REFDV_data)
{
  CLKSEL = 0;          // 选择外部晶振为时钟源 
  PLLCTL_PLLON = 0;      // 关闭PLL 
  SYNR = SYNR_data;    // 选择倍频系数 
  REFDV = REFDV_data;  // 选择分频系数 
  PLLCTL = 0x70;
  while(!CRGFLG_LOCK); // 等待PLL锁定
  CLKSEL = 0x80;       // 选择PLL为时钟源
  }
运行这段程序会跑飞,不知道是什么原因?

[此贴子已经被作者于2007-3-14 13:00:20编辑过]


作者: strongchen    时间: 2007-3-14 13:33

外部晶振起振了吗?信号稳定吗?
作者: ky3453079    时间: 2007-3-14 14:15

起振了,信号也稳定。
如果把那些指针删掉,程序就正常了
作者: ky3453079    时间: 2007-3-14 14:17

我试过把数组弄小点,也是可以的,不知道数组的大小跟编译器有没有什么关联?

[此贴子已经被作者于2007-3-14 14:17:37编辑过]


作者: ky3453079    时间: 2007-3-14 14:28

http://bbs.eccn.com/uploadImages/test111.rar
作者: strongchen    时间: 2007-3-14 15:12

你的数组定义的是局部变量,可能使堆栈溢出了。你定义成全局变量试试。
作者: ky3453079    时间: 2007-3-14 15:33

是堆栈问题!谢谢版主
作者: skychx    时间: 2007-3-15 00:44

为什么会这样呢?局部变量的大小怎么定呢?
作者: strongchen    时间: 2007-3-15 08:57

堆栈的大小是可以设定的。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0