开发基本的嵌入式应用程序

开发基本的嵌入式应用程序
一、 实验目的
读懂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 引导以后,装入内存中运行的默认文件名。

SystemC 的验证方法和流程介绍
联芯发布双核 Cortex A9 1.2GHz 智能终端芯片 LC1810
简述零油冷对改善压燃式发动机有效热效率的评估
关于国巨电容的一般使用性与汽车级别说明
SiC MOSFET替代Si MOSFET,自举电路是否适用?
开发基本的嵌入式应用程序
当红齐天集团携手南瑞信通科技加速“5G+电力”融合发展
转环式电表的原理及设计
区块链技术怎样去保存信息
人类医生与机器人医生的组合,完美地实现了优势互补
电磁干扰是怎么产生的 电磁波干扰的途径有几种
汽车电瓶电量监视器,Battery power monitor
选购智能电视最需要注意的是什么
RFID电子标签大概多少钱 如何挑选RFID标签
充电机的使用方法
企业快速入局智能家居 深智云物联网云平台全线对接天猫精灵
常用的LED光源标准品类型
阿里推出淘宝中文版本《旅行青蛙》
为吸引AI人才 索尼将新员工最高年薪提升至730万日元
微型防身电击器,High-voltage generator