Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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);
        }