硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2468|回复: 6
收起左侧

[emWin] 片外flash操作会与emwin窗口冲突吗

[复制链接]

10

主题

8

回帖

38

积分

新手上路

积分
38
发表于 2018-12-12 10:21:58 | 显示全部楼层 |阅读模式
各位好:
      因为保存的需要,现在要使用片外的flash W25Qxx,保存一些全局参数。结果遇到一个奇怪的现象,同一个保存函数,保存位置、大小都不变,只有内容为了测试需要每次累加1,在开机初始化完成,窗口创建之前调用。100%成功,只要创建了窗口,在调用,几乎不会成功,仅有少数时候会莫名其妙的成功一把。因为是同一个函数,我不认为是我函数问题,可能是哪里冲突了,这个flash也只有一个任务会调用,没有冲突的啊,难道会合窗口有冲突?求指点一下,现在毫无头绪。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2018-12-12 10:48:54 | 显示全部楼层
一般这种比较奇怪的问题,原因往往比较简单,查查是不是任务栈小了,先加大任务栈。
回复

使用道具 举报

354

主题

2164

回帖

3231

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3231
发表于 2018-12-12 10:53:00 | 显示全部楼层
理论上不会。 因为spi有clock信号,在跳沿传输数据,传输中可以临时中断一会儿的。 如果你担心spi通讯被打断,可以使用DMA+spi数据,这样就不会受emwin影响。
回复

使用道具 举报

20

主题

121

回帖

181

积分

初级会员

积分
181
发表于 2018-12-12 11:12:41 | 显示全部楼层
写W25Qxx是需要1整个扇区(4K)写入的,看看你的缓冲区4k用的是不是临时数组变量,改为要改为全局变量数组(或者用动态内存)。
回复

使用道具 举报

10

主题

8

回帖

38

积分

新手上路

积分
38
 楼主| 发表于 2018-12-13 09:06:26 | 显示全部楼层
谢谢大家的热心帮助,不过问题还是没有解决,我将变量全部替换为全局变量,任务栈由1024变为4096,结果还是一样。但是测试时发现另外一个规律,我把保存功能固定封装在了任务的循环里,设置了一个触发条件来启动,目的是避免不同位置调用有差别。假设开机我就保存一次,再去操作界面去保存,两次都能成功,如果开机时不保存,直接操作界面去保存,就不成功,这个现象反复验证过了。我认为这进一步说明这个函数本身没什么问题,还是和ucos系统或者emwin那些设置有关,但是毫无头绪,求高人再指点指点。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2018-12-14 02:47:49 | 显示全部楼层
基本可以确定程序是有问题的,你可以在其它任务里面测试SPI Flash否正常,emWin孩子原来的任务里面跑。
回复

使用道具 举报

29

主题

514

回帖

606

积分

金牌会员

积分
606
QQ
发表于 2018-12-17 09:19:39 | 显示全部楼层
我测试过的数据是,emWin 执行WM_PAIN的时候,如果当前刷新的数据越多,资源和时间占用越不可控。
建议特殊繁忙节点,加一个忙状态位,或者互斥锁。这两个我都用上了。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-17 19:48 , Processed in 0.261914 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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