AVR GCC has sei() for __enable_interrupts(), and cli() for __disable_interrupts(). Both of these macros are located in <avr/interrupts.h>.
CLI(clear interrupt)是將處理器標誌寄存器的中斷標誌位清0,不允許中斷。CLI經常與STI(SEI---set interrupt)成對使用,STI(SEI)是將處理器標誌寄存器的中斷標誌位置1,允許中斷。
__asm+彙編指令表示內聯彙編。
#pragma DATA_SEG DEFAULT
/* __asm */
#ifdef _lint /* 此語句中_lint不明白什麼意思? */
#define __asm(op) (void)(op)/* 宏定義__asm()函數 */
#endif
/* Watchdog reset macro */
#ifdef _lint
extern void WDog_Clear(void);/* 聲明喂狗函數 */
#else
#define WDog_Clear() (void)(SRS = 0x55, SRS = 0xAA)/* 宏定義喂狗函數 */
#endif /* WDog_Clear */
#define NOP() __asm("nop")/* 宏定義 */
#define DI() __asm("sei") /* Disable interrupts */
#define EI() __asm("cli") /* Enable interrupts */
#define DBI() __asm CLI /* 清除中斷標誌位,不允許中斷 */
#define EBI() __asm STI /* 中斷標誌位置1,允許中斷 */
#define SaveStatusReg() __asm("PSHA;TPA;SEI;STA CCR_reg;PULA;")
#define RestoreStatusReg() __asm("PSHA;LDA CCR_reg;TAP;PULA;")
/*
*********************************************************************************************************
* DATA TYPES
* (Compiler Specific)
*********************************************************************************************************
*/
用於封裝之,使之與compiler無關
typedef unsigned char BOOLEAN;
typedef unsigned char INT8U; /* Unsigned 8 bit quantity */
typedef signed char INT8S; /* Signed 8 bit quantity */
typedef unsigned int INT16U; /* Unsigned 16 bit quantity */
typedef signed int INT16S; /* Signed 16 bit quantity */
typedef unsigned long INT32U; /* Unsigned 32 bit quantity */
typedef signed long INT32S; /* Signed 32 bit quantity */
typedef float FP32; /* Single precision floating point */
typedef double FP64; /* Double precision floating point */
typedef unsigned int OS_STK; /* Each stack entry is 16-bit wide */
#define BYTE INT8S /* Define data types for backward compatibility ... */
#define UBYTE INT8U /* ... to uC/OS V1.xx. Not actually needed for ... */
#define WORD INT16S /* ... uC/OS-II. */
#define UWORD INT16U
#define LONG INT32S
#define ULONG INT32U
在啓動main函數之前HCS08 C 語言會自動運行一段啓動代碼,進行硬件初始化和建立C語言的運行環境。起動代碼一般由編譯器自動生成,也可以由用戶自寫的啓動代碼替代自動生成的啓動代碼。啓動代碼的名字爲start08.c,它的主要工作是:
(1)、 禁止中斷
(2)、從ROM到RAM複製並初始化數據
(3)、 未初始化的數據區域清零
(4)、爲堆棧分配並初始化堆棧
(5)、 如果用到堆,創建並初始化堆
(6)、允許中斷
(7)、調用main()函數