MDK 4.72a编译器问题

2019-07-16 09:56发布

最近用MDK4.72a编译程序时发现问题很费解
问题如下
  1. extern unsigned int timeCnt;

  2. //-----------------------------------------------------------------------------
  3. //         Global Functions
  4. //-----------------------------------------------------------------------------
  5. extern void RTC_Tester(void);


  6. void Tester_Init(void)
  7. {
  8.         TRACE_CONFIGURE(DBGU_STANDARD, 115200, BOARD_MCK);
  9.     printf("-- Basic EMAC lwIP Project %s -- ", SOFTPACK_VERSION);
  10.     printf("-- %s ", BOARD_NAME);
  11.     printf("-- Compiled: %s %s -- ", __DATE__, __TIME__);

  12.     sys_init_timing();
  13. }



  14. /* The main() function. */
  15. /*功能
  16. 定时器每隔10ms进一次中断,timeCnt值加1
  17. 主函数中判断每10秒读取一次RTC时钟并输出*/
  18. int main(void)
  19. {
  20. #if 0
  21.         TRACE_CONFIGURE(DBGU_STANDARD, 115200, BOARD_MCK);
  22.     printf("-- Basic EMAC lwIP Project %s -- ", SOFTPACK_VERSION);
  23.     printf("-- %s ", BOARD_NAME);
  24.     printf("-- Compiled: %s %s -- ", __DATE__, __TIME__);
  25.     sys_init_timing();
  26.         /*用以上部分初始化程序运行正常*/
  27.        
  28. #else
  29.         volatile unsigned int i;
  30.         i = 0xFFFF;
  31.         while(i--);
  32.         /* 该初始化如果不加此部分程序运行到
  33.         RTC_Tester()之后跑飞到0x10(有时会在0x04,0x08或0x0C)地址死循环 */


  34.         Tester_Init();
  35.         /*用此方法初始化发现timeCnt<100时也会执行RTC_Tester函数
  36.         运行结果如下:
  37.         timeCnt=1
  38.         -I- RTC DateTime: 2007-01-01 00:01:33 Week:1

  39.         timeCnt=9
  40.         -I- RTC DateTime: 2007-01-01 00:01:33 Week:1

  41.         timeCnt=2
  42.         -I- RTC DateTime: 2007-01-01 00:01:34 Week:1

  43.         timeCnt=1
  44.         -I- RTC DateTime: 2007-01-01 00:01:34 Week:1

  45.         timeCnt=1
  46.         -I- RTC DateTime: 2007-01-01 00:01:34 Week:1

  47.         timeCnt=4
  48.         -I- RTC DateTime: 2007-01-01 00:01:34 Week:1
  49.         */
  50.         /*试过将timeCnt定义为volatile变量效果一样*/
  51.         /*如果将>=改为==却能正常执行*/
  52.         /*如果不将timeCnt清零,程序运行到timeCnt==100后跑飞*/
  53.        
  54. #endif

  55.         while(1)
  56.         {

  57.                 if(timeCnt >= 100)
  58.                 {       
  59.                         printf("timeCnt=%d ", timeCnt);
  60.                         timeCnt = 0;
  61.                         RTC_Tester();
  62.                 }
  63.         }

  64.     return 0;
  65. }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。