diff --git a/Keil_Commun/Listings/projet_chavirement.map b/Keil_Commun/Listings/projet_chavirement.map index b6f7536..09bcda2 100644 --- a/Keil_Commun/Listings/projet_chavirement.map +++ b/Keil_Commun/Listings/projet_chavirement.map @@ -18,11 +18,13 @@ Section Cross References mytimer.o(i.TIM4_IRQHandler) refers to mytimer.o(.data) for PtrF principal.o(i.main) refers to driver_gpio.o(i.MyGPIO_Activate) for MyGPIO_Activate principal.o(i.main) refers to chavirement.o(i.chavirement_init) for chavirement_init + principal.o(i.main) refers to bordage.o(i.Roulis_Handler) for Roulis_Handler principal.o(i.main) refers to chavirement.o(i.chavirement_handler) for chavirement_handler principal.o(i.main) refers to principal.o(.data) for value chavirement.o(i.chavirement_handler) refers to chavirement.o(i.lire) for lire chavirement.o(i.chavirement_handler) refers to bordage.o(i.Roulis_Handler) for Roulis_Handler chavirement.o(i.chavirement_init) refers to driver_spi.o(i.SPI_init_master) for SPI_init_master + chavirement.o(i.chavirement_init) refers to chavirement.o(i.ecrire) for ecrire chavirement.o(i.chavirement_init) refers to chavirement.o(i.lire) for lire chavirement.o(i.chavirement_init) refers to chavirement.o(.data) for device_id chavirement.o(i.ecrire) refers to driver_gpio.o(i.MyGPIO_Reset) for MyGPIO_Reset @@ -109,7 +111,6 @@ Removing Unused input sections from the image. Removing chavirement.o(.rev16_text), (4 bytes). Removing chavirement.o(.revsh_text), (4 bytes). Removing chavirement.o(.rrx_text), (6 bytes). - Removing chavirement.o(i.ecrire), (64 bytes). Removing bordage.o(.rev16_text), (4 bytes). Removing bordage.o(.revsh_text), (4 bytes). Removing bordage.o(.rrx_text), (6 bytes). @@ -120,7 +121,7 @@ Removing Unused input sections from the image. Removing system_stm32f10x.o(i.SystemCoreClockUpdate), (164 bytes). Removing system_stm32f10x.o(.data), (20 bytes). -29 unused section(s) (total 1142 bytes) removed from the image. +28 unused section(s) (total 1078 bytes) removed from the image. ============================================================================== @@ -130,24 +131,24 @@ Image Symbol Table Symbol Name Value Ov Type Size Object(Section) + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry2.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry7a.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry11a.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry12b.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry5.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry10b.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry10a.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry11b.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry9b.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry9a.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry8b.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry8a.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry7b.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry7a.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry5.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry2.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry12b.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry12a.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry11b.o ABSOLUTE - ../clib/microlib/longlong.c 0x00000000 Number 0 llshl.o ABSOLUTE - ../clib/microlib/longlong.c 0x00000000 Number 0 llsshr.o ABSOLUTE ../clib/microlib/longlong.c 0x00000000 Number 0 llushr.o ABSOLUTE + ../clib/microlib/longlong.c 0x00000000 Number 0 llsshr.o ABSOLUTE + ../clib/microlib/longlong.c 0x00000000 Number 0 llshl.o ABSOLUTE ../clib/microlib/stubs.s 0x00000000 Number 0 iusefp.o ABSOLUTE ../fplib/microlib/d2f.c 0x00000000 Number 0 d2f.o ABSOLUTE ../fplib/microlib/f2d.c 0x00000000 Number 0 f2d.o ABSOLUTE @@ -227,9 +228,10 @@ Image Symbol Table i.__scatterload_zeroinit 0x08000af4 Section 14 handlers.o(i.__scatterload_zeroinit) i.bordage 0x08000b04 Section 0 bordage.o(i.bordage) i.chavirement_handler 0x08000bac Section 0 chavirement.o(i.chavirement_handler) - i.chavirement_init 0x08000bd8 Section 0 chavirement.o(i.chavirement_init) - i.lire 0x08000bf4 Section 0 chavirement.o(i.lire) - i.main 0x08000c38 Section 0 principal.o(i.main) + i.chavirement_init 0x08000bd0 Section 0 chavirement.o(i.chavirement_init) + i.ecrire 0x08000bf4 Section 0 chavirement.o(i.ecrire) + i.lire 0x08000c34 Section 0 chavirement.o(i.lire) + i.main 0x08000c78 Section 0 principal.o(i.main) .data 0x20000000 Section 8 driver_spi.o(.data) .data 0x20000008 Section 4 mytimer.o(.data) .data 0x2000000c Section 2 principal.o(.data) @@ -352,12 +354,13 @@ Image Symbol Table __scatterload_null 0x08000af3 Thumb Code 2 handlers.o(i.__scatterload_null) __scatterload_zeroinit 0x08000af5 Thumb Code 14 handlers.o(i.__scatterload_zeroinit) bordage 0x08000b05 Thumb Code 146 bordage.o(i.bordage) - chavirement_handler 0x08000bad Thumb Code 44 chavirement.o(i.chavirement_handler) - chavirement_init 0x08000bd9 Thumb Code 20 chavirement.o(i.chavirement_init) - lire 0x08000bf5 Thumb Code 58 chavirement.o(i.lire) - main 0x08000c39 Thumb Code 30 principal.o(i.main) - Region$$Table$$Base 0x08000c5c Number 0 anon$$obj.o(Region$$Table) - Region$$Table$$Limit 0x08000c7c Number 0 anon$$obj.o(Region$$Table) + chavirement_handler 0x08000bad Thumb Code 36 chavirement.o(i.chavirement_handler) + chavirement_init 0x08000bd1 Thumb Code 28 chavirement.o(i.chavirement_init) + ecrire 0x08000bf5 Thumb Code 54 chavirement.o(i.ecrire) + lire 0x08000c35 Thumb Code 58 chavirement.o(i.lire) + main 0x08000c79 Thumb Code 34 principal.o(i.main) + Region$$Table$$Base 0x08000ca0 Number 0 anon$$obj.o(Region$$Table) + Region$$Table$$Limit 0x08000cc0 Number 0 anon$$obj.o(Region$$Table) sortieSPI 0x20000000 Data 8 driver_spi.o(.data) PtrF 0x20000008 Data 4 mytimer.o(.data) value 0x2000000c Data 2 principal.o(.data) @@ -372,9 +375,9 @@ Memory Map of the image Image Entry point : 0x08000105 - Load Region LR_1 (Base: 0x08000000, Size: 0x00000c90, Max: 0xffffffff, ABSOLUTE) + Load Region LR_1 (Base: 0x08000000, Size: 0x00000cd4, Max: 0xffffffff, ABSOLUTE) - Execution Region ER_RO (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x00000c7c, Max: 0xffffffff, ABSOLUTE) + Execution Region ER_RO (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x00000cc0, Max: 0xffffffff, ABSOLUTE) Exec Addr Load Addr Size Type Attr Idx E Section Name Object @@ -431,29 +434,30 @@ Memory Map of the image 0x08000af4 0x08000af4 0x0000000e Code RO 422 i.__scatterload_zeroinit mc_w.l(handlers.o) 0x08000b02 0x08000b02 0x00000002 PAD 0x08000b04 0x08000b04 0x000000a8 Code RO 295 i.bordage bordage.o - 0x08000bac 0x08000bac 0x0000002c Code RO 246 i.chavirement_handler chavirement.o - 0x08000bd8 0x08000bd8 0x0000001c Code RO 247 i.chavirement_init chavirement.o - 0x08000bf4 0x08000bf4 0x00000044 Code RO 249 i.lire chavirement.o - 0x08000c38 0x08000c38 0x00000024 Code RO 216 i.main principal.o - 0x08000c5c 0x08000c5c 0x00000020 Data RO 418 Region$$Table anon$$obj.o + 0x08000bac 0x08000bac 0x00000024 Code RO 249 i.chavirement_handler chavirement.o + 0x08000bd0 0x08000bd0 0x00000024 Code RO 250 i.chavirement_init chavirement.o + 0x08000bf4 0x08000bf4 0x00000040 Code RO 251 i.ecrire chavirement.o + 0x08000c34 0x08000c34 0x00000044 Code RO 252 i.lire chavirement.o + 0x08000c78 0x08000c78 0x00000028 Code RO 216 i.main principal.o + 0x08000ca0 0x08000ca0 0x00000020 Data RO 418 Region$$Table anon$$obj.o - Execution Region ER_RW (Exec base: 0x20000000, Load base: 0x08000c7c, Size: 0x00000014, Max: 0xffffffff, ABSOLUTE) + Execution Region ER_RW (Exec base: 0x20000000, Load base: 0x08000cc0, Size: 0x00000014, Max: 0xffffffff, ABSOLUTE) Exec Addr Load Addr Size Type Attr Idx E Section Name Object - 0x20000000 0x08000c7c 0x00000008 Data RW 94 .data driver_spi.o - 0x20000008 0x08000c84 0x00000004 Data RW 147 .data mytimer.o - 0x2000000c 0x08000c88 0x00000002 Data RW 217 .data principal.o - 0x2000000e 0x08000c8a 0x00000002 PAD - 0x20000010 0x08000c8c 0x00000004 Data RW 250 .data chavirement.o + 0x20000000 0x08000cc0 0x00000008 Data RW 94 .data driver_spi.o + 0x20000008 0x08000cc8 0x00000004 Data RW 147 .data mytimer.o + 0x2000000c 0x08000ccc 0x00000002 Data RW 217 .data principal.o + 0x2000000e 0x08000cce 0x00000002 PAD + 0x20000010 0x08000cd0 0x00000004 Data RW 253 .data chavirement.o - Execution Region ER_ZI (Exec base: 0x20000014, Load base: 0x08000c90, Size: 0x00000404, Max: 0xffffffff, ABSOLUTE) + Execution Region ER_ZI (Exec base: 0x20000014, Load base: 0x08000cd4, Size: 0x00000404, Max: 0xffffffff, ABSOLUTE) Exec Addr Load Addr Size Type Attr Idx E Section Name Object - 0x20000014 0x08000c90 0x00000004 PAD + 0x20000014 0x08000cd4 0x00000004 PAD 0x20000018 - 0x00000400 Zero RW 321 STACK startup_stm32f10x_md.o @@ -465,16 +469,16 @@ Image component sizes Code (inc. data) RO Data RW Data ZI Data Debug Object Name 178 22 0 0 0 1183 bordage.o - 140 18 0 4 0 1924 chavirement.o + 204 28 0 4 0 2513 chavirement.o 210 6 0 0 0 209488 driver_gpio.o 318 16 0 8 0 2880 driver_spi.o 464 46 0 4 0 4877 mytimer.o - 36 6 0 2 0 743 principal.o + 40 6 0 2 0 747 principal.o 36 8 236 0 1024 852 startup_stm32f10x_md.o 328 28 0 0 0 2149 system_stm32f10x.o ---------------------------------------------------------------------- - 1716 150 268 20 1028 224096 Object Totals + 1784 160 268 20 1028 224689 Object Totals 0 0 32 0 0 0 (incl. Generated) 6 0 0 2 4 0 (incl. Padding) @@ -527,15 +531,15 @@ Image component sizes Code (inc. data) RO Data RW Data ZI Data Debug - 2928 166 268 20 1028 223800 Grand Totals - 2928 166 268 20 1028 223800 ELF Image Totals - 2928 166 268 20 0 0 ROM Totals + 2996 176 268 20 1028 224341 Grand Totals + 2996 176 268 20 1028 224341 ELF Image Totals + 2996 176 268 20 0 0 ROM Totals ============================================================================== - Total RO Size (Code + RO Data) 3196 ( 3.12kB) + Total RO Size (Code + RO Data) 3264 ( 3.19kB) Total RW Size (RW Data + ZI Data) 1048 ( 1.02kB) - Total ROM Size (Code + RO Data + RW Data) 3216 ( 3.14kB) + Total ROM Size (Code + RO Data + RW Data) 3284 ( 3.21kB) ============================================================================== diff --git a/Keil_Commun/Local_Sources/principal.c b/Keil_Commun/Local_Sources/principal.c index f04ecb3..3a9a6db 100644 --- a/Keil_Commun/Local_Sources/principal.c +++ b/Keil_Commun/Local_Sources/principal.c @@ -6,6 +6,8 @@ #include "Driver_GPIO.h" #endif +#include "bordage.h" + uint16_t value = 0; int main(void) { @@ -16,6 +18,7 @@ int main(void) { //on init le système de chavirement chavirement_init(); + Roulis_Handler(); while (1) { //on lance le contrôle du chavirement diff --git a/Keil_Commun/Objects/bordage.o b/Keil_Commun/Objects/bordage.o index 73a326f..5eeacad 100644 Binary files a/Keil_Commun/Objects/bordage.o and b/Keil_Commun/Objects/bordage.o differ diff --git a/Keil_Commun/Objects/chavirement.crf b/Keil_Commun/Objects/chavirement.crf index 3f31339..56ee893 100644 Binary files a/Keil_Commun/Objects/chavirement.crf and b/Keil_Commun/Objects/chavirement.crf differ diff --git a/Keil_Commun/Objects/chavirement.o b/Keil_Commun/Objects/chavirement.o index a6826b8..caba1ab 100644 Binary files a/Keil_Commun/Objects/chavirement.o and b/Keil_Commun/Objects/chavirement.o differ diff --git a/Keil_Commun/Objects/driver_gpio.o b/Keil_Commun/Objects/driver_gpio.o index 2ce0acc..693b8ae 100644 Binary files a/Keil_Commun/Objects/driver_gpio.o and b/Keil_Commun/Objects/driver_gpio.o differ diff --git a/Keil_Commun/Objects/driver_spi.o b/Keil_Commun/Objects/driver_spi.o index e836987..5aa0378 100644 Binary files a/Keil_Commun/Objects/driver_spi.o and b/Keil_Commun/Objects/driver_spi.o differ diff --git a/Keil_Commun/Objects/mytimer.o b/Keil_Commun/Objects/mytimer.o index 4e3e7f7..1857849 100644 Binary files a/Keil_Commun/Objects/mytimer.o and b/Keil_Commun/Objects/mytimer.o differ diff --git a/Keil_Commun/Objects/principal.crf b/Keil_Commun/Objects/principal.crf index 4978ecb..2cbb7fe 100644 Binary files a/Keil_Commun/Objects/principal.crf and b/Keil_Commun/Objects/principal.crf differ diff --git a/Keil_Commun/Objects/principal.d b/Keil_Commun/Objects/principal.d index b2c351a..e2abb09 100644 --- a/Keil_Commun/Objects/principal.d +++ b/Keil_Commun/Objects/principal.d @@ -9,3 +9,4 @@ .\objects\principal.o: C:\Users\chauz\AppData\Local\Arm\Packs\ARM\CMSIS\5.7.0\CMSIS\Core\Include\cmsis_armcc.h .\objects\principal.o: C:\Users\chauz\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.3.0\Device\Include\system_stm32f10x.h .\objects\principal.o: ..\Drivers\Driver_GPIO.h +.\objects\principal.o: ..\Sources\bordage.h diff --git a/Keil_Commun/Objects/principal.o b/Keil_Commun/Objects/principal.o index 4294de2..d562623 100644 Binary files a/Keil_Commun/Objects/principal.o and b/Keil_Commun/Objects/principal.o differ diff --git a/Keil_Commun/Objects/projet_chavirement.axf b/Keil_Commun/Objects/projet_chavirement.axf index 110af0c..41147ef 100644 Binary files a/Keil_Commun/Objects/projet_chavirement.axf and b/Keil_Commun/Objects/projet_chavirement.axf differ diff --git a/Keil_Commun/Objects/projet_chavirement.build_log.htm b/Keil_Commun/Objects/projet_chavirement.build_log.htm index 352b398..eab9e0d 100644 --- a/Keil_Commun/Objects/projet_chavirement.build_log.htm +++ b/Keil_Commun/Objects/projet_chavirement.build_log.htm @@ -26,26 +26,11 @@ Project File Date: 11/05/2021

