1.画圆的程序,与X轴交点不闭合。如下图
检查函数LCDD_DrawCircle();是标准的Bresenham算法。
与群里的“编程浪子”军爷交流过,他将ST的程序跑在这块板子上仍旧出现这种问题。
2.画矩形函数,只有横边没有竖边。如下图
上图是我自己写的程序画出来的矩形,程序如下:
void LCD_Rectangle( uint16_t stX, uint16_t stY, uint16_t endX, uint16_t endY, uint32_t dwColor)
{
// uint32_t i,j;
LCD_Line(stX,stY,stX,endY,dwColor);
LCD_Line(endX,stY,endX,endY,dwColor);
LCD_Line(stX,stY,endX,stY,dwColor);
LCD_Line(stX,endY,endX,endY,dwColor);
}
上边函数调用的画线程序也是我写的,开始以为库文件中画线函数有问题,所以就自己写了一个。该函数能画水平线,和斜率为1或-1的斜线,但是竖直线画不出来。程序如下:
void LCD_Line( uint16_t stX, uint16_t stY, uint16_t endX, uint16_t endY, uint32_t dwColor)
{//只能画水平线,斜率为1或-1的斜线,竖直线有问题
uint32_t i,j;
if( stX<endX )
{
if(stY<endY)
{
for(j=stX,i=stY;j<endX,i<endY;)
{
LCD_WriteRAM_Prepare() ; LCD_WriteRAM( dwColor ) ;
j++,i++;
LCD_SetCursor( j,i ) ;
}
}
else if(stY>endY)
{
for(j=stX,i=stY;j<endX,i>endY;)
{
LCD_WriteRAM_Prepare() ; LCD_WriteRAM( dwColor ) ;
j++,i--;
LCD_SetCursor( j,i ) ;
}
}
else//(stY=endY)
{
for(j=stX;j<endX;)
{
LCD_WriteRAM_Prepare() ; LCD_WriteRAM( dwColor ) ;
j++;
LCD_SetCursor( j,stY ) ;
}
}
}//if( stX<endX )
else if( stX>endX )
{
if(stY<endY)
{
for(j=stX,i=stY;j>endX,i<endY;)
{
LCD_WriteRAM_Prepare() ; LCD_WriteRAM( dwColor ) ;
j--,i++;
LCD_SetCursor( j,i ) ;
}
}
else if (stY>endY)
{
for(j=stX,i=stY;j>endX,i>endY;)
{
LCD_WriteRAM_Prepare() ; LCD_WriteRAM( dwColor ) ;
j--,i--;
LCD_SetCursor( j, i ) ;
}
}
else//(stY=endY)
{
for(j=stX;j<endX;)
{
LCD_WriteRAM_Prepare() ; LCD_WriteRAM( dwColor ) ;
j++;
LCD_SetCursor( j,stY ) ;
}
}
}//else if( stX>endX )
else//(stX=endX)
{
if(stY<endY)
{
for(i=stY;i<endY;)
{
LCD_WriteRAM_Prepare() ; LCD_WriteRAM( dwColor ) ;
i++;
LCD_SetCursor( stX,i ) ;
}
}
else if (stY>endY)
{
for(i=stY;i>endY;)
{
LCD_WriteRAM_Prepare() ; LCD_WriteRAM( dwColor ) ;
i--;
LCD_SetCursor( stX, i ) ;
}
}
}
}
在画斜线的时候会出现中间有虚线的情况,而不是一条均匀斜线,如下图
3.LCD上所显示的字符几乎无法辨认。
猜测,可能是更底层的驱动函数有问题。
当然,这次的任务主要是测试utenux操作系统。
这几天把光盘里的培训讲义从头到尾过了一边。简要概括如下:
一》任务
任务的七种状态,任务的九种管理功能。
任务同步和通信的基本机制:事件标志,信号量,邮箱。
事件标志的六种SVC
信号量的五种SVC
邮箱的五种SVC
任务扩展同步和通信的基本机制:互斥体,消息缓冲区,集合点端口
优先级翻转:优先级继承协议,优先级顶置协议
互斥体的五种SVC
消息缓冲区的五种SVC
集合点端口的五种SVC
二》内存管理
虚拟内存实时性可能降低,虚拟内存管理是通过上层系统扩展实现的。
μT/Kernel不支持虚拟内存,只支持常驻程序。
μT/Kernel只支持1个保护级别,用户应用和系统都在0级上运行。
内存池包括固定尺寸内存池和可变尺寸内存池。
固定尺寸内存池的五种SVC
可变尺寸内存池的五种SVC
三》系统时间管理
相对时间,系统时间,超时的时限
设置系统时间, 获得系统时间, 获得系统工作时间
周期性处理的五种SVC
警报处理的五种SVC
四》中断管理
定义中断处理程序,从中断处理程序中返回,禁止所有外部中断,允许所有外部中断, 获得存放在 intsts 中外部中断禁止的状态
五》系统状态管理
系统状态管理的六种SVC
在接下来的几天开始做实验教程里的实验。
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |