OpenEdv-开源电子网

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

请教下,我想把外部sram的最后100 KByte 分配给emWin 使用,设置如下:

[复制链接]

259

主题

806

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1887
金钱
1887
注册时间
2012-10-28
在线时间
353 小时
发表于 2015-9-15 11:15:48 | 显示全部楼层 |阅读模式
5金钱
   
请教下,我想把外部sram的最后100 KByte 分配给emWin 使用,设置如下:

#define   EXT_SRAM_ADDR   (u32) 0x68000000


static U32 *aMemory;

    aMemory = (U32 *)EXT_SRAM_ADDR + ((1*1024*1024) - ((100*1024) / 4 )) ;  // 这个地址计算的对不对啊 ??, 这个地方也要 /4
    /*  Assign memory to emWin */
    GUI_ALLOC_AssignMemory(aMemory,  ((100*1024) / 4 ) );     // 这个地方貌似要 /4 才可以,是什么情况啊 ???
    GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-9-16 09:02:10 | 显示全部楼层
1.外部SRAM多大,你直接说最后100K,怎么指导最后100K在哪里
2.除4应该和U32类型有关吧
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

18

主题

422

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1139
金钱
1139
注册时间
2014-5-24
在线时间
116 小时
发表于 2015-9-16 09:10:05 | 显示全部楼层
两个参数为:起始地址,字节数;怎么分配就是你的事儿了。
I See Fire.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.  只给方向,不妨碍思考
回复

使用道具 举报

259

主题

806

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1887
金钱
1887
注册时间
2012-10-28
在线时间
353 小时
 楼主| 发表于 2015-9-16 09:47:32 | 显示全部楼层
回复【2楼】龙之谷:
---------------------------------
static U32 *aMemory;
    aMemory = (U32 *)EXT_SRAM_ADDR + ((1*1024*1024) - ((100*1024) / 4 )) ;  // 这个地址计算的对不对啊 ??, 这个地方也要 /4
                                                                                                                                 // 外部sram 大小 是   1*1024*1024
                                                                                                                                 // 分配最后 100KByte  是 100*1024
    /*  Assign memory to emWin */
    GUI_ALLOC_AssignMemory(aMemory,  ((100*1024) / 4 ) );     // 这个地方貌似要 /4 才可以,是什么情况啊 ???
    GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);
回复

使用道具 举报

259

主题

806

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1887
金钱
1887
注册时间
2012-10-28
在线时间
353 小时
 楼主| 发表于 2015-9-16 09:52:43 | 显示全部楼层
回复【3楼】emWin:
---------------------------------
你好,按照你说的,我现在改成如下,你看看 对不对啊

static U32 *aMemory;
    aMemory = (U32 *)EXT_SRAM_ADDR + ((1*1024*1024)/2 - ((100*1024) / 2 )) ;  // 这个地址计算的对不对啊 ??, 这个地方 /2 是把字
                                                                                                                                    // 节转换成16位的,因为数据接口是16位的
    /*  Assign memory to emWin */
    GUI_ALLOC_AssignMemory(aMemory,  ((100*1024)  ) );     
    GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);
回复

使用道具 举报

259

主题

806

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1887
金钱
1887
注册时间
2012-10-28
在线时间
353 小时
 楼主| 发表于 2015-9-16 09:53:50 | 显示全部楼层
回复【3楼】emWin:
---------------------------------
好,按照你说的,我现在改成如下,你看看 对不对啊 

static U32 *aMemory; 
    aMemory = (U32 *)EXT_SRAM_ADDR + ((1*1024*1024)/2 - ((100*1024) / 2 )) ;  //  这个地方 /2 ,是把字 节转换
                                                                                                                                    // 成16位的,因为数据接口是16位的 
    /*  Assign memory to emWin */ 
    GUI_ALLOC_AssignMemory(aMemory,  ((100*1024)  ) );      
    GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-9-16 13:47:53 | 显示全部楼层
有了问题要多思考后再进一步问,不要慌着问

可以举个例子:假如100个苹果(0到99号),有3个小朋友,如果要给小朋友则每个至少给两个(左右手各一个),你想把最后10个苹果给小朋友,是从第100 - 10 = 90号开始给还是从(100 / 2 - 10 / 2)开始给
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

259

主题

806

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1887
金钱
1887
注册时间
2012-10-28
在线时间
353 小时
 楼主| 发表于 2015-9-16 20:22:16 | 显示全部楼层
回复【7楼】龙之谷:
---------------------------------
aMemory = (U32 *)EXT_SRAM_ADDR + ((1*1024*1024) - ((100*1024) )) ;     // 这样也不行,

非要搞成如下才可以
static U32 *aMemory; 
    aMemory = (U32 *)EXT_SRAM_ADDR + ((1*1024*1024) - ((100*1024) / 4 )) ;  // 这个地址计算的对不对啊 ??, 这个地方也要 /4        (1)
                                                                                                                                 // 外部sram 大小 是   1*1024*1024 
                                                                                                                                 // 分配最后 100KByte  是 100*1024 
    /*  Assign memory to emWin */ 
    GUI_ALLOC_AssignMemory(aMemory,  ((100*1024) / 4 ) );     // 这个地方貌似要 /4 才可以,是什么情况啊 ??? 
    GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);


我不明白是上面的括号1里面,   
 ((1*1024*1024) - ((100*1024) / 4 )   这个1m字节的最大寻址范围是0x6800 0000 + 这个1mbyte/2的地址,但是除以4后,那不是少了一半了啊 ????

按照外部sdram的读写地址计算,多大寻址范围是 0x6800 0000 + 0x8 0000   = 0x68080000 - 0x32000(100KByte的地址)  = 0x6804E000


如果 0x80000 - 0x32000 / 4 = 0x13800  那么最终外部sdram的寻址范围就变成了 0x6800 0000 + 0x13800  这个了
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-9-16 20:44:22 | 显示全部楼层
这乱的...
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 16:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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