OpenEdv-开源电子网

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

有人做过F4板子图像处理关于数据缓存的问题

[复制链接]

6

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2020-2-28
在线时间
61 小时
发表于 2020-3-13 10:40:28 | 显示全部楼层 |阅读模式
2金钱
我看到一些帖子使用片内二维数组做缓存,本人刚学,纯菜鸟,尝试过这样的处理,但是感觉片内存太小,处理不了比较大像素的图像,大家有没有什么好的建议,求大神指导,还有在STM32里面怎么样为二维数组分配动态内存呀?感谢!

最佳答案

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

二维数组动态分配例程如下: typedef struct{ unsigned short row; unsigned short column; unsigned int **data; }Matrix_t; #include static void clear_mat(Matrix_t *pdata) { unsigned short i,j; for(i=0;irow;i++) { for(j=0;jcolumn;j++) { pdata->data[j] =60000 + i + j; } } } static void put_mat(Matrix_t *pdata) { unsigned short i,j; for(i=0 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2015-8-25
在线时间
1035 小时
发表于 2020-3-13 10:40:29 | 显示全部楼层
二维数组动态分配例程如下:
        typedef struct{
                unsigned short row;
                unsigned short column;
                unsigned int   **data;
        }Matrix_t;
        #include <stdlib.h>
        static void clear_mat(Matrix_t *pdata)
        {
                unsigned short i,j;
                for(i=0;i<pdata->row;i++)
                {
                        for(j=0;j<pdata->column;j++)
                        {
                                pdata->data[i][j] =60000 + i + j;
                        }
                }
        }
       
        static void put_mat(Matrix_t *pdata)
        {
                unsigned short i,j;
                for(i=0;i<pdata->row;i++)
                {
                        UART_MESSAGE("new line is:");
                        for(j=0;j<pdata->column;j++)
                        {
                                UART_MESSAGE_1("%d ",pdata->data[i][j]);
                        }
                        UART_MESSAGE("\r\n");
                }
        }
       
        static Matrix_t create_mat(unsigned short row,unsigned short column)
        {
                Matrix_t mat;
                unsigned short i = 0;
                if(row <= 0 || column <= 0)
                {
                        UART_MESSAGE("error,in create_mat:row<=0 || column<=0\r\n");
                }
                if(row > 0 && column > 0)
                {
                        mat.row = row;
                        mat.column = column;
                        mat.data = (unsigned int **)malloc(mat.row * sizeof(void *));
                        if(mat.data == NULL)
                        {
                                UART_MESSAGE("error,in create_mat:mat.data==NULL\r\n");
                        }
                        for(i=0;i<row;i++)
                        {
                                *(mat.data+i) = (void *)malloc(mat.column * sizeof(unsigned int));
                                if(mat.data[i]==NULL)
                                {
                                        UART_MESSAGE("error,in create_mat:mat.data[i]==NULL\r\n");
                                }
                        }
                        clear_mat(&mat);
                }
                return mat;
        }
        测试:
        put_mat(&(create_mat(4,5)));
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14409
金钱
14409
注册时间
2018-8-3
在线时间
1156 小时
发表于 2020-3-13 15:09:39 | 显示全部楼层
你如果是一帧一帧数据保存的话  如果分辨率过大 RGB数据像素的是比较大的 片内RAM 估计是不够 你可以保存到片外的SRAM 直接指针指向地址把数组定义到外部SRAM
回复

使用道具 举报

6

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2020-2-28
在线时间
61 小时
 楼主| 发表于 2020-3-13 15:41:18 | 显示全部楼层
翼行园子 发表于 2020-3-13 15:09
你如果是一帧一帧数据保存的话  如果分辨率过大 RGB数据像素的是比较大的 片内RAM 估计是不够 你可以保存到 ...

可以把二维数组也定义在片外SRAM吗?大神,可不可以举一个例子。最近在做一个扫描激光点坐标的程序,啊,头都快炸了,不知道怎么弄才好。。。。。。。最近弄了一个144*176分辨率的,感觉太小了,而且占用了挺大内存的,处理其他方面内容的时候就完全不够了。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-22 10:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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