Pull to refresh
47
0
Андрей @andreili

Инженер-программист

Send message
Речь шла о удалении файлов в файловой системе. Во всех их в таком случае в соответствующей записи просто выставляется бит «удалён». Перемещение файла в другой каталог в пределах одного диска — смена указателя на «родительский» элемент.
Так что при удалении файла в системе он не затрётся нулями/единицами полностью — об этом и был предыдущий комментарий.

PS: Если не верите — покурите исходники имеющихся ФС (Ext, FAT, NTFS).
Ну блин, не путайте понятия — UEFI != EUFI (вообще без понятия, откуда такая аббревиатура). Unified Extensible Firmware Interface.
В EFI вообще нет понятия «загрузчик» — загружается некое EFI-приложение, которое может быть чем угодно (memtest, Linux kernel, Windows loader).
Пффф. В 1 чипе уже 1Тб есть — это ещё в пределах NDA :) TLC, не QLC.
Вы совершенно правы :)
Ячейки хранят только 2/4/8/16 бит, а все контрольные суммы и прочее реализуются просто избыточными данными. Ведь при каждом уплотнении данных повышается вероятность ошибок при чтении. Потому приходится писать всё больше и больше этих данных. И да — место для хранения этих данных заложено в NAND архитектурно. Посмотрите любой открытый ДШ даже на старые чипы — там все блоки идут как (X + Y), где X предназначено для хранения полезных данных, а Y — как раз резерв для метаданных, перемешанных с полезной нагрузкой.
А вот тут Вы не правы — говорю это как один из разработчиков SSD.
QLC — как раз-таки 4 бита на ячейку.
Если чисто с металлизацией полноценной — вполне. На радиокоте есть топик.
Вполне просто. Я уже несколько лет практикую. Заказываю у китайцев, само собой.
Пока что верх сложности у меня — BGA с шагом 0.5мм и разводка чипа SDRAM на частотах 433МГц. Вроде бы даже работает :)
Тут есть нюанс. В разных средах при импорте NetList-а в плату компоненты, не имеющие пары в схеме, с платы будут удалены. Да, это опционально, но нервы попортит. В KiCAD, например, все монтажные элементы должны иметь элемент схемы, что бы избежать этого сценария (да, по-умолчанию эта галочка сброшена, но всё-таки).
Там на странице написано:
MSATA SSD (поддержка 1x mSATA SSD, 1x2,5 дюйма HDD/SSD)
Ну не знаю, не знаю. Но у нас на Gen4 аналоговая часть очень даже большая на кристалле получается.
Скажу больше — все эти ВОЛС и PCIe имеют неплохую аналоговую составляющую. В обоих случаях для уплотнения данных используются «созвездия», то есть за один такт передаётся набор бит, закодированных уровнем сигнала.
Сидел, несколько дней недель крутил эту идею и для себя сделал вот так:
template<std::uint32_t base_addr>
class PerBase
{
public:
	static inline void* get_ptr() { return (reinterpret_cast<void*>(base_addr)); }
};

template<typename BaseType, volatile std::uint32_t BaseType::periph_t::* field, typename RegType>
class RegBase
{
public:
	RegType	value;
	void Read()
	{
		value.dw = get_value();
	}
	void Write()
	{
		set_value(value.dw);
	}
	static std::uint32_t get_value()
	{
		return (reinterpret_cast<typename BaseType::periph_t*>(BaseType::get_ptr()))->*field;
	}
	static void set_value(std::uint32_t value)
	{
		(reinterpret_cast<typename BaseType::periph_t*>(BaseType::get_ptr()))->*field = value;
	}
};

template <typename Register, typename Type, std::uint32_t width, std::uint32_t offset>
class ValBase
{
private:
	constexpr static std::uint32_t Mask = ((1U << width) - 1U);
	constexpr static std::uint32_t Offset = offset;
public:
	static Type Get()
	{
		std::uint32_t value = Register::get_value();
		return static_cast<Type>((value >> Offset) & Mask);
	}
	static void Set(Type value)
	{
		std::uint32_t old_value = Register::get_value() & ~(Mask << Offset);
		std::uint32_t new_value = (static_cast<std::uint32_t>(value) << Offset);
		Register::set_value(old_value | new_value);
	}
};

