Skip to content

Commit d07fe65

Browse files
committed
Fix no_flash build
Move default time_critical section, and store correctly
1 parent f0b5966 commit d07fe65

File tree

4 files changed

+31
-6
lines changed

4 files changed

+31
-6
lines changed

src/rp2_common/pico_crt0/rp2040/memmap_no_flash.ld

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ SECTIONS
5151
__embedded_block_end = .;
5252
. = ALIGN(256);
5353
KEEP (*(.vectors))
54-
*(.time_critical*)
5554
*(.text*)
5655
. = ALIGN(4);
5756
*(.init)
@@ -108,6 +107,9 @@ SECTIONS
108107
.data : {
109108
__data_start__ = .;
110109
*(vtable)
110+
111+
*(.time_critical*)
112+
111113
*(.data*)
112114

113115
. = ALIGN(4);

src/rp2_common/pico_crt0/rp2040/memmap_sram.template.ld

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ SECTIONS
5151
__embedded_block_end = .;
5252
. = ALIGN(256);
5353
KEEP (*(.vectors))
54-
*(.time_critical*)
5554
*(.text*)
5655
. = ALIGN(4);
5756
*(.init)
@@ -108,6 +107,9 @@ SECTIONS
108107
.data : {
109108
__data_start__ = .;
110109
*(vtable)
110+
111+
*(.time_critical*)
112+
111113
*(.data*)
112114

113115
. = ALIGN(4);

src/rp2_common/pico_standard_link/CMakeLists.txt

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -168,21 +168,31 @@ if (NOT TARGET pico_standard_link)
168168
pico_set_modified_binary_type(${TARGET} ${TYPE} RAM ${XIP_SRAM_BASE} ${XIP_SRAM_END}-${XIP_SRAM_BASE}-4k SCRATCH_X ${XIP_SRAM_END}-4k 2k SCRATCH_Y ${XIP_SRAM_END}-2k 2k)
169169
return()
170170
elseif (TYPE STREQUAL "no_flash_using_xip_ram" OR TYPE STREQUAL "copy_to_ram_using_xip_ram")
171-
function(pico_internal_add_xip_text_section)
171+
function(pico_internal_add_xip_text_section STORE_AT)
172172
set(ADDITIONAL_PRE_DATA "set(ADDITIONAL_PRE_DATA \"
173173
.xip_text : {
174174
__xip_ram_text_start__ = .;
175175
. = ALIGN(4);
176176
*(.time_critical.text*)
177177
. = ALIGN(4);
178178
__xip_ram_text_end__ = .;
179-
} > XIP_RAM AT> FLASH
179+
} > XIP_RAM ${STORE_AT}
180180
__xip_ram_text_source__ = LOADADDR(.xip_text);\")" PARENT_SCOPE)
181181

182182
pico_get_addressmap_value(XIP_SRAM_BASE)
183183
pico_get_addressmap_value(XIP_SRAM_END)
184184
set(ADDITIONAL_MEMORY "set(ADDITIONAL_MEMORY \" XIP_RAM(rwx) : ORIGIN = ${XIP_SRAM_BASE}, LENGTH = ${XIP_SRAM_END} - ${XIP_SRAM_BASE}\")" PARENT_SCOPE)
185185
endfunction()
186+
function(pico_internal_add_xip_text_section_no_flash)
187+
pico_internal_add_xip_text_section("")
188+
set(ADDITIONAL_PRE_DATA ${ADDITIONAL_PRE_DATA} PARENT_SCOPE)
189+
set(ADDITIONAL_MEMORY ${ADDITIONAL_MEMORY} PARENT_SCOPE)
190+
endfunction()
191+
function(pico_internal_add_xip_text_section_copy_to_ram)
192+
pico_internal_add_xip_text_section("AT> FLASH")
193+
set(ADDITIONAL_PRE_DATA ${ADDITIONAL_PRE_DATA} PARENT_SCOPE)
194+
set(ADDITIONAL_MEMORY ${ADDITIONAL_MEMORY} PARENT_SCOPE)
195+
endfunction()
186196
target_compile_definitions(${TARGET} PRIVATE PICO_DATA_COPY_EXTRA_SECTIONS_FILE="data_cpy_xip_text.S" PICO_USE_XIP_CACHE_AS_RAM=1)
187197
file(CONFIGURE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/data_cpy_xip_text.S CONTENT "
188198
.word __xip_ram_text_source__
@@ -191,9 +201,9 @@ if (NOT TARGET pico_standard_link)
191201
" @ONLY)
192202
target_include_directories(${TARGET} PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
193203
if (TYPE STREQUAL "no_flash_using_xip_ram")
194-
pico_set_modified_binary_type(${TARGET} sram EXTRAS pico_internal_add_xip_text_section)
204+
pico_set_modified_binary_type(${TARGET} sram EXTRAS pico_internal_add_xip_text_section_no_flash)
195205
elseif (TYPE STREQUAL "copy_to_ram_using_xip_ram")
196-
pico_set_modified_binary_type(${TARGET} copy_flash_sram EXTRAS pico_internal_add_xip_text_section)
206+
pico_set_modified_binary_type(${TARGET} copy_flash_sram EXTRAS pico_internal_add_xip_text_section_copy_to_ram)
197207
endif()
198208
return()
199209
endif()

test/pico_xip_sram_test/CMakeLists.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,15 @@ if (NOT PICO_RP2040)
1313
target_link_libraries(pico_critical_xip_sram_test PRIVATE hardware_riscv_platform_timer)
1414
endif()
1515
pico_set_binary_type(pico_critical_xip_sram_test copy_to_ram_using_xip_ram)
16+
pico_enable_stdio_usb(pico_critical_xip_sram_test 1) # test with USB as that invokes flash functions
1617
pico_add_extra_outputs(pico_critical_xip_sram_test)
18+
19+
# Use XIP SRAM for time critical functions (no_flash build)
20+
add_executable(pico_critical_xip_sram_test_no_flash pico_critical_xip_sram_test.c)
21+
target_link_libraries(pico_critical_xip_sram_test_no_flash PRIVATE pico_stdlib pico_multicore hardware_dma)
22+
if (NOT PICO_RP2040)
23+
target_link_libraries(pico_critical_xip_sram_test_no_flash PRIVATE hardware_riscv_platform_timer)
24+
endif()
25+
pico_set_binary_type(pico_critical_xip_sram_test_no_flash no_flash_using_xip_ram)
26+
pico_enable_stdio_usb(pico_critical_xip_sram_test 1)
27+
pico_add_extra_outputs(pico_critical_xip_sram_test_no_flash)

0 commit comments

Comments
 (0)