Дневник копошений с Minos
Дневник копошений с Minos
Описание модулей ZbL (являющегося урезанной версией Minos, например, без планировщика) пока длится 20 календарных дней.
Достигнутый на данный момент результат можно увидеть здесь:
https://tvoygit.ru/budden/jaos/src/bran ... С.фок#L105
Текущая цель проекта крайне скромна:
* ✓ завершаем описание модулей Minos, входящих в ZbL
* - (не будем ждать) ждём, пока чел, ради которого всё это началось, снова спросит
* если будет совсем не лень, то пробуем запустить планировщик задач и сделать две задачи, которые печатают буковки
Вот сегодня не совсем лень, можно попробовать.
Достигнутый на данный момент результат можно увидеть здесь:
https://tvoygit.ru/budden/jaos/src/bran ... С.фок#L105
Текущая цель проекта крайне скромна:
* ✓ завершаем описание модулей Minos, входящих в ZbL
* - (не будем ждать) ждём, пока чел, ради которого всё это началось, снова спросит
* если будет совсем не лень, то пробуем запустить планировщик задач и сделать две задачи, которые печатают буковки
Вот сегодня не совсем лень, можно попробовать.
Последний раз редактировалось БудДен 16.10.23 20:36, всего редактировалось 1 раз.
-
- Site Admin
- Сообщения: 53
- Зарегистрирован: 25.04.18 15:17
Re: Дневник копошений с Minos
Завершил описание модулей ZbL, теперь хотим запустить Minos.Mos - в ней находится планировщик Minos.
Сделал ветку восстановление-minos . Какие ещё модули нужны?
IMPORT SYSTEM, Kernel, R := Reset, Device, Modules, Log, OFS, Strings, Platform, Interrupts, Tools, Trace, Heaps, UartConstants, Memory, IoControl, SerialLog;
Сделал ветку восстановление-minos . Какие ещё модули нужны?
IMPORT SYSTEM, Kernel, R := Reset, Device, Modules, Log, OFS, Strings, Platform, Interrupts, Tools, Trace, Heaps, UartConstants, Memory, IoControl, SerialLog;
Re: Дневник копошений с Minos
опс, перелогинился.
Re: Дневник копошений с Minos
IMPORT SYSTEM,
Из Device:
Из Tools - OFS, Disks, OFSDiskVolumes, Device, SerialLog, Kernel, Platform, Log, Strings, Trace - нет новых
Из UartConstants - ничего
Из SerialLog - Device, Platform, Log, Uart, Trace - добавил Uart
Из Uart - System, Platform
Вроде всё. Теперь надо составить из них пакет и попробовать его перевести.
- Kernel = ZbL.Kernel.Mos
- Reset - НЕ ХВАТАЕТ - реально не хватает
- Device - был ARM/Minos/Device.Mos ->
- Modules = ZbL.Modules.Mos
- Log - был ARM/Minos/Log.Mos
- OFS = ZbL.OFS.Mos
- Strings = MinOs.Strings.Mos
- Platform = MinOs.HAL.Zynq.Platform.Mos
- Interrupts = MinOs.HAL.Zynq.Interrupts.Mos
- Tools - был ARM/Minos/Tools.Mos
- Trace - MinOs.Trace.Mos
- Heaps - MinOs.Heaps.Mos
- UartConstants - Был ARM/Minos/UartConstants.Mos
- Memory - MinOs.HAL.Zynq.Memory.Mos
- IoControl - НЕ ХВАТАЕТ - похоже, что реально не хватает. Нет нигде и не гуглится.
- SerialLog - Был ARM/Minos/SerialLog.Mod
По зависимостям: - Uart - был Uart.Mos
Из Device:
- UartMin - есть MinOs.Zynq.UartMin.Mos
Из Tools - OFS, Disks, OFSDiskVolumes, Device, SerialLog, Kernel, Platform, Log, Strings, Trace - нет новых
Из UartConstants - ничего
Из SerialLog - Device, Platform, Log, Uart, Trace - добавил Uart
Из Uart - System, Platform
Вроде всё. Теперь надо составить из них пакет и попробовать его перевести.
Последний раз редактировалось БудДен 16.10.23 22:56, всего редактировалось 1 раз.
Re: Дневник копошений с Minos
Также добавил интересное на вид:
MinOs.ProcessMonitor.Mos
MinOs.StartUp.Mos
Но они хотят UartLoader. Где он? MinOs.Zynq.Uart.Loader.Mos - т.е. уже есть.
MinOs.ProcessMonitor.Mos
MinOs.StartUp.Mos
Но они хотят UartLoader. Где он? MinOs.Zynq.Uart.Loader.Mos - т.е. уже есть.
Re: Дневник копошений с Minos
Пытаюсь избежать двойного перевода всего, поэтому:
- это компилируется.
Код: Выделить всё
Compiler.Compile -p=Minos --metaData=simple
--objectFile=Minos --useFPU32 --useFPU64
--symbolFileExtension=.Syb --traceModule=Trace
--путьКОбъИСимвФайлам='buildZbL/' MinOs.KernelUtils.Mos ~
Re: Дневник копошений с Minos
В общем, так не работает, поэтому действуем согласно
https://tvoygit.ru/budden/jaos/src/bran ... ский-heaps
https://tvoygit.ru/budden/jaos/src/bran ... ский-heaps
Re: Дневник копошений с Minos
ГрКодоступ сломан настолько, что не компилируется. Надо сделать, чтобы хотя бы компилировался. На этом, видимо, всё на сегодня.
Re: Дневник копошений с Minos
To set the pin state in ARM assembly language for the Zynq platform, you will need to access the appropriate memory-mapped registers that control the GPIO pins. Here's a general outline of the steps involved:
1. Identify the GPIO pin: Determine the specific GPIO pin you want to control on the Zynq platform. Refer to the platform's documentation or pinout diagram to find the GPIO pin number and its corresponding memory-mapped register.
2. Enable GPIO functionality: Configure the appropriate memory-mapped register to enable the GPIO functionality for the pin you want to control. This typically involves setting the corresponding bit in the GPIO controller's register.
3. Set the pin direction: Configure the direction of the GPIO pin as an input or an output. This can be done by writing to the appropriate memory-mapped register, such as the GPIO direction register.
4. Set the pin state: If the pin is configured as an output, you can set its state to high or low. This can be done by writing to the appropriate memory-mapped register, such as the GPIO data register.
Here's an example code snippet in ARM assembly language for setting the state of a GPIO pin on the Zynq platform:
Please note that the specific memory-mapped addresses and register offsets may vary depending on the Zynq platform's documentation and the specific GPIO pin you are targeting. Make sure to consult the platform's documentation or reference manual for the correct addresses and offsets.
Additionally, keep in mind that accessing memory-mapped registers and controlling GPIO pins in assembly language requires a good understanding of the hardware and low-level programming concepts. It's recommended to refer to the Zynq platform's documentation and any provided examples or libraries for more detailed guidance on GPIO pin control in ARM assembly language.
1. Identify the GPIO pin: Determine the specific GPIO pin you want to control on the Zynq platform. Refer to the platform's documentation or pinout diagram to find the GPIO pin number and its corresponding memory-mapped register.
2. Enable GPIO functionality: Configure the appropriate memory-mapped register to enable the GPIO functionality for the pin you want to control. This typically involves setting the corresponding bit in the GPIO controller's register.
3. Set the pin direction: Configure the direction of the GPIO pin as an input or an output. This can be done by writing to the appropriate memory-mapped register, such as the GPIO direction register.
4. Set the pin state: If the pin is configured as an output, you can set its state to high or low. This can be done by writing to the appropriate memory-mapped register, such as the GPIO data register.
Here's an example code snippet in ARM assembly language for setting the state of a GPIO pin on the Zynq platform:
Код: Выделить всё
.equ GPIO_BASE, 0xE000A000 @ Base address of the GPIO controller
.equ GPIO_DIRECTION_OFFSET, 0x04 @ Offset of the GPIO direction register
.equ GPIO_DATA_OFFSET, 0x00 @ Offset of the GPIO data register
@ Enable GPIO functionality for the desired pin
ldr r0, =GPIO_BASE
ldr r1, [r0]
orr r1, r1, #0x1 @ Set the appropriate bit to enable GPIO functionality
str r1, [r0]
@ Set the pin direction as output
ldr r0, =GPIO_BASE
ldr r1, [r0, #GPIO_DIRECTION_OFFSET]
orr r1, r1, #0x1 @ Set the appropriate bit to configure as output
str r1, [r0, #GPIO_DIRECTION_OFFSET]
@ Set the pin state to high
ldr r0, =GPIO_BASE
ldr r1, [r0, #GPIO_DATA_OFFSET]
orr r1, r1, #0x1 @ Set the appropriate bit to set the pin high
str r1, [r0, #GPIO_DATA_OFFSET]
Additionally, keep in mind that accessing memory-mapped registers and controlling GPIO pins in assembly language requires a good understanding of the hardware and low-level programming concepts. It's recommended to refer to the Zynq platform's documentation and any provided examples or libraries for more detailed guidance on GPIO pin control in ARM assembly language.
Re: Дневник копошений с Minos
Согласно Zybo_RM, пины 24 и 26 - это соотв RXD1 и RXD3 в Enet.
На этом всё на сегодня и скорее всего на эту неделю.
На этом всё на сегодня и скорее всего на эту неделю.
Re: Дневник копошений с Minos
Добил заглушки, Minos собрался, запустил, получился кирпич. В общем-то ожидаемо. На следующем кванте попробую разобраться, какие модули задублировались и что вообще должно происходить, а не происходит. Не стал бы этим сегодня заниматься, но как посмотришь hh.ru, так сразу дурно становится - везде C++. Т.е. можно водки было выпить, а можно вот так давать ответ страшному миру: стучать во время грома по сковородке, чтобы гром тоже меня боялся (рецепт из книг Рокуэлла Кента).
Re: Дневник копошений с Minos
Пытаемся убрать дубликаты. Возникла странная заморочка с символьными файлами, их надо скопировать почему-то из buildZbl в work. Установка пути к файлам на buildZbl почему-то приводит к падению среды, но не буду разбираться.
Список выявленных близнецов:
DeviceDesc - (* A generic driver Plugin that every serial device must implement. All calls are non blocking.*)
Также есть getDevice (по имени), DumpDevice . А при чём тут Uart? А при том, что в него и выводится DumpDevice - больше
никак не используется. Куда переадресовать? Надо найти более ранние формы трассировки в ZbL и туда переадресовывать.
Но задача понять, какой у нас Uart - Mini или нет, остаётся. Приступаем.
Список выявленных близнецов:
- ZblBootstrap: ZbL.Zynq.TraceDevice.Mos , A2: Zynq.TraceDevice.Mos, Minos: -
- понять, тот же
- понять, можно ли выкинуть тот, к-рый в Device.
DeviceDesc - (* A generic driver Plugin that every serial device must implement. All calls are non blocking.*)
Также есть getDevice (по имени), DumpDevice . А при чём тут Uart? А при том, что в него и выводится DumpDevice - больше
никак не используется. Куда переадресовать? Надо найти более ранние формы трассировки в ZbL и туда переадресовывать.
Но задача понять, какой у нас Uart - Mini или нет, остаётся. Приступаем.
Последний раз редактировалось БудДен 26.10.23 21:04, всего редактировалось 3 раза.
Re: Дневник копошений с Minos
Вот какие волшебные числа есть в модуле UartMin (который хотим избавиться от):
Код: Выделить всё
BaseUART0 = SIGNED32( 0E0000000H );
BaseUART1 = SIGNED32( 0E0001000H );
CONTROLREG0 = SIGNED32( 00H );
MODEREG0 = SIGNED32( 04H );
INTRPENREG0 = SIGNED32( 08H );
INTERDISREG0 = SIGNED32( 0CH );
INTERMASKREG0 = SIGNED32( 10H ); (* read only *)
CHNLINTSTSREG0 = SIGNED32( 14H );
BAUDRATEGENREG0 = SIGNED32( 18H );
RCVRTIMEOUTREG0 = SIGNED32( 1CH );
RCVRFIFOTRIGLEV0 = SIGNED32( 20H );
MODEMCTRLREG0 = SIGNED32( 24H );
MODEMSTATUSREG0 = SIGNED32( 28H );
CHANNELSTATUSREG0 = SIGNED32( 2CH );
TXRXFIFO0 = SIGNED32( 30H );
BAUDRATEDIVREG0 = SIGNED32( 34H );
FLOWDELAYREG0 = SIGNED32( 38H );
TXFIFOTRIGLEV0 = SIGNED32( 44H );
Re: Дневник копошений с Minos
В ZbL есть Zynq.PsUartMin.Mod , но в нём есть пр-ра Install, которой передаётся адрес, и она вызывается откуда-то ещё. Откуда?
Три вхождения, но нас сейчас интересует ZbL.Zynq.TraceDevice.Mos
Приходим к
Гипотеза - это один и тот же UART. А значит, можно выкинуть из сборки Minos MinOs.Zynq.UartMin.Mos и воспользоваться ZbL.Zynq.TraceDevice.Mos (модуль так и называется - TraceDevice и вроде в пакете Minos нет модуля с таким именем)
Три вхождения, но нас сейчас интересует ZbL.Zynq.TraceDevice.Mos
Приходим к
Код: Выделить всё
(* ===== UART ===== *)
UartBase* = [ADDRESS(0E0000000H),ADDRESS(0E0001000H)]; (* base address for all UART controllers present in the system *)
Re: Дневник копошений с Minos
Идём дальше, модуль Log (MinOs.Log.Mos) . От него дофига всего зависит, поэтому выкинуть его нельзя, а надо как-то переделать, чтобы он опирался на инфраструктуру из ZbL. Но он ни от чего и не зависит, это абстрактный интерфейс. Видимо, сюрпризы нас ждут ниже, где он будет инициализироваться.
Re: Дневник копошений с Minos
MinOS.UartConstants.Mos пропускаем - он явно вспомогательный
И приступаем к Minos.Zynq.Uart.Mos
странно, адреса те же самые, а модуль второй. Это жжжж неспроста.
А есть ещё просто Zynq.Uart.Mos, но он нигде не используется. Похоже, мы пришли к самому сложному, и если через это пройти, то ларчик откроется. Итак, клиенты модуля Uart в пакете MinosOS:
* MinOs.Minos.Mos : Uart.DoUart
* MinOs.SerialLog.Mos : Uart.Install
* MinOs.Zynq.Uart.Loader.Mos : Uart.EnableIrqMode
* MinOs.Zynq.Uart.Task.Mos : Uart.DoUartCheck
Вот соответственно, если мы хотим заменить MinOs.Zynq.Uart.Mos на что-то, то
это что-то должно предоставлять все эти функции. EnableIrqMode никто не предоставляет. Ах.
И приступаем к Minos.Zynq.Uart.Mos
странно, адреса те же самые, а модуль второй. Это жжжж неспроста.
А есть ещё просто Zynq.Uart.Mos, но он нигде не используется. Похоже, мы пришли к самому сложному, и если через это пройти, то ларчик откроется. Итак, клиенты модуля Uart в пакете MinosOS:
* MinOs.Minos.Mos : Uart.DoUart
* MinOs.SerialLog.Mos : Uart.Install
* MinOs.Zynq.Uart.Loader.Mos : Uart.EnableIrqMode
* MinOs.Zynq.Uart.Task.Mos : Uart.DoUartCheck
Вот соответственно, если мы хотим заменить MinOs.Zynq.Uart.Mos на что-то, то
это что-то должно предоставлять все эти функции. EnableIrqMode никто не предоставляет. Ах.
Re: Дневник копошений с Minos
ну вот, модуль почти на 1000 строчек, и работающий с железкой, и работоспособность его неизвестна. Это, конечно, печально и сулит недели работы.
Re: Дневник копошений с Minos
Попытался выводить хотя бы сообщение в Trace перед инициализацией "большого UART".
Текущее состояние собирается в "некирпич", а в командный интерпретатор ZbL, который работает (можно набирать белиберду, которая
не будет видна в консоли, а потом нажать Enter и тебе скажут, что у тебя плохая команда. Кстати, как же включить эхо?).
Поменял модуль Bootstrap, чтобы он грузил не Bootloader, а Startup (последний из пакета MinosOs).
Текущее состояние собирается в "некирпич", а в командный интерпретатор ZbL, который работает (можно набирать белиберду, которая
не будет видна в консоли, а потом нажать Enter и тебе скажут, что у тебя плохая команда. Кстати, как же включить эхо?).
Поменял модуль Bootstrap, чтобы он грузил не Bootloader, а Startup (последний из пакета MinosOs).
Re: Дневник копошений с Minos
FinishStartUp не успеет быть вызван, как всё падает. Что делать тут?
Re: Дневник копошений с Minos
А так зависает (т.е., возможно, работает).
Код: Выделить всё
Trace.StringLn("Complete Init of Minos.");
(* мой временный костыль, чтобы понять, почему падает *)
FinishStartUp();
(* конец костыля *)
Re: Дневник копошений с Minos
В общем, я дошёл до того, что планировщик задач запустился. Не пора ли на этом остановиться? А хотя нет, надо ещё
сделать две задачи, которые будут печатать буквы с какими-то временными интервалами, и потом перенести всё это
в русскую версию. А то оно сейчас в английской ветке, а это нехорошо :)
сделать две задачи, которые будут печатать буквы с какими-то временными интервалами, и потом перенести всё это
в русскую версию. А то оно сейчас в английской ветке, а это нехорошо :)