OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5016|回复: 7

iMX6UL写内存为什么这么慢?

[复制链接]

3

主题

11

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2021-6-14
在线时间
3 小时
发表于 2021-8-26 10:48:16 | 显示全部楼层 |阅读模式
1金钱
在裸机环境下,尝试对一块1.47MB的内存中填充数据,填充一次大约需要160毫秒,为什么会这么长时间?是我哪里配置的不对?
请各位大人帮我看看,为什么这么慢.
以下是我的代码,填充1000次,需要160秒,平均每次需要160毫秒。

#include <stdio.h>

typedef unsigned int u32;

int main(void)
{
        u32 i = 0;
        u32 frames = 0;

#define PIXELS (800 * 480)                /* 相当于 800 x 480 分辨率 */

        /* buf内存块的大小是 800 x 480 x 4 字节,约为 1.47MB 大小。*/
        u32 buf[PIXELS];

        /* 第一次获取时间值,单位是微秒。*/
        unsigned long tick1 = get_us_tick();

        /* 对buf内存块进行填充操作,重复执行1000次。*/
        for (frames = 0; frames < 1000; frames++) {
                for (i = 0; i < PIXELS; i++)
                        buf[i] = 0x12345678;
        }

        /* 第二次获取时间值,单位是微秒。*/
        unsigned long tick2 = get_us_tick();

        /* 打印两次时间之差值 */
        /* 这个时间差值就是对这个1.47MB的内存块写1000次的时间 */
        printf("%d - %d = %d ns \r\n", tick2, tick1, tick2 - tick1);

        /* 计算并打印平均时间,单位是毫秒。 */
        printf("%d ms/f\r\n", (tick2 - tick1) / 1000 / frames);

        return 0;
}

最佳答案

查看完整内容[请看2#楼]

添加#include 说不定就能用memset了,你想办法检查一下cpu频率和内存总线的频率看看,是不是哪没初始化
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
金钱
222
注册时间
2020-7-6
在线时间
54 小时
发表于 2021-8-26 10:48:17 | 显示全部楼层
snowwood2009 发表于 2021-8-26 19:18
这是在裸机环境下,没有memset

添加#include <string.h>说不定就能用memset了,你想办法检查一下cpu频率和内存总线的频率看看,是不是哪没初始化
回复

使用道具 举报

8

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
金钱
222
注册时间
2020-7-6
在线时间
54 小时
发表于 2021-8-26 15:51:46 | 显示全部楼层
用memset试试看
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2021-6-14
在线时间
3 小时
 楼主| 发表于 2021-8-26 19:18:01 | 显示全部楼层

这是在裸机环境下,没有memset
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2021-6-14
在线时间
3 小时
 楼主| 发表于 2021-8-26 21:16:23 | 显示全部楼层
奇怪的是,把这个代码片段挪到uboot的代码中执行,速度就非常快。是不是哪里需要配置?
回复

使用道具 举报

2

主题

47

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1381
金钱
1381
注册时间
2015-11-30
在线时间
335 小时
发表于 2021-8-26 22:43:44 | 显示全部楼层
裸机环境下,为什么没有memset?
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2021-6-14
在线时间
3 小时
 楼主| 发表于 2021-8-27 10:34:24 | 显示全部楼层
akes 发表于 2021-8-27 09:43
添加#include 说不定就能用memset了,你想办法检查一下cpu频率和内存总线的频率看看,是不是哪没初始化

裸机环境下 , 没有现成的string.h , 除非自己写 , 或者从第三方找来用 .
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2021-6-14
在线时间
3 小时
 楼主| 发表于 2021-8-27 10:36:21 | 显示全部楼层
问题的原因找到了,是因为没有启用DCache。在开启DCache和ICache之后,速度有了明显的提升。从之前的160毫秒提升到了10毫秒。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 17:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表