?? os_cpu.h
字號:
/*
*************************************************************************************************************
* uC/OS-II實時內核
*
* (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL
* All Rights Reserved
* (c) Copyright ARM Limited 1999. All rights reserved.
* ARM 專用代碼
*
* 文件名稱 : OS_CPU.H
**************************************************************************************************************
*/
#ifndef __OS_CPU_H__
#define __OS_CPU_H__
#ifdef OS_CPU_GLOBALS
#define OS_CPU_EXT
#else
#define OS_CPU_EXT extern
#endif
/*
*************************************************************************************************************
* 數據類型
*************************************************************************************************************
*/
typedef unsigned char BOOLEAN;
typedef unsigned char INT8U; /* 無符號 8位 */
typedef signed char INT8S; /* 有符號 8位 */
typedef unsigned short INT16U; /* 無符號 16位 */
typedef signed short INT16S; /* 有符號 16位 */
typedef unsigned int INT32U; /* 無符號 32位 */
typedef signed int INT32S; /* 有符號 32位 */
typedef float FP32; /* 單精度浮點型 */
typedef double FP64; /* 雙精度浮點型 */
typedef unsigned int OS_STK; /* 單個堆棧的寬度 */
typedef unsigned int OS_CPU_SR; /* 定義CPU狀態寄存器的容量 (PSR = 32 bits) */
#define BYTE INT8S /* 定義和以前兼容的數據類型 */
#define UBYTE INT8U
#define WORD INT16S
#define UWORD INT16U
#define LONG INT32S
#define ULONG INT32U
/*
*************************************************************************************************************
* ARM
*
* 方法 #1: 使用簡單的指令開關中斷。即使在進入臨界段前中斷是關閉的,但在從臨界段退出后,中斷打開。
*
* 方法 #2: 預處理中斷狀態來開關中斷。換句話說,如果在進入臨界段時中斷是關閉的,那么,在程序退出臨界段時,中斷
* 仍是關閉的。
*
* 方法 #3: 預處理中斷狀態來開關中斷。通常用局部變量'cpu_sr'來保存進入臨界段前的中斷標志,之后關閉中斷。
* 變量'cpu_sr'分布在所有要關閉中斷的uC/OS-II'的函數中。退出臨界段時需要把保存在變量'cpu_sr'的進入前
* 的中斷狀態復制到CPU的狀態寄存器中。
*
* 注意 : 方法 #1 沒有使用
* ------------------------------
* | 方法 | SDT 2.51 | ADS 1.2 |
* |========+==========+==========|
* | 1 | N/I | N/I |
* | 2 | 是 | 否 |
* | 3 | 是 | 是 |
* ------------------------------
*************************************************************************************************************
*/
/* 請不要修改此段程序, ADS 僅能支持 OS_CRITICAL_METHOD 3 */
#define NOINT 0xc0
#define SVC32MODE 0x13 // 定義管理模式標號量
#define SYS32MODE 0x1f // 定義系統模式標號量
#define ADS
#if defined (ADS)
#define OS_CRITICAL_METHOD 3
#elif defined (SDT)
#define OS_CRITICAL_METHOD 2
#else
#error Please define a valid tool chain
#endif
/********************************************************************************************************
* 定義的SDT下的開關中斷的方法
********************************************************************************************************/
#if OS_CRITICAL_METHOD == 2
#define OS_ENTER_CRITICAL() IRQFIQDE /* 關中斷 */
/* 注意: R0 寄存器需要保存, for it gets saved outside. 參考 SDT 用戶手冊 6-5 */
#define IRQFIQDE __asm \
{ \
mrs r0,CPSR; \
stmfd sp!,{r0}; \
orr r0,r0,#NOINT; \
msr CPSR_c,r0; \
}
#define OS_EXIT_CRITICAL() IRQFIQRE /* 恢復中斷 */
#define IRQFIQRE __asm \
{ \
ldmfd sp!,{r0}; \
msr CPSR_c,r0; \
}
#endif
/**********************************************************************************************************
* 定義的ADS下的開關中斷的方法
**********************************************************************************************************/
#if OS_CRITICAL_METHOD == 3
#define OS_ENTER_CRITICAL() (cpu_sr = OSCPUSaveSR()) /* 關中斷 */
#define OS_EXIT_CRITICAL() (OSCPURestoreSR(cpu_sr)) /* 開中斷 */
#endif
/*
*************************************************************************************************************
* ARM 雜項
*************************************************************************************************************
*/
#define OS_STK_GROWTH 1 /* 堆棧增漲方向,從高到低 */
#define OS_TASK_SW() OSCtxSw()
/*
*************************************************************************************************************
* PROTOTYPES
*************************************************************************************************************
*/
void UCOS_IRQHandler(void);
void OSCtxSw(void);
void OSIntCtxSw(void);
#if OS_CRITICAL_METHOD == 3 /* 為CPU狀態寄存器分配存儲 */
OS_CPU_SR OSCPUSaveSR(void);
void OSCPURestoreSR(OS_CPU_SR cpu_sr);
#endif
#endif /*__OS_CPU_H__*/
/*
// angel takes up stack
#define SEMIHOSTED_STACK_NEEDS 1024
// 空閑任務的堆棧 (字)
#ifdef SEMIHOSTED
#define OS_IDLE_STK_SIZE (32 + SEMIHOSTED_STACK_NEEDS)
#else
#define OS_IDLE_STK_SIZE 64
#endif
*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -