Поэтому во встроенной системе я читаю и записываю некоторые целые числа во флэш-память. Я могу прочитать это с помощью этой функции:
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 'ÿ'
Есть ли способ узнать это?
Сначала вам нужно определить «пустой», так как вы используете 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;
};
Затем вы можете проверить, установлен ли пустой бит, но отрицательной частью является то, что вы потеряете весь бит.
Если ваш массив представляет собой массив указателей, вы можете проверить его, сравнив его с {nullptr}
в противном случае вы не сможете, если не инициализируете все начальные индексы одним и тем же значением, а затем проверите, является ли значение все тем же.