嵌入式开发者社区

标题: 软件延时导致C6678复位 [打印本页]

作者: IRONMAN    时间: 2016-7-30 10:42
标题: 软件延时导致C6678复位
     本渣渣最近在调C6678的IPC中断程序,想用一个简单的延时函数来延一下时,可是每当我一调用它的时候就发现核0重启,额,,,其实也不能说叫重启,就是某一段代码重复运行,重复的代码恰好在我调用的这个延时函数的前面。
    下面是我写的延时函数:
  1. void delay_us(unsigned int us)
  2. {
  3.         unsigned int i;
  4.         for( ; us>0;us--)
  5.                 for(i=109;i>0;i--);
  6. }
  7. //delay_ms(1);  实测1.004ms  在1GHz的主频下
  8. void delay_ms(unsigned int ms)
  9. {
  10.         for( ; ms>0;ms--)
  11.                 delay_us(1000);
  12. }
复制代码
   然后我在下面的这段代码里调用了它:
  1. void Wake_up_other_core(void)
  2. {
  3.         int *IpcGr0;
  4.     int i;

  5.         IpcGr0  = (int*)0x02620240;
  6.         /*warning:when running on no-boot mode,core0~core7 must all be connected to the target*/
  7.         for(i = 1;i < CORE_NUM_6678;i++)     //core0 sent ipc interrupt to
  8.         {
  9.                 delay_ms(2000);
  10.           *(IpcGr0+i) = (*(IpcGr0+i)) | 0x00000001;
  11.         }
  12. }
复制代码
下面的是主函数:
  1. void main(void)
  2. {
  3.         System_init();

  4.         UART_Interact_with_PC();                                              //使用DMA发送方式,如果每次发送时查询DMA是否发送完成容易卡死
  5.         GPIO_init();
  6. //        delay_ms(10);

  7.         KeyStone_UART_write(string1, sizeof(string1), 0);     // 使用串口0向PC发送核0启动完毕信息

  8.         Wake_up_other_core();                                                              //唤醒其它7个辅助核
  9.         while(1)
  10.         {
  11. //                        GPIO15_TOGGLE ;
  12. //                        delay_ms(1);
  13.                         //TSC_delay_us(1);
  14.         }
  15. }
复制代码
每次运行到Wake_up_other_core(); 时,KeyStone_UART_write(string1, sizeof(string1), 0); 这个函数就被重复调用了,因为我在串口助手上接收到了我要发送到内容,但是正常的情况下只会发送一次,现在是重复发送。哦,对了我的串口是使用的DMA方式发送的,会不会是哪里有冲突?

作者: human    时间: 2016-8-3 18:40
建议设置断点,然后进行单步调试




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4