Output:

*** Using Compiler 'V5.06 update 7 (build 960)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin' -Rebuild target 'CarteSTM' -assembling startup_stm32f10x_md.s... +Build target 'CarteSTM' compiling chavirement.c... -compiling principal.c... -Local_Sources\principal.c(12): warning: #177-D: variable "i" was declared but never referenced - int i = 0; -Local_Sources\principal.c: 1 warning, 0 errors -compiling bordage.c... -compiling Driver_GPIO.c... -compiling Driver_SPI.c... -..\Drivers\Driver_SPI.c(79): warning: #550-D: variable "a" was set but never used - int a; -..\Drivers\Driver_SPI.c(100): warning: #177-D: variable "a" was declared but never referenced - int a; -..\Drivers\Driver_SPI.c: 2 warnings, 0 errors -compiling MyTimer.c... -compiling system_stm32f10x.c... linking... -Program Size: Code=2928 RO-data=268 RW-data=20 ZI-data=1028 -".\Objects\projet_chavirement.axf" - 0 Error(s), 3 Warning(s). +Program Size: Code=2996 RO-data=268 RW-data=20 ZI-data=1028 +".\Objects\projet_chavirement.axf" - 0 Error(s), 0 Warning(s).

Software Packages used:

@@ -76,7 +61,7 @@ Package Vendor: Keil Include file: RTE_Driver\Config\RTE_Device.h Source file: Device\Source\ARM\startup_stm32f10x_md.s Source file: Device\Source\ARM\STM32F1xx_OPT.s -Build Time Elapsed: 00:00:00 +Build Time Elapsed: 00:00:01 diff --git a/Keil_Commun/Objects/projet_chavirement.htm b/Keil_Commun/Objects/projet_chavirement.htm index 849d9ef..5abad5b 100644 --- a/Keil_Commun/Objects/projet_chavirement.htm +++ b/Keil_Commun/Objects/projet_chavirement.htm @@ -3,7 +3,7 @@ Static Call Graph - [.\Objects\projet_chavirement.axf]

