主题 : key没有赋初值 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 13640
精华: 0
发帖: 21
金钱: 105 两
威望: 21 点
贡献值: 0 点
综合积分: 42 分
注册时间: 2010-01-26
最后登录: 2017-09-13
楼主  发表于: 2010-02-09 12:51

 key没有赋初值

管理提醒: 本帖被 kasim 从 裸机程序技术交流专区 移动到本区(2010-02-09)
int Main(int argc, char **argv)
{
    int i;
    U8 key;
    U32 mpll_val=0;
    int data;
  
    mpll_val = (92<<12)|(1<<4)|(1);
    
    //init FCLK=400M, so change MPLL first
    ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);
    ChangeClockDivider(key, 12);    


//以上程序摘自官方LED工程,为什么key没有赋初值,而程序没有问题?
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
贡献值: 71 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2010-02-09 13:55
这是ChangeClockDivider()函数的源代码,当传入的参数有错误时,函数并不一定会出错。硬件帮了一把?
复制代码
  1. void ChangeClockDivider(int hdivn_val,int pdivn_val)
  2. {
  3.     int hdivn=2, pdivn=0;
  4.     
  5.      // hdivn_val (FCLK:HCLK)ratio hdivn
  6.      // 11           1:1       (0)
  7.      // 12           1:2       (1)
  8.      // 13           1:3       (3)
  9.      // 14           1:4       (2)
  10.      // pdivn_val (HCLK:PCLK)ratio pdivn
  11.      // 11           1:1       (0)
  12.      // 12           1:2       (1)
  13.     switch(hdivn_val) {
  14.         case 11: hdivn=0; break;
  15.         case 12: hdivn=1; break;
  16.         case 13:
  17.         case 16: hdivn=3; break;
  18.         case 14:
  19.         case 18: hdivn=2; break;
  20.     }
  21.     
  22.     switch(pdivn_val) {
  23.         case 11: pdivn=0; break;
  24.         case 12: pdivn=1; break;
  25.     }
  26.     
  27.     //Uart_Printf("Clock division change [hdiv:%x, pdiv:%x]\n", hdivn, pdivn);
  28.     rCLKDIVN = (hdivn<<1) | pdivn;
  29.     //Uart_Printf("rCLKDIVN:%x]\n", rCLKDIVN);
  30.     switch(hdivn_val) {
  31.         case 16:        // when 1, HCLK=FCLK/6.
  32.             rCAMDIVN = (rCAMDIVN & ~(3<<8)) | (1<<8);
  33.         break;
  34.         case 18:     // when 1, HCLK=FCLK/8.
  35.             rCAMDIVN = (rCAMDIVN & ~(3<<8)) | (1<<9);
  36.         break;
  37.     }
  38.     //Uart_Printf("rCAMDIVN:%x]\n", rCAMDIVN);
  39.     
  40.     if(hdivn!=0)
  41.         MMU_SetAsyncBusMode();
  42.     else
  43.         MMU_SetFastBusMode();
  44. }

"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."