/// <summary> /// Чтение данных по указанному адресу с заполнением недостающих данных /// </summary> /// <returns></returns> public Byte[] ReadBufferFill(UInt32 addr, int size, Byte fill) { Byte[] data = null; while (size > 0) { // Поиск расположения данных в 64к регионах IntelHexRegion region = SearchRegion(addr); Byte[] block; int readSize; // Регион не существует для текущего адреса if (region != null) { // Чтение данных block = region.ReadFill(addr, size, fill); readSize = block.Length; } else { readSize = (size > IntelHexRegion.REGION_SIZE) ? IntelHexRegion.REGION_SIZE : size; block = Mem.Set(readSize, fill); } // Добавление данных к существующему буферу data = Mem.Concat(data, block); addr += (UInt32)readSize; size -= readSize; } // end while (перебор всего размера) return(data); }
/// <summary> /// Чтение данных по указанному адресу /// </summary> public Byte[] ReadBuffer(UInt32 addr, int size, out String error) { error = ""; // Поиск расположения данных в 64к регионах IntelHexRegion region = SearchRegion(addr); // Регион не существует для текущего адреса if (region == null) { error = IntelHexRegion.ErrorAddrText(addr); return(null); } Byte[] data = region.Read(addr, size); // Адрес не существует if (data == null) { return(null); } int readSize = data.Length; if (readSize != 0 && readSize < size) { // Буфер прочитан не весь: Часть переноситься на другой регион addr += (UInt32)readSize; Byte[] remain = ReadBuffer(addr, size - readSize, out error); if (remain == null) { return(null); } data = Mem.Concat(data, remain); } return(data); }