/* Reset and clock control */
class RCC_REG : public PerBase<RCC_BASE>
{
public:
	struct periph_t
	{
		__O  std::uint32_t	CR;
		__O  std::uint32_t	CFGR;
		__O  std::uint32_t	CIR;
		__IO std::uint32_t	APB2RSTR;
		__IO std::uint32_t	APB1RSTR;
		__IO std::uint32_t	AHBENR;
		__IO std::uint32_t	APB2ENR;
		__IO std::uint32_t	APB1ENR;
		__O  std::uint32_t	BDCR;
		__O  std::uint32_t	CSR;
	};
	union CR_t
	{
		uint32_t dw;
		struct
		{
			bool          HSION          :  1;	/* Internal High Speed clock enable */
			bool          HSIRDY         :  1;	/* Internal High Speed clock ready flag */
			std::uint32_t                :  1;
			std::uint32_t HSITRIM        :  5;	/* Internal High Speed clock trimming */
			std::uint32_t HSICAL         :  8;	/* Internal High Speed clock Calibration */
			bool          HSEON          :  1;	/* External High Speed clock enable */
			bool          HSERDY         :  1;	/* External High Speed clock ready flag */
			bool          HSEBYP         :  1;	/* External High Speed clock Bypass */
			bool          CSSON          :  1;	/* Clock Security System enable */
			std::uint32_t                :  4;
			bool          PLLON          :  1;	/* PLL enable */
			bool          PLLRDY         :  1;	/* PLL clock ready flag */
			std::uint32_t                :  6;
		} bt;
	};
	union CFGR_t
	{
		struct
		{
			std::uint32_t SW             :  2;	/* System clock Switch */
			std::uint32_t SWS            :  2;	/* System Clock Switch Status */
			std::uint32_t HPRE           :  4;	/* AHB prescaler */
			std::uint32_t PPRE1          :  3;	/* APB Low speed prescaler (APB1) */
			std::uint32_t PPRE2          :  3;	/* APB High speed prescaler (APB2) */
			std::uint32_t ADCPRE         :  2;	/* ADC prescaler */
			std::uint32_t PLLSRC         :  1;	/* PLL entry clock source */
			std::uint32_t PLLXTPRE       :  1;	/* HSE divider for PLL entry */
			std::uint32_t PLLMUL         :  4;	/* PLL Multiplication Factor */
			std::uint32_t OTGFSPRE       :  1;	/* USB OTG FS prescaler */
			std::uint32_t                :  1;
			std::uint32_t MCO            :  3;	/* Microcontroller clock output */
			std::uint32_t                :  5;
		} bt;
		uint32_t dw;
	};
public:

	class CR : public RegBase<RCC_REG, &periph_t::CR, CR_t>
	{
	public:
		using HSION = ValBase<CR, bool, 1, 0>;
		using HSIRDY = ValBase<CR, bool, 1, 1>;
		using HSITRIM = ValBase<CR, std::uint32_t, 5, 3>;
	};

	/*Clock configuration register (RCC_CFGR)*/
	class CFGR : public RegBase<RCC_REG, &periph_t::CFGR, CFGR_t>
	{
	public:
		using SWS = ValBase<CFGR, std::uint32_t, 2, 2>;
	};
};

Как пример использования (абстрактный код, использовался для проверок компиляции):
	STMX::RCC_REG::CR cr;
	cr.Read();
	cr.value.bt.HSITRIM = 5;
	cr.value.bt.HSION = true;
	cr.Write();
	
	while (STMX::RCC_REG::CFGR::SWS::Get() == 1);

