嵌入式论文.docx
- 文档编号:16513540
- 上传时间:2023-07-14
- 格式:DOCX
- 页数:14
- 大小:162.52KB
嵌入式论文.docx
《嵌入式论文.docx》由会员分享,可在线阅读,更多相关《嵌入式论文.docx(14页珍藏版)》请在冰点文库上搜索。
嵌入式论文
嵌入式论文
1设计内容
1.1ARM的串行口实验
1.2ARM的A/D接口实验
1.3UCOS编程实验基础--消息循环
1.4综合实验
2设计目的与要求
嵌入式操作系统实践是在完成《嵌入式操作系统》理论课程学习之后安排的综合实践训练,在学生掌握嵌入式操作系统原理及基本应用的基础上,通过一周的综合实践,提高学生对所学知识的应用能力。
3设计环境或器材、原理与说明
LPC2119FB064+ucosII系统
4设计过程(步骤)、程序代码、结果分析以及遇到的问题和解决方法
4.1ARM的串行口实验
4.1.1实验设计步骤
(1)打开一工程和文件,先点击Project内的RemoveObjectCode,作用是清除之前的程序记录,运行make文件后保存;
(2)打开虚拟机,在虚拟机上设置串口地址,使串口地址一致;
(3)打开UP-techpxa270-s机,并在机器上将管口接在1、2端口位置,以便烧写;
(4)打开LPC2000芯片,在文件名一栏中,选中工程里运行完后的文件地址,并将串口地址设置成和虚拟机的地址一致,点击ReadDeviceID读取文件,待读取文件成功后再点击UploadtoFlash进行烧写。
(5)待提示的烧写成功后,再将LPC2000芯片的串口地址改成COM2,然后关掉机子,再重新启动UP-techpxa270-s机,切勿忘记要把管口改接在2、3端口位置,以便运行;
(6)打开程序带有的sscom32.exe软件,检查串口是否一致,然后输入数据点击发送即可将数据显示在上面的显示屏中,即完成实验。
(7)根据实验要求,更改main中的程序代码,实现自己想要的实验效果,然后清空工程文件中之前的记录,然后重复实验步骤
(1)~(6),即可。
4.1.2实验程序
原输入一次输出一次的程序代码:
voidMain_Task(void*Id)
{inti=0;
intj=0;
floatd;
staticU8tmp[1];
OpenUartRev(0);
printf("runMaintask\n");
printf("hello^_^\n");
for(;;){
OSReadUart(0,tmp,sizeof(tmp),0);
OSWriteUart(0,tmp,sizeof(tmp),0);
//for(i=0;i //putchar(tmp[i]);} } 更改成输入一次输出两次后的程序代码: voidMain_Task(void*Id) { inti=0; intj=0; floatd; staticU8tmp[1]; OpenUartRev(0); printf("runMaintask\n"); printf("hello^_^\n"); for(;;){ OSReadUart(0,tmp,sizeof(tmp),0); OSWriteUart(0,tmp,sizeof(tmp),0); for(i=0;i putchar(tmp[i]); } } 4.1.3实验结果截图 原实验输入一次输出一次: 实验更改成输入一次,输出两次: 4.1.4实验遇到的问题即解决方法 烧写一致不成功,检查发现是串口连接问题,即虚拟机的串口和UP-techpxa270-s没有都接COM1。 4.2ARM的A/D接口实验 4.2.1实验设计步骤 (1)打开一工程和文件,先点击Project内的RemoveObjectCode,作用是清除之前的程序记录,运行make文件后保存; (2)打开虚拟机,在虚拟机上设置串口地址,使串口地址一致; (3)打开UP-techpxa270-s机,并在机器上将管口接在1、2端口位置,以便烧写; (4)打开LPC2000芯片,在文件名一栏中,选中工程里运行完后的文件地址,并将串口地址设置成和虚拟机的地址一致,点击ReadDeviceID读取文件,待读取文件成功后再点击UploadtoFlash进行烧写。 (5)待提示的烧写成功后,再将LPC2000芯片的串口地址改成COM2,然后关掉机子,再重新启动UP-techpxa270-s机,切勿忘记要把管口改接在2、3端口位置,以便运行; (6)打开程序带有的sscom32.exe软件,检查串口是否一致,然后输入数据点击发送即可将数据显示在上面的显示屏中,即完成实验。 (7)根据实验要求,更改main中的程序代码,实现自己想要的实验效果,然后清空工程文件中之前的记录,然后重复实验步骤 (1)~(6),即可。 4.2.2实验程序 原实验源程序: init_ADdevice();while (1){ for(i=0;i<2;i++){//采样0~3路A/D值 d=GetADresult(i)*3.3/1023.0;//数据采集,处理 //Uart_Printf("a%d=%f\t",i,d); printf("a%d=%f\t",i,d);//Delay(1000); OSTimeDly(10);}//Uart_Printf("\r"); printf("\r");} return0;} 更改后的实验程序: init_ADdevice(); while (1){ for(i=0;i<4;i++){//采样0~3路A/D值 d=GetADresult(i)*3.3/1023.0;//数据采集,处理 //Uart_Printf("a%d=%f\t",i,d); printf("a%d=%f\t",i,d);//Delay(1000); OSTimeDly(400);}//Uart_Printf("\r"); printf("\r");} return0;} 4.2.3实验结果截图 原实验结果截图: 更改延时后的实验结果截图: 4.2.4实验遇到的问题即解决方法 主要是程序的更改问题,刚开始更改延时程序时改错位置,以至于实验运行失败,最后终于找对了更改的地方并成功更改、运行。 4.3UCOS编程实验基础--消息循环 4.3.1实验设计步骤 (1)打开一工程和文件,先点击Project内的RemoveObjectCode,作用是清除之前的程序记录,更改并运行main文件后保存; (2)打开虚拟机,在虚拟机上设置串口地址,使串口地址一致; (3)打开UP-techpxa270-s机,并在机器上将管口接在1、2端口位置,以便烧写; (4)打开LPC2000芯片,在文件名一栏中,选中工程里运行完后的文件地址,并将串口地址设置成和虚拟机的地址一致,点击ReadDeviceID读取文件,待读取文件成功后再点击UploadtoFlash进行烧写。 (5)待提示的烧写成功后,再将LPC2000芯片的串口地址改成COM2,然后关掉机子,再重新启动UP-techpxa270-s机,切勿忘记要把管口改接在2、3端口位置,以便运行; (6)打开程序带有的sscom32.exe软件,检查串口是否一致,然后输入数据点击发送即可将数据显示在上面的显示屏中,即完成实验。 4.3.2实验程序 原实验源程序: for(;;) { pMsg=GetMessage(task1_tmq); switch(pMsg->message) { caseTM_KEY: printf("TM_KEY");break; caseTM_UART0RCV: printf("TM_UART0RCV"); break; default: break; } }//endofswitch(pMsg->message) } 4.3.3实验结果截图 更改后的实验结果截图: 4.3.4实验遇到的问题即解决方法 刚开始不知道printf与printk实现的效果是差不多的,所以,在这一步琢磨了好久,最后问老师才知道结果。 实验就改下输入的值即可。 4.4综合实验 系统从串口接收数据,并把它通过消息队列发送给处理任务。 处理任务还要接收A/D转换器发来的消息。 处理任务判断消息内容,再把相应的响应信息通过消息队列发送串口发送任务发回串口。 4.4.1实验设计步骤 (1)打开一工程和文件,先点击Project内的RemoveObjectCode,作用是清除之前的程序记录,将A/D接口和串口的ADCcovert.c和ADCcovert.h文件程序加入到消息循环的lpc21xx--ucos.mcp里面的程序文件夹,再在main程序里更改下实验程序,最后运行make文件后保存; (2)打开虚拟机,在虚拟机上设置串口地址,使串口地址一致; (3)打开UP-techpxa270-s机,并在机器上将管口接在1、2端口位置,以便烧写; (4)打开LPC2000芯片,在文件名一栏中,选中工程里运行完后的文件地址,并将串口地址设置成和虚拟机的地址一致,点击ReadDeviceID读取文件,待读取文件成功后再点击UploadtoFlash进行烧写。 (5)待提示的烧写成功后,再将LPC2000芯片的串口地址改成COM2,然后关掉机子,再重新启动UP-techpxa270-s机,切勿忘记要把管口改接在2、3端口位置,以便运行; (6)打开程序带有的sscom32.exe软件,检查串口是否一致,然后输入数据点击发送即可将数据显示在上面的显示屏中,即完成实验。 (7)根据实验要求,更改main中的程序代码,实现自己想要的实验效果,然后清空工程文件中之前的记录,然后重复实验步骤 (1)~(6),即可。 4.4.2实验程序 更改后实现的实验源程序: for(;;){ pMsg=GetMessage(task1_tmq); switch(pMsg->message){ caseTM_KEY: printf("TM_KEY");break; caseTM_UART0RCV: printf("TM_UART0RCV");break; default: break; }//endofswitch(pMsg->message) }} voidMain_Task(void*Id){ #defineNUM_OF_LED8 intled_pin[NUM_OF_LED]={16,17,18,19,20,21,22,23}; inti; MSG*pMsg; printf("runMaintask\n"); printf("hello^_^\n");//设置各GPIO口方向为输出 for(i=0;i IO1DIR=IO1DIR|(0x1< IO1SET=IO1SET|(0x1< //设置蜂呜器的GPIO口方向为输出 IO1DIR=IO1DIR|(0x1<<25); //选择管脚P0.16为EINT0 //IO0DIR=(PINSEL1&~(0x3))|(0x1); OSTaskCreate(Uart0_Task,(void*)0,(OS_STK*)&Uart0_Stack[STACKSIZE-1],Uart0_Task_Prio); OSTaskCreate(ExtKey_Task,(void*)0,(OS_STK*)&ExtKey_Stack[STACKSIZE-1],ExtKey_Task_Prio); OSTaskCreate(ad_Task,(void*)0,(OS_STK*)&ad_Stack[STACKSIZE*2-1],ad_Task_Prio); for(;;){ pMsg=GetMessage(task1_tmq); switch(pMsg->message){ caseTM_KEY: //按键消息处理,蜂? printf("\nTM_KEY"); /*IO1SET=IO1SET|(0x1<<25); OSTimeDly(OS_TICKS_PER_SEC/5); IO1CLR=IO1CLR|(0x1<<25); OSTimeDly(OS_TICKS_PER_SEC/5);break; caseTM_UART0RCV: //UART0接收消息处理 {staticU8tmp[1]; OpenUartRev(0); for(;;){ OSReadUart(0,tmp,sizeof(tmp),0); printf("\nTM_UART0RCV: "); OSWriteUart(0,tmp,sizeof(tmp),0); /*for(i=0;i putchar(tmp[i]);*/ } /*for(i=0;i intj=(i==0)? 7: i-1; IO1SET=IO1SET|(0x1< IO1CLR=IO1CLR|(0x1< mdelay(20);} break;} default: break; }//endofswitch(pMsg->message) }} 4.4.3实验结果截图 更改后的实验结果截图: 4.4.4实验遇到的问题即解决方法 程序的更改难度比较大,将原来的A/D接口和串口的主要实验程序加入到消息队列循环里,然后在消息队列里更改部分实验程序,再度程序进行优化即可。 5设计体会与建议 初次接触LPC2000芯片,很多不是很熟悉,还好以前有学过烧写,多少有一点基础,所以这次的课程设计会相对容易。 遇到的困难就是消息循环队列的实验设计会比较陌生,最后的综合实验是前三个实验的综合,所以难度相对比较大,具体的实验过程比较繁琐。 主要是将之前的程序代码添加到第10个实验的部分文件夹里,然后再对原mmain函数里的代码更改下指针指向的位置即可。 遇到的困难是刚开始着手写的时候,思路不是很清晰,不明白老师的要求,到最后明白了设计要求方完成实验。 平时不常用UP-techpxa270-s机器,所以在实验之前还要熟悉下机器的一些基本性能,比如了解1、2管口是烧写,2、3管口是运行。 6、参考文献 1.《嵌入式操作系统μc/os_II》 2.《270-Sucos实验指导书》 3.《up-techpxa270-sucos实验烧写说明》 指导教师 评语 课程设计 成绩 指导教师签字 年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 论文