75 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| MEMORY {
 | |
|     /*
 | |
|      * The RP2350 has either external or internal flash.
 | |
|      *
 | |
|      * 2 MiB is a safe default here, although a Pico 2 has 4 MiB.
 | |
|      */
 | |
|     FLASH : ORIGIN = 0x10000000, LENGTH = 2048K
 | |
|     /*
 | |
|      * RAM consists of 8 banks, SRAM0-SRAM7, with a striped mapping.
 | |
|      * This is usually good for performance, as it distributes load on
 | |
|      * those banks evenly.
 | |
|      */
 | |
|     RAM : ORIGIN = 0x20000000, LENGTH = 512K
 | |
|     /*
 | |
|      * RAM banks 8 and 9 use a direct mapping. They can be used to have
 | |
|      * memory areas dedicated for some specific job, improving predictability
 | |
|      * of access times.
 | |
|      * Example: Separate stacks for core0 and core1.
 | |
|      */
 | |
|     SRAM4 : ORIGIN = 0x20080000, LENGTH = 4K
 | |
|     SRAM5 : ORIGIN = 0x20081000, LENGTH = 4K
 | |
| }
 | |
| 
 | |
| SECTIONS {
 | |
|     /* ### Boot ROM info
 | |
|      *
 | |
|      * Goes after .vector_table, to keep it in the first 4K of flash
 | |
|      * where the Boot ROM (and picotool) can find it
 | |
|      */
 | |
|     .start_block : ALIGN(4)
 | |
|     {
 | |
|         __start_block_addr = .;
 | |
|         KEEP(*(.start_block));
 | |
|     } > FLASH
 | |
| 
 | |
| } INSERT AFTER .vector_table;
 | |
| 
 | |
| /* move .text to start /after/ the boot info */
 | |
| _stext = ADDR(.start_block) + SIZEOF(.start_block);
 | |
| 
 | |
| SECTIONS {
 | |
|     /* ### Picotool 'Binary Info' Entries
 | |
|      *
 | |
|      * Picotool looks through this block (as we have pointers to it in our
 | |
|      * header) to find interesting information.
 | |
|      */
 | |
|     .bi_entries : ALIGN(4)
 | |
|     {
 | |
|         /* We put this in the header */
 | |
|         __bi_entries_start = .;
 | |
|         /* Here are the entries */
 | |
|         KEEP(*(.bi_entries));
 | |
|         /* Keep this block a nice round size */
 | |
|         . = ALIGN(4);
 | |
|         /* We put this in the header */
 | |
|         __bi_entries_end = .;
 | |
|     } > FLASH
 | |
| } INSERT AFTER .text;
 | |
| 
 | |
| SECTIONS {
 | |
|     /* ### Boot ROM extra info
 | |
|      *
 | |
|      * Goes after everything in our program, so it can contain a signature.
 | |
|      */
 | |
|     .end_block : ALIGN(4)
 | |
|     {
 | |
|         __end_block_addr = .;
 | |
|         KEEP(*(.end_block));
 | |
|     } > FLASH
 | |
| 
 | |
| } INSERT AFTER .uninit;
 | |
| 
 | |
| PROVIDE(start_to_end = __end_block_addr - __start_block_addr);
 | |
| PROVIDE(end_to_start = __start_block_addr - __end_block_addr);
 |