请问使用emwin显示字符有黑点是什么原因?

2019-07-14 16:23发布

最近在捣鼓 emwin v5.28 OS 的,目前基本能够显示出 字符,但是显示的字符有黑点,

这个显示有黑点是在 rtc 的显示里面,如果初始化后就显示貌似没有,这种情况是神马问题造成的啊 ??

图片1 没有在rtc任务里显示出来的字符效果,还行





下面的图片是在rtc 任务里面显示的,有黑点或者黑条













U8 * aMemory ;   // 数据类型 使用 u32,u8 结果都是一样的
   aMemory =  ((U8 *) (0x68000000));     // 1  这样可以
aMemory =  ((U8 *) (0x68008000));     // 2  这样就不行【或为其他任意一个数值,比如,0x68180000, 0x68001000 等显示都会有黑点或者黑条】,显示就会出现黑点或者黑条的情况, 为什么啊 ???

外部的sram 是 2MByte的,应该最大是可以 到 1024*1024*2 = 0x20 0000 + 0x68000000 = 0x6820 0000,上面的使用应该是没有超出范围的吧 ???

   aMemory =  ((U8 *) (0x68100000));     //  地址从 0x6810 0000 开始,这样的也可以了【显示完全没有问题】。把外部sram 最后 1MByte 分配给emwin 使
用【前面的1MBye 留着解码图片音频等使用】,这是为什么啊 ?????
   GUI_ALLOC_AssignMemory( (void*) aMemory,  512*1024UL);   //此处的字节数最大只能够为 512x1024,不是说是按照字节算的嘛,怎么只能是512x1024,不能够 1024x1024 ????

   GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);                //设置存储快的平均尺寸,该区越大,可用的存储快数量越少


emwin 底层显示函数

/*********************************************************************
*
*       Local functions
*
**********************************************************************
*/

static void LcdWriteReg(U16 Data) {

   FMC_LCD->REG = Data;
}

static void LcdWriteData(U16 Data) {
   FMC_LCD->RAM = Data;
}

static void LcdWriteDataMultiple(U16 * pData, int NumItems) {
   while (NumItems--) {
     FMC_LCD->RAM = *pData++;
   }
}

static void LcdReadDataMultiple(U16 * pData, int NumItems) {
   while (NumItems--) {
     *pData++ = FMC_LCD->RAM ;
   }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
tianyou15
1楼-- · 2019-07-14 22:42
帮顶一下
ctwewer
2楼-- · 2019-07-15 00:05
原因应该不在显示驱动部分和存储器分配吧,而是RTC的频繁中断和LCD刷新冲突所致。您至少应该控制RTC需要秒更新时才进入1次RTC中断。
dull20112011
3楼-- · 2019-07-15 00:24
是不是两个任务同时去刷同一个地方了?
dsufwesd
4楼-- · 2019-07-15 01:36
 精彩回答 2  元偷偷看……
fantasyo老时光
5楼-- · 2019-07-15 03:53
可能原因:
1,驱动LCD的时序不对
2,驱动SDRAM的时序有误
cyhe
6楼-- · 2019-07-15 08:15
路过一下

一周热门 更多>