HCS08微控制器上有关内存分配的几个问题.doc

Similar documents
Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco

Microsoft Word - MSP430 Launchpad 指导书.docx

EK-STM32F

51 C 51 isp 10 C PCB C C C C KEIL

C语言的应用.PDF

目录

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

目 录

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;

学习MSP430单片机推荐参考书

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor

ICD ICD ICD ICD ICD

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

PIC16F F MPLAB 08 16F LED 15 LED

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha

JTAG ICE PC JTAG ICE JTAG ISP... 5 IDE AVR STUDIO JTAGICE JTAGICE... 12

1-1 SH79F6431 A. 2( ) 9~15V ( 12V) U2 U3 3.3V SH79F B. 1(VCC/GND) SH79F6431 C. VDDIO SH79F6431 P4 P5 P0.6 P0.7 VDDIO VDDIO=5V D. 2 V 1.0

Microsoft Word - 11.doc

c_cpp

CC213

Section1_16bit Arc.ppt

bingdian001.com

+00DE _01EN.book

ATMEL AT90S8515 AVR CPU AVR AVR AVR ATMEL RISC 32 8 r0 r X Y Z R0 R1 R2 R13 R14 R15 R16 R17 R26 R27 R28 R29 R30 R31 0x00 0x

DPJJX1.DOC

概述

1

untitled

Computer Architecture

/ / (FC 3)...

C/C++程序设计 - 字符串与格式化输入/输出

C/C++ - 字符串与字符串函数

2.5 idlocs PIC idloc idloc 0x1234 ; 0x config idloc HEX errorlevel errorlevel Error (Warning) Message HEX 3-14 errorlevel

C++ 程式設計

华恒家庭网关方案

Abstract arm linux tool-chain root NET-Start! 2

1 TPIS TPIS 2 2

12232A LED LED LED EL EL CCFL EL CCF

Microsoft Word - 正文.doc

ebook50-15

untitled

untitled

Application Note Format

C

SST SPAC SST SoftICE SST89C5x/SST89x554RC /564RD /SST89x516/5xRD / SoftICE SoftICE MCU SoftICE SS

软件测试(TA07)第一学期考试

C/C++ - 函数

3 PCI PCI PCI type 0 PCI type 1 PCI type 2 PCI CardBus PCI 16 6 Device ID Vendor ID 00h Status Register Command Register 04h Class Code Revision ID 08

untitled

NEXT SDT2.51 C:\ARM251 SDT2.51 ARM SDT 2.51 ARM PROJECT MANAGER SDT 2

untitled

FY.DOC

逢 甲 大 學

RAID RAID 0 RAID 1 RAID 5 RAID * ( -1)* ( /2)* No Yes Yes Yes A. B. BIOS SATA C. RAID BIOS RAID ( ) D. SATA RAID/AHCI ( ) SATA M.2 SSD ( )

ebook140-9

2 Keil µ vision 2.1 1) Keil µ vision2 V2.34 µ vision3 2) Sino_Keil.exe Keil c:\keil\ 3) JET51 USB PC C:\Keil\ USB PC 4) S-L

MCCB EMI EMI

KL DSC DEMO 使用说明

ARM JTAG实时仿真器安装使用指南

C/C++ - 文件IO

1 CPU

《计算机应用基础》学习材料(讲义)

untitled

Huawei Technologies Co


+01-10_M5A_C1955.p65

6020

新版 明解C言語入門編

Ch03_嵌入式作業系統建置_01

1.1 ML_ONOFF = 1 Q 3 Q 8 C 0.3V M 2 L 1 ML_ONOFF = 0 Q 3 Q 8 C 1. + R31 VCC R21 10K ML_ONOFF R15 0:off 1:on 1K Green Light VCC=5V L1 Q VDD=12V C

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

FM1935X智能非接触读写器芯片

Gerotor Motors Series Dimensions A,B C T L L G1/2 M G1/ A 4 C H4 E

ch08.PDF

Oracle 4

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile..

Bus Hound 5

untitled

2/80 2

