7371|5

92

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

在LM3S8962评估板上玩RT-Thread[连载]-0 [复制链接]

LM3S8962评估板上玩RT-Thread RTOS[连载]

第一节  Hello Led

拿到LM3S8962评估板后第一个感觉是很精致,居然做的这么小,而且功能还这么齐全。对我而言,我很关心软件调试,自然就关注板上是否有串口和JTAG,找了半天,没有发现串口,心想这个可是调试利器啊,怎么能少。后来发现竟是通过USB口转出来了,难怪扳子这么小。此外,仿真调试接口也做在板上了,也就是说,可以直接通过USB口来调试,JLINK也不需要了,只要一根USB线,串口,调试器以及电源供电就都有了,真是方便啊!

感慨完后开始转入正题了。一般来说,开始学习一门新编程语言时,hello world是必须的。那在玩开发板时Hello Led也自然是必不可少的,所以,将RT-Thread RTOS移植到LM3S8962开发板后第一件事情就是玩Hello Led,利用RT-Thread提供的功能让开发板上的Led间隙性的闪烁。为了实现这一功能,做了以下的例程。

例程目录结构:

在总目录rt-thread-0-led下有几个子目录, 0_led下便是Hello Led例程文件,Libraries目录无须多言,是TI提供的固件库,rt-thread目录下则是RT-Thread RTOS的相关源代码,子目录src下是内核源代码,libcpu/arm/lm3s子目录下则是lm3s芯片在RT-Thread上的移植部分。更详细的代码打开附件就可以看到拉。

编译运行:

使用MDK打开examples/0_led目录下的project.Uv2,直接编译就OK了。编译完成后,确保USB线已经正确连接,然后就可以通过MDK工具直接将编译成的文件下载到开发板上,下载完成后按下开发板上的复位键就可以看到LED灯以0.5秒的时间间隔在不停闪烁。

应用代码分析:

/* thread phase init */

void rt_thread_entry_led(void *parameter)

{

    unsigned int count=0;

    while (1)

    {

        rt_kprintf("led on,count : %d\r\n",count);

        count++;

        /* 开启led */

        rt_hw_led_on();

/* 睡眠50OS tick, OS tick时间在rtconfig.h中配置,默认为10ms */

        rt_thread_delay(50); /* sleep 0.5 second and switch to other thread */

        rt_kprintf("led off\r\n");

        /* 关闭led */

        rt_hw_led_off();

/* 睡眠0.5秒 */

        rt_thread_delay(50);

    }

}

int rt_application_init()

{

rt_thread_t init_thread;

/* 创建led闪烁任务 */

init_thread = rt_thread_create("led",

rt_thread_entry_led, RT_NULL,

1024, 21, 20);

/* 启动任务 */

rt_thread_startup(init_thread);

return 0;

}

如上所示,这就是Hello Led应用部分的代码,非常简单,入口地方在application.c文件的rt_application_init函数中,在这个函数中创建了一个动态线程。这个线程的入口在rt_thread_entry_led函数:这个函数是一个简单的while(1)循环,先点亮灯,然后过50OS时钟节拍后熄灭,再过50OS时钟节拍后再点亮。同时,串口也会一直输出led on led off的消息。

系统初始化部分代码分析:

RT-Thread系统的入口是startup.c文件中的main函数;在main函数中,因为默认Keil MDK环境下中断是开启的,所以第一件事是关闭系统总中断。系统的总中断会在第一个线程被调度执行时自动打开(因为机器状态字在栈的初始化时被置上打开中断),main函数中调用真正的RT-Thread系统入口函数:rtthread_startup,这个函数主要分为几个部分:

  * rt_hw_board_init硬件相关的初始化;

  * rt_system_heap_init系统堆初始化,会用于系统的动态内存分配;

  * rt_application_init用户应用初始化;

* rt_system_scheduler_start启动系统调度器。

这就是在RT-Thread上运行的最简单的一个应用!有了这个基础,我们后面就可以继续前进了。

[ 本帖最后由 shaolin 于 2010-10-29 08:58 编辑 ]

在LM3S8962评估板上玩RT-Thread[连载]-0.doc

429.5 KB, 下载次数: 211

文档

rt-thread-0-led.rar

932.27 KB, 下载次数: 324

源代码

最新回复

谢谢楼主!  详情 回复 发表于 2011-10-8 13:27
点赞 关注

回复
举报

928

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 
RT-Thread正学着用。谢谢。
 
个人签名动手创造个性自我

https://home.eeworld.com.cn/?95709
 

回复

273

帖子

0

TA的资源

纯净的硅(中级)

板凳
 
感谢楼主分享!
 
 
 

回复

918

帖子

0

TA的资源

纯净的硅(中级)

4
 

回复 楼主 shaolin 的帖子

没有下文了?
版主要坚持,顶。
 
 
 

回复

43

帖子

0

TA的资源

纯净的硅(初级)

5
 
很好,顶一个!
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(初级)

6
 

谢谢楼主!

谢谢楼主!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表