新手上路
- 积分
- 44
- 金钱
- 44
- 注册时间
- 2017-2-1
- 在线时间
- 8 小时
|
10金钱
本帖最后由 奥特曼打小怪兽 于 2018-10-20 11:40 编辑
用STemwin做一个小飞机姿态仪,使用的是原子阿波罗F429开发板,UCOSIII+STemwin _ShowAttitudeIndicator(&Context)中主要的流程如下:
1. pContext->hMemMask=GUI_MEMDEV_CreateFixed(); //创建Mask存储设备句柄 ( 形状接近为椭圆)
2. pContext->hMemScale=GUI_MEMDEV_CreateFixed();//创建Scale存储设备句柄 使用emwin的存储设备API画出:天空 ,地面 ,俯仰角度的刻度尺 (形状为 大矩形)
3. GUI_MEMDEV_RotateHQHR(pContext->hMemScale, pContext->hMemWork, mx + dx, my + dy, pContext->Roll, 1000); //根据姿态信息roll和pitch对 hMemScale进行旋转和上下平移得到存储设备句柄pContext->hMemWork
4. GUI_MEMDEV_PunchOutDevice(pContext->hMemWork, pContext->hMemMask); //使用Mask句柄对hMemScale句柄进行屏蔽,即只显示矩形中的椭圆覆盖区域
5. GUI_MEMDEV_Select(0); //选择屏幕
GUI_MEMDEV_Write(pContext->hMemWork); //将存储设备句柄hMemWork的内容显示出来
在UCOSIII的姿态显示任务中
while(1) {
Context.Pitch +=10*1000;
if(Context.Pitch >60000)Context.Pitch = -60000;
Context.Roll+=10*1000;
if(Context.Roll>60000)Context.Roll = -60000;
GUI_MULTIBUF_Begin();
_ShowAttitudeIndicator(&Context); //此处为显示调用函数
GUI_MULTIBUF_End();
OSTimeDlyHMSM(0,0,0,1,OS_OPT_TIME_PERIODIC,&err); //延时1ms
}
内存使用的是外部SDRAM,
现在问题来了,显示姿态时的图片刷新特别慢,拉窗帘似的,大概一秒刷完。
矩形单色填充有DMA2D加速刷屏测试达到30.8M Pixels/s ,但是这只是单色填充。
JLINK调试发现函数GUI_MEMDEV_RotateHQHR();执行较慢,当执行GUI_MEMDEV_Write(pContext->hMemWork); 后开始刷姿态显示图片,一秒才刷完一帧,
想使用DMA2D来加速显示,但是STemwin不开源,不知道存储设备句柄是不是图片地址指针。
|
-
|