-
使用 IAR EWARM5.40 仿真 看 运行的 CYCLECOUNTER数目
测试的是64点FFT
C FFT RADIX-2 使用了 18027 个 CYCLE COUNTER
STM32的cr4_fft_64_stm32使用了 2832 个 CYCLECOUNTER
ARM7的CR4_FFT_64_ARM7使用了 3030 个 CYCLECOUNTER
相差了6倍!
汇编的FFT RADIX-4 64点为65us,那么这个C FFT 就是 390us .
其实都可以马虎用啦。
如果 10 毫秒 调用一次还可以的。
而汇编的可以每2毫秒运算一次。。。,当然实时性更高 了。
-
想找正规代理商,还是让版主主给推荐一下吧
-
嗯,不错,看到了,但还没有时间读,
-
http://blog.eeworld.net/macrozhang001/archive/2010/05/24/5618979.aspx
-
以E开头的都是高级货啊,就像EMBA,学E语得出的结论,哥只知道MBA
-
学习了
-
/*---------------------------------------------------------------------
LCD1602.C文件 LCD1602的函数
作者:Computer-lov 创建日期:2004.11.12 最后修改日期:2004.11.12
版本:1.0
----------------------------------------------------------------------*/
#include "hardware.h"
#include "lcd1602.h"
void LCD_check_busy(void) //检测LCD状态,看它是不是还在忙呢
{
while(1)
{
LCD_EN=0;
LCD_RS=0;
LCD_RW=1;
LCD_DATA=0xff;
LCD_EN=1;
if(!LCD_BUSY)break;
}
LCD_EN=0;
}
void LCD_cls(void) //LCD清屏
{
LCD_check_busy();
LCD_RS=0;
LCD_RW=0;
LCD_DATA=1;
LCD_EN=1;
LCD_EN=0;
}
void LCD_write_instruction(unsigned char LCD_instruction) //写指令到LCD
{
LCD_check_busy();
LCD_RS=0;
LCD_RW=0;
LCD_DATA=LCD_instruction;
LCD_EN=1;
LCD_EN=0;
}
void LCD_write_data(unsigned char LCD_data) //输出一个字节数据到LCD
{
LCD_check_busy();
LCD_RS=1;
LCD_RW=0;
LCD_DATA=LCD_data;
LCD_EN=1;
LCD_EN=0;
}
void LCD_set_position(unsigned char x) //LCD光标定位到x处
{
LCD_write_instruction(0x80+x);
}
/*
void LCD_go_home(void) //LCD光标归位
{
LCD_write_instruction(LCD_GO_HOME);
}
*/
void LCD_printc(unsigned char lcd_data) //输出一个字符到LCD
{
LCD_write_data(lcd_data);
}
void LCD_prints(unsigned char *lcd_string) //输出一个字符串到LCD
{
unsigned char i=0;
while(lcd_string!=0x00)
{
LCD_write_data(lcd_string);
i++;
}
}
void LCD_initial(void) //初始化LCD
{
LCD_write_instruction(LCD_AC_AUTO_INCREMENT|LCD_MOVE_DISENABLE);
LCD_write_instruction(LCD_DISPLAY_ON|LCD_CURSOR_OFF);
LCD_write_instruction(LCD_DISPLAY_DOUBLE_LINE);
LCD_cls();
}
这是protues下1602的驱动,我仿真过的可以用,你试试看
-
楼主怎么不结贴啊,搞定没有啊。
-
proteus 或者 Pspice
-
没有就没办法啊
自己做电路板实验吧
-
应该是有些东西没有删除完
-
\Windows 目录中文件,很多是不可访问的
-
要编译成相应CPU能直接运行的目标文件,并且还不能用到系统的相关。
我记得在编译连接的时候分步有办法不连接系统的那些东西(elf)
-
没参加过这个比赛,关注ing…
-
感谢again_gyf的提示,原来从来没有关心过编译器提供的文档,都是在网络寻找为主,结果这次找不到,才到bbs上问了半天,好在楼上的兄台一语道破天机,才让我恍然大悟,原来还有用户手册可以看,实在惭愧。
开发手册,知道了IAR的RAM / ROM是可以指定范围的,而且比较灵活,给出了三种运算方式 | & - 有了这三种方式,就可以很灵活的定义你的RAM ROM的空间了,而且计算很方便。我在ICF中给出了RAM 的范围
define region RAM_region=mem:[from 0x20000000 to 0x6800ffff]-mem:[from 0x20002000 to 0x68000000];
编译后查看MAP 文件
"A1": place at mem:0x8000000 { ro section .intvec };
"P1": place in [from mem:0x8000000 to mem:0x807ffff] { ro };
"P2": place in [from mem:0x20000000 to mem:0x20001fff] |
[from mem:0x68000001 to mem:0x6800ffff] {
rw, block CSTACK, block HEAP };
这说明和预期的范围是一致的,然后我在程序中定义了大量的数组,在编译器中选择不优化(怕把没什么用的数组优化掉)然后再查看map文件,它告诉我RAM的使用情况
"P2", part 1 of 4: 0x7d4
CSTACK 0x20000000 0x400 <Block>
CSTACK uninit 0x20000000 0x400 <Block tail>
HEAP 0x20000400 0x200 <Block>
HEAP uninit 0x20000400 0x200 <Block tail>
.iar.dynexit 0x20000600 0x1d4 <Block>
.iar.dynexit uninit 0x20000600 0xc cppinit.o [3]
.iar.dynexit uninit 0x2000060c 0x1c8 <Block tail>
- 0x200007d4 0x7d4
"P2", part 2 of 4: 0x98
.bss zero 0x200007d4 0x50 xfiles.o [3]
.bss zero 0x20000824 0x14 xsyslock.o [3]
.bss zero 0x20000838 0x10 main.o [1]
.bss zero 0x20000848 0x8 xxmemxmalloc.o [3]
.bss zero 0x20000850 0x4 main.o [1]
.bss zero 0x20000854 0x4 xgetmemchunk.o [3]
.bss zero 0x20000858 0x4 MtxWrapper.o [3]
.bss zero 0x2000085c 0x4 MtxWrapper.o [3]
.bss zero 0x20000860 0x4 MtxWrapper.o [3]
.bss zero 0x20000864 0x4 MtxWrapper.o [3]
.bss zero 0x20000868 0x4 iarwstd.o [5]
- 0x2000086c 0x98
"P2", part 3 of 4: 0x14a
P2 s0 0x2000086c 0x14a <Init block>
.data inited 0x2000086c 0x84 setlocale.o [3]
.data inited 0x200008f0 0x4c localeconv.o [3]
.data inited 0x2000093c 0x40 xfiles.o [3]
.data inited 0x2000097c 0x10 stm32_eval.o [1]
.data inited 0x2000098c 0x10 stm32f10x_rcc.o [1]
.data inited 0x2000099c 0x8 stm32_eval.o [1]
.data inited 0x200009a4 0x8 stm32_eval.o [1]
.data inited 0x200009ac 0x4 stm32f10x_rcc.o [1]
.data inited 0x200009b0 0x4 cppinit.o [3]
.data inited 0x200009b4 0x2 stm3210e_eval_lcd.o [1]
- 0x200009b6 0x14a
"P2", part 4 of 4: 0xfa04
.bss zero 0x68000004 0x3200 main.o [1]
.bss zero 0x68003204 0x3200 main.o [1]
.bss zero 0x68006404 0x3200 main.o [1]
.bss zero 0x68009604 0x3200 main.o [1]
.bss zero 0x6800c804 0x3200 main.o [1]
.bss zero 0x6800fa04 0x2 stm3210e_eval_lcd.o [1]
- 0x6800fa06 0xfa02
这说明分配的空间在连接时会自己定位,这样我的目的就达到了。
再次感谢楼上的兄弟,不是我懒,实在是没想到看手册,也可以说明平时的开发习惯不好。问题总结道这里,希望对需要有类似应用的朋友有帮助。
-
那APB1最高为36M,就是必须得2分频HCLK,也就是说从TIME2到TIME7的时钟都是72MHZ了?
或者把APB1,4分频,TIME2到TIME7的时钟才能是36MHZ
-
建议楼主去下载 模电看看啊。
我当时在:http://www.52rd.com/bbs/ 里面下载了很多模电的电子书,里面有介绍。
而且在那么论坛里,好像还有华为的模电,对于运放讲得很不错哦,楼主去看看。
另外eeworld里面的下载也有很多关于运放或模电的电子书,楼主好好找下。
-
大家都没有吗?
-
现在都是直接VS2005,C++ 与C 开发驱动与应用。
-
To ruritanian :
D:\WINCE500\PUBLIC\COMMON\OAK\DRIVERS\NETUI里面的代码都是带Ex
To suwyhoho:
刷新的问题已解决,WZCQueryInterface之前,应该先WZCRefreshInterface一下就能刷出来了.
多谢了.