我以为我对 X-macros 理解得很好,但这真的难倒我。我定义了以下代码:
#define FOR_DESCR_STRINGS(apply) \
apply(LANGUAGE_ID_STRING, "\0x04\0x03\0x09\0x04") \
apply(MANUFACTURER_STRING, "Quest Engineering & Development, Inc.") \
apply(PRODUCT_STRING, "PowerExpander Eq10E") \
apply(SERIAL_NUMBER_STRING, "\0x00") \
apply(MS_OS_COMPAT_STRING "MSFT100\0xFF")
#define SELECT_DESCR_STRING_ID(a, b) a,
#define SELECT_DESCR_STRING(a, b) b
#define SELECT_DESCR_STRING_PTR(a, b) b,
enum
{
FOR_DESCR_STRINGS(SELECT_DESCR_STRING_ID)
DESCR_STRING_CNT
};
const uint8_t DESCR_STRINGS[][] = /* Array of Descriptor Strings */
{FOR_DESCR_STRINGS(SELECT_DESCR_STRING)};
const uint8_t* DESCR_STRING_PTRS[] = /* Array of Descriptor String Ptrs */
{FOR_DESCR_STRINGS(SELECT_DESCR_STRING_PTR)};
我希望字符串和指针进入闪存,但我最终得到的是 .rodata,其中指针和字符串在 C 启动代码期间被复制到 RAM。有没有办法在这里做我想做的事情(定义多个字符串并定义指向字符串的指针数组),以便它们留在闪存中并且在仍然使用 X 宏时不会复制到 RAM 中?谢谢,