Сделал возможность создавать переменные и ассоциировать их с памятью. Обычные переменные шел позволяет читать\писать (командами шелла, я выше где-то постил), но вот писать по произвольному месту в памяти - такого я не делал. Не знакл, как.
А сейчас придумал. Допустим, мы хотим иметь доступ к памяти по адресу 0x3fce4000 , как будто у нас там “unsigned int“, а еще мы хотим доступ к памяти 0x3fce4004, как будто у нас там массив на 64 unsigned int.
Создаем две переменные: foo и bar
Теперь можно смотреть значение в памяти, как значение переменной. Можно менять теми же командами. Например: вывести текущее значение , поменять его на 10, и проверить, записалось ли:
А вот наш массив, переменная bar. Доступ к отдельным элементам массива - так же, как и раньше: “var bar[666] 10“ ← установить 666-й элемент в значение 10.
Поддерживаются следующие типы: скалярные (“uint16_t“, “signed short int“, “unsigned long“ и тому подобные), указатели (“signed short *“, например), массивы (“int [ \] “), массивы указателей: (“void x [ \]“ , звездочка вместо x) и .и.п.
Зачем я это сделал: я сейчас ковыряюсь со структурами в памяти (драйвер WiFi). Структуры эти - осмысленные, а не просто байтовый дамп, и мне хотелось не просто смотреть память в виде C-типов, но и писать в память. Писать, не задумываясь о порядке байтов и прочем.
Можно, например, замаппить переменную на регистры UARTа и лазить по ним, как по массиву.
Пока еще мелкию огрехи вылазят наружу, но думаю, скоро допилу и закоммичу.