Beispiel #1
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);
        }