RAID RAID 0 RAID 1 RAID 5 RAID * (-1)* (/ 2)* No Yes Yes Yes SATA A. B. BIOS SATA C. RAID BIOS RAID ( ) D. RAID/AHCI ( ) S ATA S S D ( ) (

PTS7_Manual.PDF

User ID 150 Password - User ID 150 Password Mon- Cam-- Invalid Terminal Mode No User Terminal Mode No User Mon- Cam-- 2

an153f

USB解决方案.ppt

Microsoft Word - ~ doc

MICROCHIP EVM Board : APP APP001 PICmicro Microchip APP001 40pin PDIP PICmicro Design Tips Character LCM Temperature Sensor Application I/O Pi

:5-6

Microsoft Word - 澎湖田調報告_璉謙組.doc

uc/os 1

P4i45GL_GV-R50-CN.p65

<4D F736F F D20B9F9B0EABBCDBBAFAB48DEB3B4C1A5BDB3F8A7692E646F63>

SL2511 SR Plus 操作手冊_單面.doc

提纲

: ( ),,

A Preliminary Implementation of Linux Kernel Virus and Process Hiding

从MCS51向AVR的快速转换.PDF

Microsoft PowerPoint - C15_LAB_MTS86_INTRO

(Guangzhou) AIT Co, Ltd V 110V [ ]! 2

26 头 孢 他 啶 注 射 剂 27 头 孢 他 美 酯 口 服 常 释 剂 型 28 头 孢 吡 肟 注 射 剂 29 头 孢 硫 脒 注 射 剂 30 头 孢 唑 肟 注 射 剂 31 头 孢 替 安 注 射 剂 32 头 孢 哌 酮 注 射 剂 33 头 孢 哌 酮 舒 巴 坦 注 射 剂

HighPoint产品的FAQ手册

Transcription:

HCS08 shylion@gmail.com HCS08 Tiny Small shylion@gmail.com HCS08...- 1-1.1. HCS08...- 2-1.1...- 2-1.2 RAM...- 5-1.3 FLASH...- 5-1.4 Vectors...- 6-1.2....- 7-1.3. HCS08 Tiny Small...- 9-1.4. heap segment...12 1.5. stack segment...13

1.1. HCS08 HCS08 Memory Map 16bit 64K MC9S08AW60 $0000 I/O Peripheral Registers $0070 RAM I/O $0100 RAM $0870 $1800 $1860 ROM or FLASH HIGH PAGE REGISTERS 64K ROM or FLASH? $FFB0 $FFC0 $FFFF NV Registers Vectors Vectors 1- AW60 1.1 CPU CPU08 I/O I/O CPU08 BSET 8bit IOREAD OR IOWRITE PTA 0b00000001 PTA PTA A 0 A - - Read-Modify-Write

CPU08 BSET 0, PTAD ; 0xb0 OPCODE, 0x00 operand 2bytes 5 CPU08 3 Direct Page Hige Page FLASH CPU08 0x0100 AW60 0x0000~0x006F 0x1800 High Page Registers SRS SBDFR SOPT SMCLK SDIDH:SDIDL SRTISC SPMSC1 SPMSC2 FLASH I/O System Reset Status Register (SRS) AW60 POR PIN COP ILOP ICG LVD SRS COP SRS CodeWarrior C C #define RESET_WATCHDOG() {asm sta SRS;} Write-once System Option Register (SOPT) 3 COPE COPT STOPE Configuration Bits COPE = 1 STOPE = 0 STOP

High Page Registers HCS08 SBDFR ID System Background Debug Force Reset (SBDFR) HCS08 0x1801 0 BDFR 1 BDM 0x00 System Device Identification Register (SDIDH:SDIDL) HCS08 0x1806:0x1807 16bit 12 SDIDH 4 SDIDL 8 AW60 ID 0x008 Nonvolatile Register 0xFFB0 0xFFBF FLASH NVBACKKEY NVPROT NVOPT const HCS08 Security Protection ; NVPROT Bit0 0 bit7~bit1 7 ; 0x00FF 0xDFFF 0xE000d ; 0xFFFF ORG #$NVPROT DB #$DE // C NVPROT const unsigned char _nvprot @ FFBF = 0xDE Flash Options Register NVOPT 0xFFBF FLASH HCS08 FLASH 0xFFBF bit1 bit0 SEC01:SEC00 SEC01 SEC00 4 1:0 bit 1 NVFOPT copy FOPT HCS08 RAM FLASH FLASH NVBACKKEY 0xFFB0~0xFFB7

FOPT bit7 KEYEN 8bytes NVBACKKEY[8] MD5 SHA-1 NVPROT 0xFFBD NVPROT FLASH FLASH HCS08 FLASH 512bytes FLASH FLASH NVPROT bit0 0 bit7~bit1 FLASH 7 A15~A9 9 1 NVPROT copy FPROT bootloader Bootloader FLASH bootloader redirection NVOPT bit6 FNORED 1.2 RAM CPU08 RAM AW60 2048bytes RAM 0x0070~0x0870 RAM RAM 0x0100 RAM 1.3 FLASH HCS08 0.25um FLASH 512bytes AW60 124 124 512 = 63,280bytes HCS08 FLASH HC08 HC08 100,000

IAP EEPROM FLASH Program/Erase Cycles FLASH bit 0 1 Erase 1 0 Program FLASH FLASH Burst Page HCS08 FLASH FLASH FLASH HC08 HC08 FLASH / HCS08 HCS08 FLASH HC08 IAP FLASH CPU08 FLASH EEPROM bootloader HCS08 FLASH 57kbytes 0x1800 FLASH AW60 0x870~0x17FF 3984bytes 0x1860~0xFFFF 59,296bytes FLASH CPU08 FLASH RAM FLASH / FLASH FLASH 1.4 Vectors CPU08 Reset Vector Interrupt Vector Table IVT FLASH 0xFFFE:0xFFFF PC Bill Blunden Bill CPU ISR HCS08 FLASH 0xFFC0~0xFFFF 16bit CPU08 CPU

CCR I 3 CPU PCL PCH X A CCR H IRQ SWI CPU bootloader IVT Redirection MAP 1.2. unsigned char CPU Intel Little Endian Intel Big Endian CodeWarrior C08 Big Endian long 4 bytes 4 unsigned char void main(void) { unsigned char temp; long x = 0x12345678; long *px = &x; temp = (unsigned char) *((unsigned char *)px + 0); temp = (unsigned char) *((unsigned char *)px + 1); temp = (unsigned char) *((unsigned char *)px + 2); temp = (unsigned char) *((unsigned char *)px + 3); #ifdef HCS08 EnableInterrupts; /* enable interrupts */ /* include your code here */ for(;;) { RESET_WATCHDOG(); /* feeds the dog */ } /* loop forever */ /* please make sure that you never leave main */ #endif } HCS08 PC HCS08 4 temp 0x12 0x34 0x56 0x78 PC 4 0x78 0x56 0x34 0x12 PC 4 1byte x HCS08

0x12345678 0x78563412

1.3. HCS08 Tiny Small 08 C Tiny Small Tiny RAM 0x0100 AW60 RAM 0x0070 0x00FF Tiny RAM #pragma Tiny PRM SEGMENTS /* Here all RAM/ROM areas of the device are listed. Used in PLACEMENT below. */ ROM = READ_ONLY 0x1860 TO 0xFFAF; Z_RAM = READ_WRITE 0x0070 TO 0x00FF; RAM = READ_WRITE 0x0100 TO 0x086F; ROM1 = READ_ONLY 0x0870 TO 0x17FF; ROM2 = READ_ONLY 0xFFC0 TO 0xFFCB; END PLACEMENT /* Here all predefined and user segments are placed into the SEGMENTS defined above. */ FAR_RAM INTO RAM; DEFAULT_ROM, ROM_VAR, STRINGS INTO ROM; /* ROM1,ROM2 In case you want to use ROM1,ROM2 as well, be sure the option -OnB=b is passed to the compiler. */ _DATA_ZEROPAGE, MY_ZEROPAGE, DEFAULT_RAM INTO Z_RAM; END STACKSIZE 0x50 VECTOR 0 _Startup /* Reset vector: this is the default entry point for an application. */ PLACEMENT Z_RAM 0x0070 0x00FF 144bytes 0x0100 0x086F 1904bytes FAR_RAM Z_RAM Z_RAM 80bytes RAM 64bytes Startup INIT_SP_FROM_STARTUP_DESC() hidef.h asm LDHX @ SEG_END_SSTACK; asm TXS; SEG_END_SSTACK SP SEG_END_SSTACK map 0x100 OBJECT-ALLOCATION SECTION Name Module Addr hsize dsize Ref Section RLIB ------------------------------------------------------------------------------------------------- - LABELS: SEG_END_SSTACK 100 0 0 1 main.c

unsigned char auto_data[0x40]; /* auto_data[] will be allocated in the default Z_RAM*/ #pragma DATA_SEG FAR_RAM /* specify the allocation segment FAR_RAM */ unsigned char data1; unsigned char data2; #pragma DATA_SEG DEFAULT /*specify the default data segment Z_RAM*/ void main(void) { // static unsigned char data3; /* static variable will also be allocated in Z_RAM /test 1 */ data1 = auto_data[0]; data2 = auto_data[1]; // data3 = 0xff; // test 2 EnableInterrupts; /* enable interrupts */ /* include your code here */ for(;;) { RESET_WATCHDOG(); /* feeds the dog */ } /* loop forever */ /* please make sure that you never leave main */ } auto_data[] RAM Z_RAM #pragma data1 data2 FAR_RAM auto_data[] 64bytes 80bytes #pragma test 1 test 2 data3 auto_data 0x40 L1102: Out of allocation space in segment Z_RAM at address 0xb1 Small prm SEGMENTS /* Here all RAM/ROM areas of the device are listed. Used in PLACEMENT below. */ ROM = READ_ONLY 0x1860 TO 0xFFAF; Z_RAM = READ_WRITE 0x0070 TO 0x00FF; RAM = READ_WRITE 0x0100 TO 0x086F; ROM1 = READ_ONLY 0x0870 TO 0x17FF; ROM2 = READ_ONLY 0xFFC0 TO 0xFFCB; END PLACEMENT /* Here all predefined and user segments are placed into the SEGMENTS defined above. */ DEFAULT_RAM INTO RAM; DEFAULT_ROM, ROM_VAR, STRINGS INTO ROM; /* ROM1,ROM2 In case you want to use ROM1,ROM2 as well, be sure the option -OnB=b is passed to the compiler. */ _DATA_ZEROPAGE, MY_ZEROPAGE, INTO Z_RAM; END STACKSIZE 0x50 VECTOR 0 _Startup /* Reset vector: this is the default entry point for an application. */ Tiny DEAFAULT_RAM RAM FAR_RAM RAM

Z_RAM map SEG_END_SSTACK 0x150 0x0100 0x0150 OBJECT-ALLOCATION SECTION Name Module Addr hsize dsize Ref Section RLIB ------------------------------------------------------------------------------------------------- - LABELS: SEG_END_SSTACK 150 0 0 1 small #pragma #pragma DATA_SEG MY_ZEROPAGE unsigned char dir_data1; /* dir_data1 will be allocated in Z_RAM */ #pragma DATA_SEG DEFAULT unsigned char auto_data2; /* auto_data2 will be allocated in DEFAULT_RAM */ tiny small 0x0100 RAM #pragma Tiny 8bit 0x0100 far unsigned char * far ptr; Small 16bit near 8bit 0x0100 unsigned char * near ptr;

1.4. heap segment C C #include <hidef.h> /* for EnableInterrupts macro */ #include "derivative.h" /* include peripheral declarations */ #include <stdlib.h> /* malloc() and free()*/ void main(void) { unsigned char *ptrtest = NULL; // unsigned char i; i = *ptrtest; ptest = malloc(20); i = *ptrtest; for (i = 0; i < 20; i++) { *(ptrtest++) = i; } i = *ptrtest; ptrtest--; i = *ptrtest; free(ptrtest); i = *ptrtest; // (1) // ptest 20bytes // (2) // (3) // (4) ++ ptest // ptest // (5) // // (6) ptest for(;;) { RESET_WATCHDOG(); /* feeds the dog */ } /* loop forever */ /* please make sure that you never leave main */ } unsigned char ptrtest ptest CW5.1 NULL C5651: Local variable ptrtest may be not initialized 6 ptrtest 7 (1) ptrtest (2) ptrtest run-time library malloc() 20bytes ptrtest 20bytes ptrtest (3) ptrtest 20bytes

(4) ++ ptest (5) ptrtest 1 (6) free() ptrtest malloc() ptest 6 (3) (5) ptrtest CW5.1 CW Heap 2000bytes RAM CW 5.1 C libdefs.h LIBDEF_HEAPSIZE hc08_lib.mcp C 08C Heap Heap malloc() Heap free() 08C Heap RAM 08C Heap CPU08 Heap 8bit 1.5. stack segment C DEFAULT DATA_SEG Small 0x0100 static DEFAULT DATA_SEG

C TSX TXS H:X SP 16bit SP H:X TXS _Startup: LDHX # SEG_END_SSTACK ; SEG_END_SSTACK TXS ; H:X SP CLI ; enable interrupts SEG_END_SSTACK 0x150 small 0x100 0 STACK SIZE H:X 0x150 H:X SP SP 0x14F H:X SP 1 SP X 1 SP SP SEG_END_SSTACK Small DEFAULT_RAM 0x0100 5bytes STACKSIZE 0x50 SEG_START_SSTACK 0x105 SEG_END_SSTACK 0x156 16bit SP SP HCS08 RAM BSR JSR routine RTS PC

ORG $F000 _my_init: F000 AD 02 BSR sub_dummy ; sub_dummy return_address: ; 0xF002 F002 A6 55 LDA #$55 ;... sub_dummy: ; 0xF004 F004 9D NOP ; 0xF002 F005 81 RTS ; 0xF002 PC SP RAM SP PRM STACKIZE 0x50 0x14F 0x50 byte SP SP 1 SP 1 HC05 CPU08 0x00FF HC05 RAM 256bytes RAM 0x00FF RSP SP 0x00FF CPU08 0x0000 0x00FF byte DIR DIR SP RAM RSP CPU SP 8bit 0xFF 8bit

RAM Stack Top Stack Size 0x14C 0x14D 0x14E 0x14F 0x150 = SEG_END_SSTACK 2. Stack