Static Call Graph for image .\Objects\projet_chavirement.axf


-

#<CALLGRAPH># ARM Linker, 5060960: Last Updated: Mon Nov 08 19:23:43 2021 +

#<CALLGRAPH># ARM Linker, 5060960: Last Updated: Mon Nov 08 19:47:45 2021

Maximum Stack Usage = 168 bytes + Unknown(Cycles, Untraceable Function Pointers)

Call chain for Maximum Stack Depth:

@@ -90,7 +90,7 @@ Global Symbols

__main (Thumb, 0 bytes, Stack size unknown bytes, entry.o(.ARM.Collect$$$$00000000))
[Address Reference Count : 1]

-

_main_stk (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001)) +

_main_stk (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001))

_main_scatterload (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004))

[Calls]

-

_ll_shift_l (Thumb, 0 bytes, Stack size 0 bytes, llshl.o(.text), UNUSED) +

_ll_shift_l (Thumb, 0 bytes, Stack size 0 bytes, llshl.o(.text), UNUSED)

__aeabi_lasr (Thumb, 36 bytes, Stack size 0 bytes, llsshr.o(.text))

[Called By]

-

_ll_sshift_r (Thumb, 0 bytes, Stack size 0 bytes, llsshr.o(.text), UNUSED) +

_ll_sshift_r (Thumb, 0 bytes, Stack size 0 bytes, llsshr.o(.text), UNUSED) -

