- 论坛徽章:
- 0
|
本帖最后由 zhangxujun1981 于 2010-10-25 13:24 编辑
我的程序像这样:
for(i=0;i<9000000;i++){
(*(volatile short *)(GBankAddr)=0);
(*(volatile short *)(GBankAddr)=1);
(*(volatile short *)(GBankAddr)=0);
(*(volatile short *)(GBankAddr)=1);
(*(volatile short *)(GBankAddr)=0);
(*(volatile short *)(GBankAddr)=1);
}
然后用示波器测量数据总线和WE信号,(在内核态和用户态分别运行这段程序),发现内核态(驱动程序)输出的频率是用户态的两倍,
每次都是这样,结果很一直致.我想是不是内核态的代码运行环境有什么优化和加速,例如打开了什么cache之类.
另外我发现类似 for(i=0;i<50;i++)这样不需要访问外设的指令速度运行的很快,一条指令大概几ns,
像(*(volatile short *)(GBankAddr)=0)这种指令就需要1百多ns,(将外部总线时序不算在里面,外部总线的访问时序只占有40ns,
我根据芯片资料将总线时序参数配置成这样的,而且示波器量出的结果也是对的,就是指令执行的时间太长也许是地址取值太长等). |
|