OpenEdv-开源电子网

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

CUBEMX生成的代码无法运行,调试Can't assess memory!求助

[复制链接]

5

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2017-7-28
在线时间
22 小时
发表于 2017-8-6 01:57:52 | 显示全部楼层 |阅读模式
1金钱
用CUBEMX生成的LTDC FMC 初始化代码。准备用FMC接口SDRAM(本来库里初始化没有发送初始化序列,已经在程序加入了)来做显存驱动LCD4342。在调试过程中发现一个非常诡异的问题,我的测试是用一个BMP图(RGB565)生成的数组来写入SDRAM,因为SDRAM的映射在FMC上是0XC000 0000,所以定义了uint16_t TFTLCD_Buffer[272][480]__attribute__((at(0xc0000000)));主程序里,发现程序就会出现无法运行的情况,调试的话就出现了Can't Access memory。
我为了测试错误地方,把BMP二维数组缩小成了image[1][6]这样比较小的数组,然后使用
/*for(cnt1=0;cnt1<1;cnt1++)        for(cnt2=0;cnt2<6;cnt2++)
                TFTLCD_Buffer[cnt1][cnt2]=image[cnt1][cnt2];*/
在主程序里将image数组的信息转移到显存里就会出现错误。
最诡异的地方是,我把for循环部分给注释掉,然后用等价的
  TFTLCD_Buffer[0][0]=_acimage[0][0];
  TFTLCD_Buffer[0][1]=_acimage[0][1];
  TFTLCD_Buffer[0][2]=_acimage[0][2];
  TFTLCD_Buffer[0][3]=_acimage[0][3];
  TFTLCD_Buffer[0][4]=_acimage[0][4];
  TFTLCD_Buffer[0][5]=_acimage[0][5];
程序就能正常运行,调试也不会出现Can't Access memory.
以上是使用库的代码出现的问题,我自己使用自己写的寄存器版本代码,做上面的工作并不会出现任何问题。

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

使用道具 举报

5

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2017-7-28
在线时间
22 小时
 楼主| 发表于 2017-8-6 02:15:26 | 显示全部楼层
本帖最后由 exayf007 于 2017-8-6 02:26 编辑

现在问题有点头绪了,经过测试。发现了
uint16_t TFTLCD_Buffer[272][480]__attribute__((at(0xc0000000)));
for(...)
TFTLCD_Buffer[cnt1][cnt2]=0xffff;
这样的话会出现can't access memory

uint16_t TFTLCD_Buffer[1][6]__attribute__((at(0xc0000000)));//将BUFFER更改比较小
for(...)
TFTLCD_Buffer[cnt1][cnt2]=0xffff;
这样不会出现   can't access memory

uint16_t TFTLCD_Buffer[1][6]__attribute__((at(0xc0000000)));//将BUFFER更改比较小
TFTLCD_Buffer[cnt1][cnt2]=0xffff; //不用for
这样不会can't access memory

uint16_t TFTLCD_Buffer[272][480];//不指定0xc000 0000
for(...)                                              //用for
TFTLCD_Buffer[cnt1][cnt2]=0xffff;
这样会出现   can't access memory

上面是我经过测试发现的情况,感觉很是诡异。可以观察出的现象有:
1,如果使用了for,在数组小的情况不会can't accesss memory,数组大就会
2,如果不使用for,任何使用都不会can't access memory
最终在作了如下尝试成功了
static uint16_t TFTLCD_Buffer[1][6]__attribute__((at(0xc0000000)));
但是不知道为什么是这样,知道的朋友麻烦点一下




回复

使用道具 举报

5

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2017-7-28
在线时间
22 小时
 楼主| 发表于 2017-8-6 12:55:18 | 显示全部楼层
顶一下,希望有人看到。
回复

使用道具 举报

5

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2017-7-28
在线时间
22 小时
 楼主| 发表于 2017-8-6 14:36:44 | 显示全部楼层

顶一下,希望有人看到。
回复

使用道具 举报

4

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
977
金钱
977
注册时间
2017-3-11
在线时间
78 小时
发表于 2017-8-6 14:46:16 | 显示全部楼层
卡不懂
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165462
金钱
165462
注册时间
2010-12-1
在线时间
2114 小时
发表于 2017-8-6 20:19:55 | 显示全部楼层
直接测试我们例程呢?
回复

使用道具 举报

5

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2017-7-28
在线时间
22 小时
 楼主| 发表于 2017-8-6 23:08:12 | 显示全部楼层
正点原子 发表于 2017-8-6 20:19
直接测试我们例程呢?

你们的例程没有问题,主要是因为我想学习怎么用CUBEMX生成代码使用LCD,但是出现了上面的情况。不过现在已经通过加个static 解决了,就是不知道为什么加了static可以解决这个问题
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165462
金钱
165462
注册时间
2010-12-1
在线时间
2114 小时
发表于 2017-8-7 00:47:28 | 显示全部楼层
exayf007 发表于 2017-8-6 23:08
你们的例程没有问题,主要是因为我想学习怎么用CUBEMX生成代码使用LCD,但是出现了上面的情况。不过现在 ...

得看具体源码了
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-20 09:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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