/*
*********************************************************************************************************
* uC/OS-II
* The Real-Time Kernel
* CORE FUNCTIONS
*
* (c) Copyright 1992-2003, Jean J. Labrosse, Weston, FL
* All Rights Reserved
*
* File : OS_CORE.C
* By : Jean J. Labrosse
* Version : V2.76
*********************************************************************************************************
*/
#ifndef OS_MASTER_FILE
#define OS_GLOBALS
#include <ucos_ii.h>
#endif
/*
*********************************************************************************************************
* MAPPING TABLE TO MAP BIT POSITION TO BIT MASK
*
* Note: Index into table is desired bit position, 0..7
* Indexed value corresponds to bit mask
*********************************************************************************************************
*/
INT8U const OSMapTbl[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
/*
*********************************************************************************************************
* PRIORITY RESOLUTION TABLE
*
* Note: Index into table is bit pattern to resolve highest priority
* Indexed value corresponds to highest priority bit position (i.e. 0..7)
*********************************************************************************************************
*/
INT8U const OSUnMapTbl[256] = {
0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x00 to 0x0F */
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x10 to 0x1F */
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x20 to 0x2F */
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x30 to 0x3F */
6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x40 to 0x4F */
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x50 to 0x5F */
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x60 to 0x6F */
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x70 to 0x7F */
7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x80 to 0x8F */
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x90 to 0x9F */
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0xA0 to 0xAF */
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0xB0 to 0xBF */
6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0xC0 to 0xCF */
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0xD0 to 0xDF */
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0xE0 to 0xEF */
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 /* 0xF0 to 0xFF */
};
/*$PAGE*/
/*
*********************************************************************************************************
* FUNCTION PROTOTYPES
*********************************************************************************************************
*/
static void OS_InitEventList(void);
static void OS_InitMisc(void);
static void OS_InitRdyList(void);
static void OS_InitTaskIdle(void);
#if OS_TASK_STAT_EN > 0
static void OS_InitTaskStat(void);
#endif
static void OS_InitTCBList(void);
/*$PAGE*/
/*
*********************************************************************************************************
* GET THE NAME OF A SEMAPHORE, MUTEX, MAILBOX or QUEUE
*
* Description: This function is used to obtain the name assigned to a semaphore, mutex, mailbox or queue.
*
* Arguments : pevent is a pointer to the event group. 'pevent' can point either to a semaphore,
* a mutex, a mailbox or a queue. Where this function is concerned, the actual
* type is irrelevant.
*
* pname is a pointer to an ASCII string that will receive the name of the semaphore,
* mutex, mailbox or queue. The string must be able to hold at least
* OS_EVENT_NAME_SIZE characters.
*
* err is a pointer to an error code that can contain one of the following values:
*
* OS_NO_ERR if the name was copied to 'pname'
* OS_ERR_EVENT_TYPE if 'pevent' is not pointing to the proper event
* control block type.
* OS_ERR_PNAME_NULL You passed a NULL pointer for 'pname'
* OS_ERR_PEVENT_NULL if you passed a NULL pointer for 'pevent'
*
* Returns : The length of the string or 0 if the 'pevent' is a NULL pointer.
*********************************************************************************************************
*/
#if OS_EVENT_EN && (OS_EVENT_NAME_SIZE > 1)
INT8U OSEventNameGet (OS_EVENT *pevent, char *pname, INT8U *err)
{
INT8U len;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
cpu_sr = 0; /* Prevent compiler warning */
#endif
OS_ENTER_CRITICAL();
#if OS_ARG_CHK_EN > 0
if (pevent == (OS_EVENT *)0) { /* Is 'pevent' a NULL pointer? */
OS_EXIT_CRITICAL(); /* Yes */
*err = OS_ERR_PEVENT_NULL;
return (0);
}
if (pname == (char *)0) { /* Is 'pname' a NULL pointer? */
OS_EXIT_CRITICAL(); /* Yes */
*err = OS_ERR_PNAME_NULL;
return (0);
}
#endif
switch (pevent->OSEventType) {
case OS_EVENT_TYPE_SEM:
case OS_EVENT_TYPE_MUTEX:
case OS_EVENT_TYPE_MBOX:
case OS_EVENT_TYPE_Q:
break;
default:
OS_EXIT_CRITICAL();
*err = OS_ERR_EVENT_TYPE;
return (0);
}
len = OS_StrCopy(pname, pevent->OSEventName); /* Copy name from OS_EVENT */
OS_EXIT_CRITICAL();
*err = OS_NO_ERR;
return (len);
}
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* ASSIGN A NAME TO A SEMAPHORE, MUTEX, MAILBOX or QUEUE
*
* Description: This function assigns a name to a semaphore, mutex, mailbox or queue.
*
* Arguments : pevent is a pointer to the event group. 'pevent' can point either to a semaphore,
* a mutex, a mailbox or a queue. Where this function is concerned, it doesn't
* matter the actual type.
*
* pname is a pointer to an ASCII string that will be used as the name of the semaphore,
* mutex, mailbox or queue. The string must be able to hold at least
* OS_EVENT_NAME_SIZE characters.
*
* err is a pointer to an error code that can contain one of the following values:
*
* OS_NO_ERR if the
ARM7开发源代码 for UCOS
需积分: 0 9 浏览量
更新于2008-07-08
收藏 231KB RAR 举报
ARM7是ARM公司设计的一种32位微处理器架构,广泛应用于嵌入式系统设计中,因其低功耗、高性能的特点而备受青睐。UCOS(uC/OS)是一款实时操作系统(RTOS),专为嵌入式系统设计,具有小巧、高效、可移植性强的特性。在"ARM7开发源代码 for UCOS"项目中,我们可以深入学习到如何在基于ARM7的硬件平台上移植和运行UCOS操作系统。
1. **ARM7架构**
- **指令集**:ARM7支持ARM指令集,它包含数据处理、分支、浮点运算等多种指令。
- **工作模式**:ARM7有多种工作模式,如用户模式、系统模式、中断模式等,以适应不同类型的处理需求。
- **Thumb指令集**:为了降低内存需求,ARM7还支持16位的Thumb指令集,提供更紧凑的代码。
- **冯·诺依曼结构**:ARM7采用冯·诺依曼结构,程序和数据存储在同一内存空间内。
2. **UCOS操作系统**
- **任务管理**:UCOS的核心是任务管理,它允许多个并发执行的任务,并通过调度器分配CPU时间片。
- **内存管理**:UCOS提供了动态内存分配和释放机制,以有效地管理和使用系统资源。
- **信号量与互斥量**:用于实现任务间的同步和互斥,防止资源竞争问题。
- **消息队列**:允许任务间通过消息进行通信,提高系统的灵活性和响应速度。
- **定时器服务**:提供周期性和一次性定时任务的实现,常用于事件触发或计时操作。
3. **移植UCOS到ARM7**
- **初始化代码**:移植过程通常从编写启动代码开始,设置堆栈、初始化内存管理等。
- **处理器配置**:根据具体的ARM7芯片,配置中断向量表、寄存器映射等。
- **构建链接脚本**:定义内存布局,如ROM和RAM区域,以及中断向量的位置。
- **适配硬件外设**:编写驱动程序,如串口、GPIO、定时器等,使其与UCOS接口兼容。
- **编译与调试**:使用相应的交叉编译工具链进行编译,并使用仿真器或实际硬件进行调试。
4. **源代码分析**
- **内核源码**:了解UCOS内核如何实现任务调度、内存分配等核心功能。
- **驱动程序**:研究如何针对ARM7平台编写和优化驱动程序,提高性能和稳定性。
- **应用层代码**:学习如何在UCOS上编写应用程序,实现特定功能,如设备控制、网络通信等。
5. **开发环境与工具**
- **IDE**:使用如Keil MDK、IAR Embedded Workbench等嵌入式开发环境。
- **编译器**:通常使用GCC或编译器厂商提供的工具链。
- **调试器**:JTAG或SWD接口的调试工具,如Ozone、ULINK等。
通过深入研究这个"ARM7开发源代码 for UCOS"项目,开发者不仅可以掌握ARM7处理器的使用,还能熟悉嵌入式实时操作系统的设计原理和实践,对于提升嵌入式系统的开发能力具有重要意义。

爬呀爬的水滴
- 粉丝: 504
最新资源
- 数据库实验2:表的创建与管理.docx
- 专起本《工程项目管理》C试卷.doc
- 国家开放大学电大《桥梁工程技术》《会计学概论》网络课形考网考作业(合集)答案.docx
- 字形字体处理C语言课程设计范文.doc
- 网络游戏市场分析及媒体投放分析报告.pptx
- 最新毕业论文基于PLC的自动卷帘门控制系统.doc
- 制冷系统安全技术操作规程.doc
- 机械自动化设备优化策略分析获奖科研报告论文.docx
- 基于PLC与触摸屏的恒压供水电气系统设计.doc
- 告别网络游戏PPT课件.ppt
- 计算机体系结构实验报告二.doc
- 小程序如何运营?.docx
- 综合布线工程竣工验收报告样本.doc
- 2023年职称计算机试题及答案.doc
- 选煤工艺流程软件开发平台的选择.doc
- 综合楼综合布线系统方案.doc