完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
战舰跑ucos+ucgui+lwip系统内部RAM不够,想用外部RAM
其中液晶屏是原子历程FSMC驱动方式,会不会扩展的时候受影响? 我想除了原子那种动态分配内存的方法外还有没有其他方法,找了好多方法都不成功,有没有具体的步骤? |
|
相关推荐
8个回答
|
|
尽量裁剪不必要的功能吧,减少不必要的内存消耗。
|
|
|
|
我们的不能用吗?
|
|
|
|
能用,但是我想用简单的方法,现在试验成功了,需要改三个地方
1首先在option->target定义好外部RAM地址 2修改启动文件,初始化FSMC 3打开system_stm3210x.c中的外部FSMC宏定义 4首先在左边将文件夹手动分配给内部存储,然后一个一个的试验,有的文件必须定义在内部存储,例如stm32或者ucos内核文件,有的就不需要,例如库函数文件。 现象:正常运行,现在用的7寸电容屏,FSMC同时驱动屏幕和外部RAM,互相不影响。 问题:长时间运行,触摸屏有时候会感应不到触摸,但是各个任务正常运行,我调试发现不能进入触摸的scan函数,然后我在电容触摸中断中如果进入中断点亮led,退出中断关闭led,结果感应不到触摸的时候这个led一闪一闪的。不知道是否跟用外部存贮有关系,还是我程序的问题? |
|
|
|
我翻了翻帖子,需要改三个地方
1首先在option->target定义好外部RAM地址 2修改启动文件,初始化FSMC 3打开system_stm3210x.c中的外部FSMC宏定义 4首先在左边将文件夹手动分配给内部存储,然后一个一个的试验,有的文件必须定义在内部存储,例如stm32或者ucos内核文件,有的就不需要,例如库函数文件。 现象:正常运行,现在用的7寸电容屏,FSMC同时驱动屏幕和外部RAM,互相不影响。 问题:长时间运行,触摸屏有时候会感应不到触摸,但是各个任务正常运行,我调试发现不能进入触摸的scan函数,然后我在电容触摸中断中如果进入中断点亮led,退出中断关闭led,结果感应不到触摸的时候这个led一闪一闪的。以前没外部RAM的时候也碰到过,但是感觉有外部RAM的时候频繁了,不知道是否跟用外部存贮有关系,还是我程序的问题? |
|
|
|
触摸中断函数
//触摸屏中断处理 //在中断中扫描有没有有效触摸产生 void EXTI15_10_IRQHandler(void) { LED0(ON); OSIntEnter(); if(EXTI_GetITStatus(EXTI_Line10)!=RESET) // if(CT_INT==0) //有触摸中断 { tp_dev.tpsta|=0X80;//标记有有效触摸 GUI_TOUCH_Exec(); //GUI_Exec(); } EXTI_ClearITPendingBit(EXTI_Line10); //清除LINE2上的中断标志位 //EXTI->R=1<<10; //清除LINE10上的中断标志位 OSIntExit(); } |
|
|
|
//////////////////////////////////////////////////////////////////////////////////
//电阻屏电容屏共用驱动 //触摸按键扫描 //mode:该参数仅适用于电阻触摸屏;0,屏幕坐标;1,物理坐标(校准等特殊场合用) //返回值:0,没有任何触摸;1,有触摸(正在被触摸). u8 TP_Scan(u8 mode) { u8 buf[34];//一次读取34字节 if(tp_dev.tpsta)//有触摸按下 { GT811_RD_Reg(CTP_READ_XY_REG,buf,34);//一次读取34个字节 tp_dev.tpsta&=0X60;//清除最低5位和最高位 tp_dev.tpsta|=buf[0]&0X1F;//触摸点标记位 if((tp_dev.tpsta&0X1F)==0)return 0;//没有任何触摸有效点 #if CTP_SWAP_XY==1//调转XY tp_dev.y[0]=480-(((u16)buf[2]<<8)+buf[3]);//触摸点0坐标 tp_dev.x[0]=((u16)buf[4]<<8)+buf[5]; tp_dev.ppr[0]=buf[6]; tp_dev.y[1]=480-(((u16)buf[7]<<8)+buf[8]);//触摸点1坐标 tp_dev.x[1]=((u16)buf[9]<<8)+buf[10]; tp_dev.ppr[1]=buf[11]; tp_dev.y[2]=480-(((u16)buf[12]<<8)+buf[13]);//触摸点2坐标 tp_dev.x[2]=((u16)buf[14]<<8)+buf[15]; tp_dev.ppr[2]=buf[16]; tp_dev.y[3]=480-(((u16)buf[17]<<8)+buf[24]);//触摸点3坐标 tp_dev.x[3]=((u16)buf[25]<<8)+buf[26]; tp_dev.ppr[3]=buf[27]; tp_dev.y[4]=480-(((u16)buf[28]<<8)+buf[29]);//触摸点4坐标 tp_dev.x[4]=((u16)buf[30]<<8)+buf[31]; tp_dev.ppr[4]=buf[32]; #else tp_dev.y[0]=((u16)buf[2]<<8)+buf[3];//触摸点0坐标 tp_dev.x[0]=800-(((u16)buf[4]<<8)+buf[5]); tp_dev.ppr[0]=buf[6]; tp_dev.y[1]=((u16)buf[7]<<8)+buf[8];//触摸点1坐标 tp_dev.x[1]=800-(((u16)buf[9]<<8)+buf[10]); tp_dev.ppr[1]=buf[11]; tp_dev.y[2]=((u16)buf[12]<<8)+buf[13];//触摸点2坐标 tp_dev.x[2]=800-(((u16)buf[14]<<8)+buf[15]); tp_dev.ppr[2]=buf[16]; tp_dev.y[3]=((u16)buf[17]<<8)+buf[24];//触摸点3坐标 tp_dev.x[3]=800-(((u16)buf[25]<<8)+buf[26]); tp_dev.ppr[3]=buf[27]; tp_dev.y[4]=((u16)buf[28]<<8)+buf[29];//触摸点4坐标 tp_dev.x[4]=800-(((u16)buf[30]<<8)+buf[31]); tp_dev.ppr[4]=buf[32]; #endif if((tp_dev.tpsta&TP_PRES_DOWN)==0)//之前没有被按下 { tp_dev.tpsta|=TP_PRES_DOWN|TP_CATH_PRES;//按键按下 tp_dev.x0=tp_dev.x[0];//记录第一次按下时的坐标 tp_dev.y0=tp_dev.y[0]; } }else if(tp_dev.tpsta&TP_PRES_DOWN)//之前是被按下的 { tp_dev.tpsta&=~TP_PRES_DOWN;//标记按键松开 } LED0(OFF); return tp_dev.tpsta&TP_PRES_DOWN;//返回当前的触屏状态 } scan函数里面有LED0(OFF); |
|
|
|
有时候屏幕竟然翻转过来,就一个开发板一个电容屏。。
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2550 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2335 浏览 5 评论
3166 浏览 3 评论
2807 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2768 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
620浏览 1评论
863浏览 0评论
981浏览 0评论
632浏览 0评论
458浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 22:26 , Processed in 1.228671 second(s), Total 93, Slave 76 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号