Skip to content

Commit 20c69bd

Browse files
Warn when using PSRAM on non-PSRAM boards (#2441)
Avoid link errors with a warning message and always-failing calls to pmalloc/pcalloc. Addresses #2439
1 parent a9b3902 commit 20c69bd

File tree

4 files changed

+17
-5
lines changed

4 files changed

+17
-5
lines changed

cores/rp2040/Arduino.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,15 @@ extern "C" {
5858
void interrupts();
5959
void noInterrupts();
6060

61+
// Only implemented on some RP2350 boards, not the OG Pico 2
6162
#ifdef RP2350_PSRAM_CS
6263
void *pmalloc(size_t size);
6364
void *pcalloc(size_t count, size_t size);
65+
#else
66+
[[deprecated("This chip does not have PSRAM, pmalloc will always fail")]] void *pmalloc(size_t size);
67+
[[deprecated("This chip does not have PSRAM, pcalloc will always fail")]] void *pcalloc(size_t count, size_t size);
6468
#endif
6569

66-
6770
// AVR compatibility macros...naughty and accesses the HW directly
6871
#define digitalPinToPort(pin) (0)
6972
#define digitalPinToBitMask(pin) (1UL << (pin))

cores/rp2040/RP2040Support.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ class RP2040 {
253253
}
254254

255255
inline int getUsedPSRAMHeap() {
256-
#if defined(PICO_RP2350)
256+
#if defined(RP2350_PSRAM_CS)
257257
extern size_t __psram_total_used();
258258
return __psram_total_used();
259259
#else
@@ -262,7 +262,7 @@ class RP2040 {
262262
}
263263

264264
inline int getTotalPSRAMHeap() {
265-
#if defined(PICO_RP2350)
265+
#if defined(RP2350_PSRAM_CS)
266266
extern size_t __psram_total_space();
267267
return __psram_total_space();
268268
#else
@@ -290,7 +290,7 @@ class RP2040 {
290290
}
291291

292292
inline size_t getPSRAMSize() {
293-
#if defined(PICO_RP2350)
293+
#if defined(RP2350_PSRAM_CS)
294294
extern size_t __psram_size;
295295
return __psram_size;
296296
#else

cores/rp2040/malloc-lock.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,15 @@ extern "C" void *pcalloc(size_t count, size_t size) {
7373
interrupts();
7474
return rc;
7575
}
76+
#else
77+
// No PSRAM, always fail
78+
extern "C" void *pmalloc(size_t size) {
79+
return nullptr;
80+
}
81+
82+
extern "C" void *pcalloc(size_t count, size_t size) {
83+
return nullptr;
84+
}
7685
#endif
7786

7887
extern "C" void *__wrap_realloc(void *mem, size_t size) {

keywords.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,4 +105,4 @@ OUTPUT_12MA LITERAL1
105105

106106
ARDUINO_ARCH_RP2040 LITERAL1
107107

108-
PRAM LITERAL1
108+
PSRAM LITERAL1

0 commit comments

Comments
 (0)