Mercurial > flash_v2
annotate packages/hal/arm/arch/current/include/hal_arch.h @ 80:2085233a121a ecos-sw-2000-04-07
Merge from eCos master repository on 2000-04-07-07:52:29-BST
| author | jlarmour |
|---|---|
| date | Fri, 07 Apr 2000 07:45:04 +0000 |
| parents | 59d97b6ba612 |
| children | c37d3a9e1b28 |
| rev | line source |
|---|---|
| 2 | 1 #ifndef CYGONCE_HAL_ARCH_H |
| 2 #define CYGONCE_HAL_ARCH_H | |
| 3 | |
| 4 //========================================================================== | |
| 5 // | |
| 6 // hal_arch.h | |
| 7 // | |
| 8 // Architecture specific abstractions | |
| 9 // | |
| 10 //========================================================================== | |
| 11 //####COPYRIGHTBEGIN#### | |
|
64
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
48
diff
changeset
|
12 // |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
48
diff
changeset
|
13 // ------------------------------------------- |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
48
diff
changeset
|
14 // The contents of this file are subject to the Red Hat eCos Public License |
|
66
bf00f99aec69
Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents:
64
diff
changeset
|
15 // Version 1.1 (the "License"); you may not use this file except in |
|
64
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
48
diff
changeset
|
16 // compliance with the License. You may obtain a copy of the License at |
|
66
bf00f99aec69
Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents:
64
diff
changeset
|
17 // http://www.redhat.com/ |
|
64
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
48
diff
changeset
|
18 // |
|
66
bf00f99aec69
Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents:
64
diff
changeset
|
19 // Software distributed under the License is distributed on an "AS IS" |
|
64
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
48
diff
changeset
|
20 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
48
diff
changeset
|
21 // License for the specific language governing rights and limitations under |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
48
diff
changeset
|
22 // the License. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
48
diff
changeset
|
23 // |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
48
diff
changeset
|
24 // The Original Code is eCos - Embedded Configurable Operating System, |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
48
diff
changeset
|
25 // released September 30, 1998. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
48
diff
changeset
|
26 // |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
48
diff
changeset
|
27 // The Initial Developer of the Original Code is Red Hat. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
48
diff
changeset
|
28 // Portions created by Red Hat are |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
48
diff
changeset
|
29 // Copyright (C) 1998, 1999, 2000 Red Hat, Inc. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
48
diff
changeset
|
30 // All Rights Reserved. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
48
diff
changeset
|
31 // ------------------------------------------- |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
48
diff
changeset
|
32 // |
| 2 | 33 //####COPYRIGHTEND#### |
| 34 //========================================================================== | |
| 35 //#####DESCRIPTIONBEGIN#### | |
| 36 // | |
| 37 // Author(s): nickg, gthomas | |
| 38 // Contributors: nickg, gthomas | |
| 39 // Date: 1999-02-20 | |
| 40 // Purpose: Define architecture abstractions | |
| 41 // Usage: #include <cyg/hal/hal_arch.h> | |
| 42 | |
| 43 // | |
| 44 //####DESCRIPTIONEND#### | |
| 45 // | |
| 46 //========================================================================== | |
| 47 | |
| 48 #include <pkgconf/hal.h> // To decide on stack usage | |
| 49 #include <cyg/infra/cyg_type.h> | |
| 50 | |
| 51 // | |
| 52 // CPSR Register defines | |
| 53 // | |
| 54 | |
| 55 #define CPSR_IRQ_DISABLE 0x80 // IRQ disabled when =1 | |
| 56 #define CPSR_FIQ_DISABLE 0x40 // FIQ disabled when =1 | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
57 #define CPSR_THUMB_ENABLE 0x20 // Thumb mode when =1 |
|
4
1d7f19c9e4d1
Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents:
2
diff
changeset
|
58 #define CPSR_FIQ_MODE 0x11 |
|
1d7f19c9e4d1
Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents:
2
diff
changeset
|
59 #define CPSR_IRQ_MODE 0x12 |
| 2 | 60 #define CPSR_SUPERVISOR_MODE 0x13 |
|
4
1d7f19c9e4d1
Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents:
2
diff
changeset
|
61 #define CPSR_UNDEF_MODE 0x1B |
| 2 | 62 |
| 63 #define CPSR_MODE_BITS 0x1F | |
| 64 | |
| 65 #define CPSR_INITIAL (CPSR_IRQ_DISABLE|CPSR_FIQ_DISABLE|CPSR_SUPERVISOR_MODE) | |
| 66 #define CPSR_THREAD_INITIAL (CPSR_SUPERVISOR_MODE) | |
| 67 | |
| 68 //-------------------------------------------------------------------------- | |
| 69 // Processor saved states: | |
| 70 // The layout of this structure is also defined in "arm.inc", for assembly | |
| 71 // code, which will be generated automatically if this file changes. | |
| 72 | |
| 73 #define HAL_THREAD_CONTEXT_FIRST 0 | |
| 74 #define HAL_THREAD_CONTEXT_R0 (0-HAL_THREAD_CONTEXT_FIRST) | |
| 75 #define HAL_THREAD_CONTEXT_R4 (4-HAL_THREAD_CONTEXT_FIRST) | |
| 76 #define HAL_THREAD_CONTEXT_R10 (10-HAL_THREAD_CONTEXT_FIRST) | |
| 77 #define HAL_THREAD_CONTEXT_LAST 10 | |
| 78 #define HAL_NUM_THREAD_CONTEXT_REGS (HAL_THREAD_CONTEXT_LAST - \ | |
| 79 HAL_THREAD_CONTEXT_FIRST+1) | |
| 80 | |
| 81 // It seems that r0-r3,r12 are considered scratch by function calls | |
| 82 | |
| 83 typedef struct | |
| 84 { | |
| 85 // These are common to all saved states | |
| 86 cyg_uint32 d[HAL_NUM_THREAD_CONTEXT_REGS] ; // Data regs (r0..r10) | |
| 87 cyg_uint32 fp; // (r11) Frame pointer | |
| 88 cyg_uint32 sp; // (r13) Stack pointer | |
| 89 cyg_uint32 lr; // (r14) Link Reg | |
| 90 cyg_uint32 pc; // (r15) PC place holder | |
| 91 // (never used) | |
| 92 cyg_uint32 cpsr; // Condition Reg | |
| 93 cyg_uint32 ip; // (r12) Previous stack | |
| 94 // pointer | |
| 95 // These are only saved for exceptions and interrupts | |
| 96 cyg_uint32 vector; // Vector number | |
| 97 cyg_uint32 msr; // Machine State Reg | |
| 98 | |
| 99 } HAL_SavedRegisters; | |
| 100 | |
| 101 //------------------------------------------------------------------------- | |
| 102 // Exception handling function. | |
| 103 // This function is defined by the kernel according to this prototype. It is | |
| 104 // invoked from the HAL to deal with any CPU exceptions that the HAL does | |
| 105 // not want to deal with itself. It usually invokes the kernel's exception | |
| 106 // delivery mechanism. | |
| 107 | |
| 108 externC void cyg_hal_deliver_exception( CYG_WORD code, CYG_ADDRWORD data ); | |
| 109 | |
| 110 //------------------------------------------------------------------------- | |
| 111 // Bit manipulation macros | |
| 112 | |
| 113 externC int hal_lsbindex(int); | |
| 114 externC int hal_msbindex(int); | |
| 115 | |
| 116 #define HAL_LSBIT_INDEX(index, mask) index = hal_lsbindex(mask) | |
| 117 #define HAL_MSBIT_INDEX(index, mask) index = hal_msbindex(mask) | |
| 118 | |
| 119 //------------------------------------------------------------------------- | |
| 120 // Context Initialization | |
| 121 // Initialize the context of a thread. | |
| 122 // Arguments: | |
| 123 // _sparg_ name of variable containing current sp, will be changed to new sp | |
| 124 // _thread_ thread object address, passed as argument to entry point | |
| 125 // _entry_ entry point address. | |
| 126 // _id_ bit pattern used in initializing registers, for debugging. | |
| 127 | |
| 128 #define HAL_THREAD_INIT_CONTEXT( _sparg_, _thread_, _entry_, _id_ ) \ | |
| 129 CYG_MACRO_START \ | |
|
6
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
4
diff
changeset
|
130 register CYG_WORD _sp_ = ((CYG_WORD)_sparg_) &~15; \ |
| 2 | 131 register HAL_SavedRegisters *_regs_; \ |
| 132 int _i_; \ | |
| 133 _regs_ = (HAL_SavedRegisters *)((_sp_) - sizeof(HAL_SavedRegisters)); \ | |
| 134 for( _i_ = HAL_THREAD_CONTEXT_FIRST; _i_ <= HAL_THREAD_CONTEXT_LAST; \ | |
| 135 _i_++ ) \ | |
| 136 (_regs_)->d[_i_] = (_id_)|_i_; \ | |
| 137 (_regs_)->d[00] = (CYG_WORD)(_thread_); /* R0 = arg1 = thread ptr */ \ | |
| 138 (_regs_)->sp = (CYG_WORD)(_sp_); /* SP = top of stack */ \ | |
| 139 (_regs_)->lr = (CYG_WORD)(_entry_); /* LR = entry point */ \ | |
| 140 (_regs_)->pc = (CYG_WORD)(_entry_); /* PC = [initial] entry point */\ | |
| 141 (_regs_)->cpsr = (CPSR_THREAD_INITIAL); /* PSR = Interrupt enabled */ \ | |
| 142 _sparg_ = (CYG_ADDRESS)_regs_; \ | |
| 143 CYG_MACRO_END | |
| 144 | |
| 145 //-------------------------------------------------------------------------- | |
| 146 // Context switch macros. | |
| 147 // The arguments are pointers to locations where the stack pointer | |
| 148 // of the current thread is to be stored, and from where the sp of the | |
| 149 // next thread is to be fetched. | |
| 150 | |
| 151 externC void hal_thread_switch_context( CYG_ADDRESS to, CYG_ADDRESS from ); | |
| 152 externC void hal_thread_load_context( CYG_ADDRESS to ) | |
| 153 __attribute__ ((noreturn)); | |
| 154 | |
| 155 #define HAL_THREAD_SWITCH_CONTEXT(_fspptr_,_tspptr_) \ | |
| 156 hal_thread_switch_context((CYG_ADDRESS)_tspptr_, \ | |
| 157 (CYG_ADDRESS)_fspptr_); | |
| 158 | |
| 159 #define HAL_THREAD_LOAD_CONTEXT(_tspptr_) \ | |
| 160 hal_thread_load_context( (CYG_ADDRESS)_tspptr_ ); | |
| 161 | |
| 162 //-------------------------------------------------------------------------- | |
| 163 // Execution reorder barrier. | |
| 164 // When optimizing the compiler can reorder code. In multithreaded systems | |
| 165 // where the order of actions is vital, this can sometimes cause problems. | |
| 166 // This macro may be inserted into places where reordering should not happen. | |
| 167 | |
| 168 #define HAL_REORDER_BARRIER() asm volatile ( "" : : : "memory" ) | |
| 169 | |
| 170 //-------------------------------------------------------------------------- | |
| 171 // Breakpoint support | |
| 172 // HAL_BREAKPOINT() is a code sequence that will cause a breakpoint to happen | |
| 173 // if executed. | |
| 174 // HAL_BREAKINST is the value of the breakpoint instruction and | |
| 175 // HAL_BREAKINST_SIZE is its size in bytes. | |
| 176 | |
|
48
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
38
diff
changeset
|
177 #define _stringify1(__arg) #__arg |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
38
diff
changeset
|
178 #define _stringify(__arg) _stringify1(__arg) |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
38
diff
changeset
|
179 |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
38
diff
changeset
|
180 #define HAL_BREAKINST_ARM 0xE7FFDEFE |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
38
diff
changeset
|
181 #define HAL_BREAKINST_ARM_SIZE 4 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
182 #define HAL_BREAKINST_THUMB 0xbebe // illegal instruction currently |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
183 #define HAL_BREAKINST_THUMB_SIZE 2 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
184 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
185 #ifdef __thumb__ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
186 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
187 # define HAL_BREAKPOINT(_label_) \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
188 asm volatile (" .code 16;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
189 " .globl " #_label_ ";" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
190 #_label_":" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
191 " .short " _stringify(HAL_BREAKINST_THUMB) \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
192 ); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
193 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
194 # define HAL_BREAKINST HAL_BREAKINST_THUMB |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
195 # define HAL_BREAKINST_SIZE HAL_BREAKINST_THUMB_SIZE |
|
80
2085233a121a
Merge from eCos master repository on 2000-04-07-07:52:29-BST
jlarmour
parents:
78
diff
changeset
|
196 #else // __thumb__ |
|
48
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
38
diff
changeset
|
197 |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
38
diff
changeset
|
198 #define HAL_BREAKPOINT(_label_) \ |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
38
diff
changeset
|
199 asm volatile (" .globl " #_label_ ";" \ |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
38
diff
changeset
|
200 #_label_":" \ |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
38
diff
changeset
|
201 " .word " _stringify(HAL_BREAKINST_ARM) \ |
| 2 | 202 ); |
| 203 | |
| 204 //#define HAL_BREAKINST {0xFE, 0xDE, 0xFF, 0xE7} | |
|
48
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
38
diff
changeset
|
205 #define HAL_BREAKINST HAL_BREAKINST_ARM |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
38
diff
changeset
|
206 #define HAL_BREAKINST_SIZE HAL_BREAKINST_ARM_SIZE |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
207 #endif // __thumb__ |
| 2 | 208 |
| 209 //-------------------------------------------------------------------------- | |
| 210 // Thread register state manipulation for GDB support. | |
| 211 | |
| 212 // GDB expects the registers in this structure: | |
| 213 // r0..r10, fp, ip, sp, lr, pc - 4 bytes each | |
| 214 // f0..f7 - 12 bytes each (N/A on ARM7) | |
| 215 // fps - 4 bytes (N/A on ARM7) | |
| 216 // ps - 4 bytes | |
| 217 | |
| 218 // Translate a stack pointer as saved by the thread context macros above into | |
| 219 // a pointer to a HAL_SavedRegisters structure. | |
| 220 #define HAL_THREAD_GET_SAVED_REGISTERS( _sp_, _regs_ ) \ | |
| 221 (_regs_) = (HAL_SavedRegisters *)(_sp_) | |
| 222 | |
| 223 // Copy a set of registers from a HAL_SavedRegisters structure into a | |
| 224 // GDB ordered array. | |
| 225 #define HAL_GET_GDB_REGISTERS( _aregval_, _regs_ ) \ | |
| 226 CYG_MACRO_START \ | |
| 227 CYG_ADDRWORD *_regval_ = (CYG_ADDRWORD *)(_aregval_); \ | |
| 228 int _i_; \ | |
| 229 \ | |
| 230 for( _i_ = 0; _i_ <= 10; _i_++ ) \ | |
| 231 _regval_[_i_] = (_regs_)->d[_i_]; \ | |
| 232 \ | |
| 233 _regval_[11] = (_regs_)->fp; \ | |
| 234 _regval_[12] = (_regs_)->ip; \ | |
| 235 _regval_[13] = (_regs_)->sp; \ | |
| 236 _regval_[14] = (_regs_)->lr; \ | |
| 237 _regval_[15] = (_regs_)->pc; \ | |
| 238 _regval_[25] = (_regs_)->cpsr; \ | |
| 239 for( _i_ = 0; _i_ < 8; _i_++ ) \ | |
| 240 _regval_[_i_+16] = 0; \ | |
| 241 CYG_MACRO_END | |
| 242 | |
| 243 // Copy a GDB ordered array into a HAL_SavedRegisters structure. | |
| 244 #define HAL_SET_GDB_REGISTERS( _regs_ , _aregval_ ) \ | |
| 245 CYG_MACRO_START \ | |
| 246 CYG_ADDRWORD *_regval_ = (CYG_ADDRWORD *)(_aregval_); \ | |
| 247 int _i_; \ | |
| 248 \ | |
| 249 for( _i_ = 0; _i_ <= 10; _i_++ ) \ | |
| 250 (_regs_)->d[_i_] = _regval_[_i_]; \ | |
| 251 \ | |
| 252 (_regs_)->fp = _regval_[11]; \ | |
| 253 (_regs_)->ip = _regval_[12]; \ | |
| 254 (_regs_)->sp = _regval_[13]; \ | |
| 255 (_regs_)->lr = _regval_[14]; \ | |
| 256 (_regs_)->pc = _regval_[15]; \ | |
| 257 (_regs_)->cpsr = _regval_[25]; \ | |
| 258 CYG_MACRO_END | |
| 259 | |
| 260 //-------------------------------------------------------------------------- | |
| 261 // HAL setjmp | |
| 262 | |
| 263 #define CYGARC_JMP_BUF_SIZE 16 // Actually 11, but some room left over | |
| 264 | |
| 265 typedef cyg_uint32 hal_jmp_buf[CYGARC_JMP_BUF_SIZE]; | |
| 266 | |
| 267 externC int hal_setjmp(hal_jmp_buf env); | |
| 268 externC void hal_longjmp(hal_jmp_buf env, int val); | |
| 269 | |
| 270 | |
| 271 //-------------------------------------------------------------------------- | |
| 272 // Idle thread code. | |
| 273 // This macro is called in the idle thread loop, and gives the HAL the | |
| 274 // chance to insert code. Typical idle thread behaviour might be to halt the | |
| 275 // processor. | |
| 276 | |
| 277 externC void hal_idle_thread_action(cyg_uint32 loop_count); | |
| 278 | |
| 279 #define HAL_IDLE_THREAD_ACTION(_count_) hal_idle_thread_action(_count_) | |
| 280 | |
| 281 //--------------------------------------------------------------------------- | |
| 282 | |
| 283 // Minimal and sensible stack sizes: the intention is that applications | |
| 284 // will use these to provide a stack size in the first instance prior to | |
| 285 // proper analysis. Idle thread stack should be this big. | |
| 286 | |
| 287 // THESE ARE NOT INTENDED TO BE MICROMETRICALLY ACCURATE FIGURES. | |
| 288 // THEY ARE HOWEVER ENOUGH TO START PROGRAMMING. | |
| 289 // YOU MUST MAKE YOUR STACKS LARGER IF YOU HAVE LARGE "AUTO" VARIABLES! | |
| 290 | |
| 291 // This is not a config option because it should not be adjusted except | |
| 292 // under "enough rope" sort of disclaimers. | |
| 293 | |
| 294 // A minimal, optimized stack frame, rounded up - no autos | |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
76
diff
changeset
|
295 #define CYGNUM_HAL_STACK_FRAME_SIZE (4 * 20) |
| 2 | 296 |
| 297 // Stack needed for a context switch: this is implicit in the estimate for | |
| 298 // interrupts so not explicitly used below: | |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
76
diff
changeset
|
299 #define CYGNUM_HAL_STACK_CONTEXT_SIZE (4 * 20) |
| 2 | 300 |
| 301 // Interrupt + call to ISR, interrupt_end() and the DSR | |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
76
diff
changeset
|
302 #define CYGNUM_HAL_STACK_INTERRUPT_SIZE \ |
|
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
76
diff
changeset
|
303 ((4 * 20) + 2 * CYGNUM_HAL_STACK_FRAME_SIZE) |
| 2 | 304 |
| 305 // Space for the maximum number of nested interrupts, plus room to call functions | |
| 306 #define CYGNUM_HAL_MAX_INTERRUPT_NESTING 4 | |
| 307 | |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
76
diff
changeset
|
308 #define CYGNUM_HAL_STACK_SIZE_MINIMUM \ |
|
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
76
diff
changeset
|
309 (CYGNUM_HAL_MAX_INTERRUPT_NESTING * CYGNUM_HAL_STACK_INTERRUPT_SIZE + \ |
|
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
76
diff
changeset
|
310 2 * CYGNUM_HAL_STACK_FRAME_SIZE) |
| 2 | 311 |
| 312 #define CYGNUM_HAL_STACK_SIZE_TYPICAL \ | |
| 313 (CYGNUM_HAL_STACK_SIZE_MINIMUM + \ | |
| 314 16 * CYGNUM_HAL_STACK_FRAME_SIZE) | |
| 315 | |
| 316 //----------------------------------------------------------------------------- | |
| 317 | |
| 318 #endif // CYGONCE_HAL_ARCH_H | |
| 319 // End of hal_arch.h |
