буфер — Как я могу узнать, пустой ли адрес памяти, с которого я читаю, или нет в C ++?

Поэтому во встроенной системе я читаю и записываю некоторые целые числа во флэш-память. Я могу прочитать это с помощью этой функции:

read(uint32_t *buffer, uint32_t num_words){
uint32_t startAddress = FLASH_SECTOR_7;

for(uint32_t i = 0; i < num_words; i++){
buffer[i] = *(uint32_t *)(startAddress + (i*4));
}
}

затем

uint32_t buf[10];
read(buf,10);

Как я могу знать, если buff[5] пусто (на нем что-нибудь есть) или нет?

Прямо сейчас на пустые предметы я получаю что-то вроде этого 165 '¥' или это 255 'ÿ'

Есть ли способ узнать это?

1

Решение

Сначала вам нужно определить «пустой», так как вы используете uint32_t. Хорошая идея — использовать ценность 0xFFFFFFFF (Десятичное число 4294967295) будет пустым значением, но вы должны быть уверены, что это значение не используется для других целей. Тогда вы можете проверить, если if ( buf [ 5 ] == 0xFFFFFFFF ),

Но если вы используете весь диапазон uint32_t, то нет способа определить, пусто ли оно.

Другой способ — использовать структуры и определять пустой бит.

struct uint31_t
{
uint32_t empty : 0x01; // If set, then uint31_t.value is empty
uint32_t value : 0x1F;
};

Затем вы можете проверить, установлен ли пустой бит, но отрицательной частью является то, что вы потеряете весь бит.

3

Другие решения

Если ваш массив представляет собой массив указателей, вы можете проверить его, сравнив его с {nullptr}в противном случае вы не сможете, если не инициализируете все начальные индексы одним и тем же значением, а затем проверите, является ли значение все тем же.

1

По вопросам рекламы [email protected]