- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式Linux填充圆算法
《嵌入式Linux软件设计》
课程设计报告
-----------填充圆算法设计
姓名
学号
班级
题目
成绩
评语
日期
项目名称
设计圆的两种以上填充算法,并比较其在ARM Linux的执行速度
项目需求分析
在实验箱的LCD(Linux framebuffer设备)上完成圆或椭圆的两种以上填充算法,比较他们的填充效果和填充速度。本实验计划完成圆的两种填充算法,分别用点和线的方式填充半径相等的两个圆,并进行比较。
项目分工
本次课程设计为一人完成。
概要设计
在ARM机上执行填充圆算法,需要在软硬件方面协调工作方可。
一、硬件
保证虚拟机和ARM机的通信,本次实验采用串口通信方式;
本实验要在LCD上画圆,所以需要使用到帧缓冲设备(Framebuffer)。
二、软件
所编写的填充圆算法必须可执行的,能够得出正确结果的。可利用交叉编译工具在宿主机上开发在目标板上运行的软件,即在Linux下先编写主函数然后编译连接成ARM可运行的二进制文件,最后把该二进制文件下载到超级终端上运行。
Ubuntu虚拟机
GUN交叉编译
ARM9超级终端
预处理
汇编
编译
链接
.C源程序
运行
预处理器 编译器 汇编器 连接器 可执行文件
软硬件流程图如图所示
GUN交叉编译工具链:
arm-linux-gcc 编译C程序(.c)或汇编程序(.s)
使用交叉编译工具编译一个程序的arm可执行程序:
#arm-linux-gcc -Wall -o *** +++.c(+++.c为已编译好的c程序,***为生成的arm程序的名字)
-c:只编译不链接,-o:编译且链接,-Wall:显示出错信息
gcc的使用格式如下:$ gcc [options][filenames]
其中filenames为所要编译的程序源文件。
当使用gcc时,gcc会完成预处理、编译、汇编和连接。前三步分别生成目标文件,连接时,把生成的目标文件链接成可执行文件。 gcc可以针对支持不同的源程序文件进行不同处理,文件格式以文件的后缀来识别。
详细设计
在本次实验中我采用了两种填充圆算法。
第一种算法:
以(x-Rx)2+(y-Ry)2≤R2为判断准则对LCD屏幕上的每一个点进行其相对圆心的距离是否小于圆的半径进行判断,若小于等于则进行填充,反之,则不进行动作。
以一个16*16的网格为底板分别画一个半???为5和为6的圆,则填充效果如下图所示,则其圆的边界会随着半径的增大而变得更加光滑。
半径为5 半径为6
(圆心未填充只是为了更清楚的标识)
第二种算法:
以|x-Rx2+y-Ry2-R2|为判断准则判断边界点,取该绝对值最小的点为直线一端端点端点,并以此取得另一个端点,从而画以此两点为端点的直线。最终将整个圆完成。
以一个16*16的网格为底板分别画一个半径为5的圆,填充过程如下:
(圆心未填充只是为了更清楚的标识)
流程图
main函数
hanshu函数
打开Framebuffer设备
对LCD进行检测,证明其屏幕显示正常工作,无坏点
进行第一种填充圆算法
进行第二种填充圆算法
关闭Framebuffer设备
退出程序
关键代码
第一种填充算法:r=100;x0=450;y0=240;
for(y=y0-r;y=y0+r;y++)
//取与该圆相切的正方形为目标点范围,从而缩小计算范围
{
for(x=x0-r;x=x0+r;x++)
{
if(((x-x0)*(x-x0)+(y-y0)*(y-y0))=r*r)
{
*(fbp + y * 640*2 + x*2) = 0x00;
*(fbp + y * 640*2 + x*2 +1) = 0xF8;
}
else{}
}
}
第二种算法
void drawcircle(unsigned int x0,unsigned int y0,unsigned int radius,unsigned int c)
{
unsigned int x,y,y1=0;
int s0,s1,s2;
//int i=0;
x=x0+radius+1;
y=y0;
do
{
s0=abs((x-x0-1)*(x-x0-1)+(y-y0)*(y-y0
您可能关注的文档
最近下载
- 2025吉林省国资委监管企业招聘第一轮线上笔试历年参考题库附带答案详解.docx VIP
- 2025行政许可法知识题库及答案.docx VIP
- GB_T24131.1-2018生橡胶挥发分含量的测定第1部分:热辊法和烘箱法.pdf
- 2025年公安机关执法勤务职位面向社会招录人民警察专业科目.doc VIP
- 建筑工程结算标准操作手册.docx VIP
- 化工园区安全风险智能化管控平台建设方案.docx VIP
- 2025吉林省国资委监管企业招聘第一轮线上笔试历年参考题库附带答案详解.docx VIP
- 中山眼科中心眼科学考博试题.pdf VIP
- 武汉回盛生物科技股份有限公司招聘简章.doc VIP
- 2025吉林省国资委监管企业招聘第一轮线上笔试历年参考题库附带答案详解(10卷合集).docx VIP
原创力文档


文档评论(0)