==
сравнивает ссылки на объекты в Java и не является исключением для объектов String
.
Для сравнения фактического содержимого объектов (в том числе String
) необходимо использовать equals
.
Если сравнение двух объектов String
с использованием ==
оказывается true
, это связано с тем, что объекты String
были интернированы, а виртуальная машина Java имеет несколько ссылки указывают на тот же экземпляр String
. Не следует ожидать сравнения одного объекта String
, содержащего то же содержимое, что и другой объект String
, используя ==
для оценки как true
.
С помощью gcc
вы можете добавить атрибут секции к переменным. Исходя из этого, переменная затем переносится на конкретный сеанс.
В качестве примера. Предположим, у вас большой массив:
#define BUF_SIZE 2048
__attribute__ ((section(".buffers"), used))
uint8_t pipe_buffer[BUF_SIZE];
Затем вы добавляете секцию в сценарий загрузчика и назначаете ее в определенную область памяти ( RAM_D3 ] в этом случае):
.buffers(NOLOAD) : {
. = ALIGN(4);
*(.buffers*)
} > RAM_D3
Таким образом, буферы заканчиваются в RAM_D3 .
NOLOAD
вы ввели в linkerscript? Является ли это признаком того, что этот раздел похож на разделbss
: не инициализирован? Если это так, то почему секцияbss
начинается следующим образом:.bss : {...}
вместо.bss(NOLOAD) : {...}
? – K.Mulier 13 July 2018 в 11:57(NOLOAD)
не требуется. Загрузка относится к процессу загрузки исполняемого файла, находящегося на диске в память. Для MCU исполняемый файл находится во FLASH. Поэтому ни один из разделов не может быть загружен. – Codo 13 July 2018 в 13:10malloc
, которая принимает дополнительный параметр для выбора раздела RAM (SDK для ESP32 предоставляет такую функцию) 3. Вы назначаете значение 0x38000000 указателю. Тогда у вас есть массив в RAM_D3. 4. Еще кое-что, о чем вы можете подумать ... STMicro, похоже, не предоставляет какой-либо конкретной поддержки. Если я не ошибаюсь, MCU может также использовать внешнее ОЗУ. Это снова изменило бы историю. – Codo 13 July 2018 в 13:16