asm内联汇编及HC08启动代码说明
来源:互联网 发布:pm2 node 编辑:程序博客网 时间:2024/06/06 02:09
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()函数
- asm内联汇编及HC08启动代码说明
- 2.asm-asm内联汇编
- GCC 内联汇编 格式及代码
- [汇编]内联汇编-扩展ASM
- C++ Inline ASM 内联汇编祥解
- VC内联ASM汇编学习笔记
- C++ Inline ASM 内联汇编祥解
- C++ Inline ASM 内联汇编详解
- GCC Inline ASM GCC内联汇编
- Visual C Inline ASM 内联汇编
- C++ Inline ASM 内联汇编祥解
- GCC Inline ASM GCC内联汇编
- C++ Inline ASM 内联汇编详解
- GCC Inline ASM GCC内联汇编
- [ASM]Linux平台内联汇编实例
- 用asm内联汇编实现系统调用
- 内联汇编和汇编指令的说明
- VC之内联汇编代码...
- linux下C/C++IDE比较
- java 手机号验证
- 【P000-002】交易费计算系统初步实现
- java中的枚举
- SVN服务器更换地址解决方法
- asm内联汇编及HC08启动代码说明
- Android主题切换方案总结
- ExtJs 4.x 学习小记:Ext.TabPanel滚动条及分页栏不在页面最底端的处理
- va_start和va_end使用详解
- java 接受的网络数不能转换成jsonobject
- Android UI学习 - 对话框
- float与double的范围和精度
- 只要老人想学 社区免费提供电脑
- Unity3d入门教程构建场景 (Building Scenes)>游戏目标 (GameObjects)