单片机实验
开发基本的嵌入式应用程序
一、 实验目的
读懂main.c 文件中调用的函数,了解uCOS-II 系统的启动过程。学习使用Source
Insight 3.0 C 代码文本编辑器。学会使用API 函数,掌握Uart_Printf 和LCD_printf 函
数的用法。
二、 实验内容
熟悉基于uCOS-II 扩展的嵌入式操作系统的启动和应用程序的结构。阅读main.c 文件
中调用的函数,了解uCOS-II 操作系统系统的启动过程。使用Source Insight 3.0 C 代码文本
编辑器,在操作系统的基础上,编写一段程序,在屏幕上显示“Hello world”等文本。
三、 预备知识
用ARM SDT 2.5 集成开发环境,编写和调试程序的基本过程
四、 实验设备及工具(包括软件调试工具)
硬件:ARM 嵌入式开发板、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentumn100 以
上
软件:PC 机操作系统win98、ARM SDT 2.51 集成开发环境、仿真器驱动程序、Source
Insight 3.0
五、 实验步骤
1、在ARM SDT 2.51 中,打开实验一中创建好的模板,新建一个项目work1。把操作
系统的所需要的头文件(*.h)和库文件(*.alf)加入工程中。
2、启动Source Insight,用菜单Project | New project 新建一个Source Insight 的工程
(work1)。在Project Setting 对话框中使用默认的设置即可。
3、在Add and Remove Files 对话框中单击Add All 按钮。如图2-1 所示,设置弹出的对
话框

4、单击确定按钮,把..\work1\目录下的所有有效的C 源代码文件(包括:*.c 和*.h 文
件)加入Source Insight 的工程中。其结果如图2-2 所示。
5、通过Source Insight 的Files | Open 菜单(或者相应的工具栏按钮),打开main.c 文件,
可以看到,Source Insight 是一个很方便的C代码阅读和编辑工具。把work1 的文件加入Source
Insight 的工程中以后,他会自动分析C 语言的语法,把变量、函数和宏定义都特殊的显示
出来便于阅读。读着可以尝试通过Search 菜单下的命令(或者相应的工具栏按钮)在各个
文件的不同的函数和变量的定义之间跳转。这是Source Insight 的方便之处,很适合于编辑
大型软件。花20 分钟熟悉一下Source Insight,同时阅读main.c 文件的代码。
6、重点分析Main 函数中的代码,了解系统的启动过程。Main 函数的代码如下:
int Main(int argc, char **argv)
{
ARMTargetInit(); // 系统硬件初始化
OSInit(); //初始化操作系统
uHALr_ResetMMU(); //复位MMU
LCD_Init(); //初始化LCD 模块
LCD_printf("LCD initialization is OK\n"); //显示液晶屏信息
LCD_printf("240 x 128 Text Mode\n");
LoadFont();//装载系统字体
LCD_printf("Create task on uCOS-II...\n"); //显示液晶屏信息
//创建系统的任务
OSTaskCreate(Main_Task, (void *)0,
(OS_STK *)&Main_Stack[STACKSIZE*8-1], Main_Task_Prio);
OSTaskCreate(Led_Flash_Task, (void *)0,
(OS_STK *)&Led_Flash_Stack[STACKSIZE-1], Led_Flash_Prio );
OSTaskCreate(Lcd_Fresh_Task, (void *)0,
(OS_STK *)&Lcd_Fresh_Stack[STACKSIZE-1], Lcd_Fresh_prio );
OSTaskCreate(Key_Scan_Task, (void *)0,
(OS_STK *)&Key_Scan_Stack[STACKSIZE-1], Key_Scan_Task_Prio );
LCD_printf("Starting uCOS-II...\n");
LCD_printf("Entering graph mode...\n");
LCD_ChangeMode(DspGraMode);//设置液晶屏显示为图形模式
initOSGUI();//初始化图形用户界面
InitRtc();//初始化系统时钟
LCDFresh_MBox=OSMboxCreate(NULL);//创建LCD 刷新邮箱
Lcd_Disp_Sem=OSSemCreate(1);//创建LCD 缓冲区控制权旗语,初值为1 满足互斥条件
Nand_Rw_Sem=OSSemCreate(1); //创建Nand-Flash 读写控制权旗语,初值为1 满足互斥条件
ARMTargetStart(); //启动操作系统的硬件定时器等中断
OSStart(); // 启动操作系统
//程序不会运行至此
return 0;
}//main end
7、系统启动的时候创建了4 个系统任务,其中Main_Task 为系统的主任务,用户的应
用程序就是从Main_Task 任务开始的。其代码如下:
void Main_Task(void *Id) //Main_Test_Task
{
POSMSG pMsg=0;
ClearScreen();//清除屏幕
for(;;)
OSTimeDly(1000);
//消息循环
/* for(;;){
pMsg=WaitMessage(0);
switch(pMsg->Message){
case OSM_KEY:
onKey(pMsg->WParam,pMsg->LParam);
break;
}
DeleteMessage(pMsg);
}*/
}
通常多操作系统中的任务是一个无限循环,同样,Main_Task 也要陷入一个无限循环。
因为uCOS-II 是占先式多任务操作系统,如果没有比Main_Task 任务更高优先级的任务
进入就绪状态,Main_Task 任务是不会放弃CPU 的控制权的。通过调用OSTimeDly(INT16U
ticks)函数,可以使操作系统进行一次任务调度,并且执行下一个优先级最高的就绪状态的
任务。参数Ticks 表示任务延时的节拍数,一旦规定的时间期满,该任务马上又会重新进入
就绪状态。
分析上述上面代码中OSTimeDly(1000)的作用。
8、为在液晶屏幕和终端(串行口)上输出字符串(比如:Hello world!)编写程序。可
以分别使用LCD_printf()和Uart_Printf()函数。
提示:因为操作系统默认的液晶显示模式是图形状态,必须通过LCD_ChangeMode 函
数设置液晶显示为文本模式。建议在显示自己的文本的时候先调用LCD_Cls()函数清除屏
幕。
9、编译并下载程序,调试程序。
10、运行windows 系统下的超级终端(HyperTerminal)应用程序,如图2-3 所示新建一
个终端通讯,取名为arm。单击确定按钮。

11、选择终端的连接的串口(比如:串行口1),如图2-4 所示,设置通讯的格式和协议。
12、设置完成超级终端以后,就可和嵌入式开发板建立通讯,如图2-5 所示。
13、生成发行版本的system.bin 文件。按嵌入式开发板系统的复位按钮,使系统通过
BIOS 引导,同时,按住键盘的任意按键,这时。如图2-6 所示,系统将进入BIOS 设置程序。

14、通过PC 机键盘可以和嵌入式开发板通讯。按照终端的提示,在PC 键盘上键入R
(或者r)将激活嵌入式开发板上的USB。这时,可使用PC 端的软件来读写嵌入式开发板
上中的文件。把生成的system.bin 文件通过USB 下载到嵌入式开发板中,复位系统,运行
并检查输出结果。
提示:system.bin 文件是系统通过BIOS 引导以后,装入内存中运行的默认文件名。
全部0条评论
快来发表一下你的评论吧 !