打印

STM32F103 在RAM中传递数据怎么这么慢啊

[复制链接]
2149|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
关聿|  楼主 | 2010-3-8 11:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
u16 adc_data[1410];  // 每个周期采样100次,采样2个周期,7X100X2,  ADC采样2个周期后,传输至adc_data[],用于分析计算
    u16 new_adc_data[1410];  // 每个周期采样100次,采样2个周期,7X100X2, ADC时,由DMA传输至new_adc_data[]


  //  ADC采样2个周期后,传输至adc_data[],用于分析计算
for(i=0; i<1400; i++)
         { adc_data=new_adc_data;   
         }
赋值1400个数据怎么用了600uS,  我系统主频设为64M的,  且执行上述循环时,没有被中断打断

/// PLLCLK = 4MHz * 16 = 64 MHz  /////////
      RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_16); // 设置PLL时钟源及倍频系数           
      RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);  // 设置系统时钟
沙发
baidudz| | 2010-3-8 11:38 | 只看该作者
600US很慢吗,可以接受吧,还有你这个时间如何测得

使用特权

评论回复
板凳
关聿|  楼主 | 2010-3-8 11:52 | 只看该作者
不对,刚才复制粘贴出了问题
for(i=0; i<1400; i++)
         { adc_data[i]=new_adc_data[i];            
         }

使用特权

评论回复
地板
zdx818| | 2010-3-8 12:08 | 只看该作者
我认为速度也可以了,看看汇编吧。
cpu要先把new_adc_data[i]的数据取出来,再放进adc_data[i]中,还要判断i是否大于1400,还要i++,还要跳转。这些过程还没有用到30个CPU周期,要的要的。

使用特权

评论回复
5
IJK| | 2010-3-8 15:56 | 只看该作者
“赋值1400个数据怎么用了600uS,  我系统主频设为64M的,  且执行上述循环时,没有被中断打断


原因很简单,你用的优化级别比较低,把优化级别改到最高,应该就可以了。

使用特权

评论回复
6
xsgy123| | 2010-3-8 21:19 | 只看该作者
优化级别改高,怎么改呢,楼主没用中断呀

使用特权

评论回复
7
McuPlayer| | 2010-3-8 21:39 | 只看该作者
1、先别看时间,看产生的ASM代码,然后找原因
2、这个跟ST没太大关系,CM3的core也是买ARM公司的

使用特权

评论回复
8
zwll| | 2010-3-8 22:39 | 只看该作者
还行吧

使用特权

评论回复
9
IJK| | 2010-3-9 11:29 | 只看该作者
优化级别改高,怎么改呢,楼主没用中断呀
xsgy123 发表于 2010-3-8 21:19


在IAR里面,这样改优先级:
Project -> Options -> C/C++ Compiler -> Optimizations

MDK没怎么用过,可以自己找找。

使用特权

评论回复
10
yugen| | 2010-3-9 16:34 | 只看该作者
改成32位DMA传输最快

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

46

帖子

0

粉丝