码迷,mamicode.com
首页 > 其他好文 > 详细

RT-thread学习笔记(一)

时间:2015-07-20 15:52:59      阅读:740      评论:0      收藏:0      [点我收藏+]

标签:

我的基础:能在现有C程序下做些修改,不会移植,不会写驱动,很难从头到尾自己写程序。

RT-thread基础:之前看了一点rtthread_manual.zh.pdf(即RT-thread使用手册),发现挺难看懂的,只了解了一些基础知识,比如线程调度大概的意思。决定还是直接看程序吧,又不懂的再回去看手册。

1.使用的是RT-thread1.2.1版本,打开程序发现工程目录下有很多组,先不去管它,直接看Applications组,里面有两个.c文件,分别是application.c和startup.c。

初步判断startup.c的作用是系统的初始化和启动,而application.c的作用是实现用户具体的功能要求

2.进入startup.c文件,包含三个头文件,两个子函数和一个main函数。

int main(void)
{
/* disable interrupt first */
rt_hw_interrupt_disable();

/* startup RT-Thread RTOS */
rtthread_startup();

return 0;
}

3.关于rt_hw_interrupt_disable();

F12 rt_hw_interrupt_disable();追踪不过去,于是用find in files追踪到context_rvds.S文件有这么一段

;/*
; * rt_base_t rt_hw_interrupt_disable();
; */
rt_hw_interrupt_disable PROC
EXPORT rt_hw_interrupt_disable
MRS r0, PRIMASK
CPSID I
BX LR
ENDP

经查①PROC和ENDP是一起使用过的,表示一段子程序。

      ②EXPORT ,表示本程序里面用到的变量提供给其他模块调用的。IMPORT ,定义表示这是一个外部变量的标号,不是在本程序定义的。

      ③MRS:Move to Register from State register 将状态寄存器的内容传送至通用寄存器。MSR:Move to State register from Register将通用寄存器的内容传送至状态寄存器。

      ④"cpsid i"对于Cortex-M3来说是关闭中断的汇编指令,可以看看《Cortex-m3权威指南》

       技术分享

       ⑤bx lr的作用等同于mov  pc,lr  即跳转到lr中存放的地址处。那么lr存放的是什么地址呢?lr就是连接寄存器(Link Register, LR),在ARM体系结构中LR的特殊用途有两种:一是用来保存子程序返回地址;二是当异常发生时,LR中保存的值等于异常发生时PC的值减4(或者减2),因此在各种异常模式下可以根据LR的值返回到异常发生前的相应位置继续执行。当通过BL或BLX指令调用子程序时,硬件自动将子程序返回地址保存在R14寄存器中。在子程序返回时,把LR的值复制到程序计数器PC即可实现子程序返回。

总而言之,rt_hw_interrupt_disable();就是关全局中断用的,可以不去深究。至于为什么要在程序一开始就关全局中断呢,是因为想先初始化完成,初始化都没完成就引起中断可能会造成错误,姑且这么想。

2015-07-20

RT-thread学习笔记(一)

标签:

原文地址:http://www.cnblogs.com/xye2015/p/4661411.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!