После компиляции получил следующее:
080000ec <App::entry_point()>:
_ZN3App11entry_pointEv():
 80000ec:	4907      	ldr	r1, [pc, #28]	; (800010c <App::entry_point()+0x20>)
 80000ee:	680b      	ldr	r3, [r1, #0]
 80000f0:	f003 0206 	and.w	r2, r3, #6
 80000f4:	f042 0229 	orr.w	r2, r2, #41	; 0x29
 80000f8:	f362 0307 	bfi	r3, r2, #0, #8
 80000fc:	4a04      	ldr	r2, [pc, #16]	; (8000110 <App::entry_point()+0x24>)
 80000fe:	600b      	str	r3, [r1, #0]
 8000100:	6813      	ldr	r3, [r2, #0]
 8000102:	f3c3 0381 	ubfx	r3, r3, #2, #2
 8000106:	2b01      	cmp	r3, #1
 8000108:	d0fa      	beq.n	8000100 <App::entry_point()+0x14>
 800010a:	e7fe      	b.n	800010a <App::entry_point()+0x1e>
 800010c:	40021000 	.word	0x40021000
 8000110:	40021004 	.word	0x40021004

Как ни крутил, так и не смог избавиться от хранения 2-х адресов в памяти.
Да, пока что без уникальных перечислений, но я только базис сделал.
Основная цель — уменьшение кода в более обычных сценариях вида «прочитать-модифицировать_поля-записать-модифицировать-записать».
Позже модифицирую свой генератор под данные шаблоны — удобнее, чем имеющиеся в данный момент.
И да — код не претендует на образцовость, поскольку с шаблонами знаком поверхностно…
Меня, с моим недо-сервером это коснулось — утром прилетел e-mail от них о необходимости обновления сертификатов.
Придётся обновлять, иначе скоро протухнут:
If you're not able to renew your certificate by March 4, the date we are
required to revoke these certificates, visitors to your site will see security
warnings until you do renew the certificate. Your ACME client documentation
should explain how to renew.
Я собеседование проходил по скайпу, отдыхая в Таиланде :) Работодатель вообще не требовал личной явки в офис вплоть до подписания договора в первый рабочий день. 3 часа беседы предметно, минут 15 о оплате — и всё…
Пользуюсь XShell. Не на электроне, но под винду. Для дома/образования — бесплатно.
Проблем ни разу не было замечено, выхлоп любых масштабов спокойно принимает — контролировал через него сборку Gentoo, там текста высирается неимоверное количество.
Если вкратце, вот так вот вылетает:
Имя сбойного приложения: WindowsTerminal.exe, версия: 0.0.0.0, метка времени: 0x5d0f34a5
Имя сбойного модуля: Windows.UI.Xaml.dll, версия: 10.0.17763.592, метка времени: 0x6084c5a3
Код исключения: 0xc0000005
Смещение ошибки: 0x0000000000340ccc
Идентификатор сбойного процесса: 0x2498
Время запуска сбойного приложения: 0x01d5299bd04be6a1
Путь сбойного приложения: D:\Projects\M$\terminal\src\cascadia\CascadiaPackage\bin\x64\Debug\AppX\WindowsTerminal.exe
Путь сбойного модуля: C:\Windows\System32\Windows.UI.Xaml.dll
Идентификатор отчета: 5eee70eb-6ab4-4c31-8933-3abe92cd950e
Полное имя сбойного пакета: WindowsTerminalDev_0.0.1.0_x64__8wekyb3d8bbwe
Код приложения, связанного со сбойным пакетом: App

Ошибка начинается здесь:
image
Оно не получает объект и крашится.
Попробовал собрать из сырцов — на SDK для Windows 10 1809 ругается:
Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка MIDL2011 [msg]unresolved type declaration [context]: Windows.UI.Xaml.Markup.IXamlMetadataProvider [ RuntimeClass 'TerminalApp.XamlMetaDataProvider' ] TerminalApp D:\Projects\M$\terminal\src\cascadia\TerminalApp\x64\Release\XamlMetaDataProvider.idl 6

Это было из-за сборки части проекта с другим SDK — почистил, собираю дальше.
Позже отпишусь ;)
Нет, его не было изначально в принципе, цитирую из Вики:
Windows 10 «Корпоративная с долгосрочным обслуживанием» (англ. Enterprise LTSC, ранее — Enterprise LTSB)[97] — специальный вариант «Корпоративной», отличается от остальных редакций долгосрочной поддержкой одной версии и отсутствием Магазина и UWP приложений (кроме приложения «Параметры»).

Если точнее, то у меня стоит Windows 10 Enterpise LTSC N — нет Media Player и Groove. Всё равно не пользуюсь ими, зачем систему захламлять?
А если в моей системе нет магазина? Только ручками собирать придётся, видимо…
Спасибо, значит будем рвать.
Вопрос тогда по оставшимся двум — они пока вроде бы целые, но имеют такие же проблемы с оголением шейки зуба. Ну и из-за них остальные зубы сдвинулись, почти полностью вытеснив по 1 резцу с каждой челюсти. Все зубы мудрости у меня — вылезли полностью и участвуют в прикусе. Самая большая проблема — плотно стоящие почти все зубы, из-за чего невозможно прочистить их полностью. В 2-х местах уже был кариес как раз в таких вот местах, сразу на 2 зуба.

Information

Rating
Does not participate
Location
Светлогорск, Гомельская обл., Беларусь
Date of birth
Registered
Activity