__I$use$fp (Thumb, 0 bytes, Stack size 0 bytes, iusefp.o(.text), UNUSED) +

__I$use$fp (Thumb, 0 bytes, Stack size 0 bytes, iusefp.o(.text), UNUSED)

_float_round (Thumb, 18 bytes, Stack size 0 bytes, fepilogue.o(.text))

[Called By]

-

_float_epilogue (Thumb, 92 bytes, Stack size 4 bytes, fepilogue.o(.text), UNUSED) +

_float_epilogue (Thumb, 92 bytes, Stack size 4 bytes, fepilogue.o(.text), UNUSED)

_double_round (Thumb, 30 bytes, Stack size 8 bytes, depilogue.o(.text))

[Stack]

-

MyGPIO_Reset (Thumb, 12 bytes, Stack size 0 bytes, driver_gpio.o(i.MyGPIO_Reset)) +

MyGPIO_Reset (Thumb, 12 bytes, Stack size 0 bytes, driver_gpio.o(i.MyGPIO_Reset))

[Called By]

MyGPIO_Set (Thumb, 8 bytes, Stack size 0 bytes, driver_gpio.o(i.MyGPIO_Set))

[Called By]

@@ -446,6 +448,7 @@ Global Symbols
[Calls]
[Called By]

SPI_activate_clock (Thumb, 54 bytes, Stack size 0 bytes, driver_spi.o(i.SPI_activate_clock)) @@ -462,12 +465,13 @@ Global Symbols
[Called By]

-

SPI_rcv (Thumb, 36 bytes, Stack size 0 bytes, driver_spi.o(i.SPI_rcv)) +

SPI_rcv (Thumb, 36 bytes, Stack size 0 bytes, driver_spi.o(i.SPI_rcv))

[Called By]

-

SPI_send (Thumb, 30 bytes, Stack size 0 bytes, driver_spi.o(i.SPI_send)) +

SPI_send (Thumb, 30 bytes, Stack size 0 bytes, driver_spi.o(i.SPI_send))

[Called By]

Set_Duty_Cycle (Thumb, 76 bytes, Stack size 8 bytes, mytimer.o(i.Set_Duty_Cycle)) @@ -503,11 +507,11 @@ Global Symbols
[Address Reference Count : 1]

-

__scatterload_copy (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_copy), UNUSED) +

__scatterload_copy (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_copy), UNUSED) -

__scatterload_null (Thumb, 2 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_null), UNUSED) +

__scatterload_null (Thumb, 2 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_null), UNUSED) -

__scatterload_zeroinit (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_zeroinit), UNUSED) +

__scatterload_zeroinit (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_zeroinit), UNUSED)

bordage (Thumb, 146 bytes, Stack size 56 bytes, bordage.o(i.bordage))

[Stack]