![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
RTEMS 内核代码分析
coolbacon
这个作者很懒,什么都没留下…
展开
-
RTEMS 4.9.4 代码分析 序
<br />从我开始接触 RTEMS 开始起,已经快有两年了。两年几乎将RTEMS核心源代码看了个遍,但有些地方总觉得理解的不透彻。所以干脆把自己写的代码分析贴出来,让广大爱好RTEMS的朋友批评指正。<br /> <br />我只对ARM和x86的CPU稍微熟悉些,x86一般不是嵌入式的首选,一般都是选ARM,RTEMS4.9.4目前是OAR官方RELEASE的最高版本。我就分析RTEMS4.9.4的代码,以CSB337, at91rm9200的单板cpu作为蓝本分析。抛砖引玉,有道是,有碰撞才有火花,有原创 2010-12-29 23:29:00 · 3653 阅读 · 1 评论 -
RTEMS on AT91SAM9260 板级调试后记
这篇文章仅仅是为了进一步告诉大家如何使用jlink 调试rtems on AT91sam9260系统。我的系统配置首先对大家说一下,我是在winxp上装了个vmware,vmware里跑得是linux fedora 8, linux 的IP地址是 192.168.18.128原创 2011-09-20 23:06:50 · 4180 阅读 · 2 评论 -
回答Keyword1983朋友关于RTEMS网络 rtems_xxxx_attach 参数问题
Keyword1983 朋友在8月2日,在RTEMS 4.9.5:QEMU MINI2440 BSP 中的网络驱动开发(上)回复:“您好 我有問題想請問 您的int rtems_dm9000_attach 帶了兩個參數 一個是struct rtems_bsdnet_ifc原创 2011-08-13 21:47:02 · 2318 阅读 · 3 评论 -
RTEMS网络内部的同步
首先感谢keyword1983 童鞋,感谢看出了文章RTEMS 4.9.5:QEMU MINI2440 BSP 中的网络驱动开发(下)文章中的错误。关于RTEMS中的网络同步问题,一直是纠结我的一个大问题。以太网的协议栈的代码庞大复杂,很难剥茧抽丝,获得精髓。加之本人愚钝,工作繁原创 2011-07-16 16:44:31 · 3799 阅读 · 2 评论 -
小议操作系统里的锁
(原创文章,欢迎转载,请注明出处)操作系统内的同步系统,都是使用原子操作实现的。原子操作又是如何实现的呢?一般的操作系统书都是写使用二值信号量实现的。这个是重要的理论依据,但并不能指导实践。因为,二值信号量其实就是对一个标志位置位,当然,在置位前必须测试一下二值信号量。整个信号量的获取过程可以用伪代码描述如下:1. 如果 信号量S 没有被置位 那么 置位信号量S,信号量获取成功;2. 否则,测试次数或时间到了没有,如果没有到则跳转到步骤一继续测试;如果时间或者测试次数到达,则退出信号原创 2011-04-05 23:40:00 · 5430 阅读 · 4 评论 -
RTEMS 4.9.4 中的对象分析
<br />本文系原创,转载请注明出处,谢谢。<br /> <br /> <br />Object_Information是对象信息表的定义,该定义如下:<br /><br /><br /> typedef struct {/*对象信息表的定义*/<br /> Objects_APIs the_api; /*该对象的类型*/<br /> uint16_t the_class; /*该对象集合属于什么样的类型*/<br />原创 2011-03-11 23:37:00 · 3104 阅读 · 0 评论 -
RTEMS 的堆(下)
<br /> <br />堆的核心操作主要有初始化、申请、释放、扩展。由于工作空间(Workspace),是供内核使用的,所以相关函数使用的全部是“_”前缀。主要操作分列如下:<br /> _Heap_Initialize,将指定的内存初始化成堆; _Heap_Allocate,从指定的堆中申请指定字节数的内存; _Heap_Allocate_aligned,从指定的堆中申请指定字节的内存,并且返回的地址还按照指定的对齐要求对齐; _Heap_Free,将指定地址的内存释放到指定的堆中; _Heap_Ext原创 2011-02-25 22:54:00 · 2082 阅读 · 3 评论 -
RTEMS 的堆(上)
<br />对于实时操作系统,好的内存分配算法会使系统的稳定性增色不少。实际使用中,如果用户在代码的使用方法和系统内存管理算法相悖,会引起许多问题,甚至使系统变得不可靠。RTEMS提供了堆(Heap)、工作空间(Workspace)、内存区域(Region)和固定尺寸的内存分配算法(Partition)。RTEMS内核使用的内存从工作空间申请,而用户应用程序使用的内存从堆申请。堆与工作空间使用相同的算法管理内存,故放在一起讨论。内存区域与堆的管理算法类似,略有区别,会和固定尺寸的内存分配算法一起在后续的章节原创 2011-02-25 22:45:00 · 2977 阅读 · 1 评论 -
rtems 开关中断 函数(下)
<br />上回说到,ARM的thumb 指令集下关中断比较复杂,我们细细的讨论一下:<br />由于arm规定,thumb指令集操纵不了cpsr寄存器,所以必须要由thumb指令集切换到arm指令集上。<br />切换代码,由一段gcc 嵌入式的汇编代码完成。<br /> <br />这是从代码中截取出来的关键的切换代码,我用红色字做一下注释:<br /> <br /> <br />#define str(x) #x /*将x展开成字符串,str(abc)原创 2011-01-22 00:07:00 · 2817 阅读 · 1 评论 -
rtems 开关中断 函数(上)
RTEMS 中开关中断的函数:rtems_interrupt_disable()rtems_interrupt_enable()rtems_interrupt_flash()这三个函数都是宏:/*关闭中断*/#define rtems_interrupt_disable( _isr_cookie ) / _ISR_Disable(_isr_cookie)/*打开中断*/#define rtems_interrupt_enable( _isr_cookie ) / _ISR_Enabl原创 2011-01-14 00:32:00 · 3234 阅读 · 1 评论 -
RTEMS 4.9.4 csb337 bsp 的 start.S 分析
<br />启动代码是应用程序中最先被执行的代码,初始化处理器和单板,使之可以执行接下来的~BSP~代码。<br />启动代码一般都是由汇编语言写成。为了使~C~语言多做一些初始化工作,并使整个初始化代码变得更易维护,<br />应尽量减少汇编语言的使用,只做一些必要的工作。<br />这些工作包括:<br /><br /><br />1 禁用所有可屏蔽中断;<br />2 用~0~填充未初始化数据段~.bss;<br />3 初始化~C~程序调用栈;<br />4 从~ROM~原创 2010-12-29 23:21:00 · 3650 阅读 · 1 评论 -
RTEMS 4.9.4 bootcard.c 中的 boot_card 函数分析
<br />RTEMS 4.9.4<br /> <br /> <br /><br />进入 boot_card 函数即开始全面的初始化。<br />boot_card函数是~RTEMS~提供的一个通用初始化框架,不论在何种处理器上,都是使用这个框架为系统做初始化的工作。<br />它最大程度上复用了代码,也保证了所有的初始化动作尽可能用~C~语言撰写。它完成的工作按顺序罗列如下:<br />初始化执行环境,主要是关闭中断并处理~boot_card~函数的参数;如果定义宏~BSP_BOOTCARD_H原创 2010-12-30 08:50:00 · 3326 阅读 · 0 评论 -
链表
(本文系原创,欢迎转载,请注明出处,谢谢)链表是操作系统实现中基本的、最重要的数据结构。操作系统中的链表一般都选择双向链表的设计,RTEMS~也不例外。由于面向对象设计思想在~RTEMS~中的运用,使得链表在具体的运用中多了一些变化。链表的控制块和链表节点的定义分列如下: /*链表控制块定义*/ typedef struct { Chain_Node *first;原创 2011-02-08 20:19:00 · 2547 阅读 · 3 评论