ОСРВ MULTEX-ARM
Полное описание
Интерпретатор команд SHELL

В состав библиотек ОС MULTEX-ARM включен интерпретатор команд Shell – специальная программная оболочка, которая позволяет осуществлять следующие действия:

  • Вызывать по именам любую процедуру из проекта пользователя MULTEX-ARM.
  • Просматривать или изменять содержимое любой глобальной переменной проекта по ее имени в реальном времени.
  • Просматривать дампы памяти в виде байтов, двухбайтовых слов, или четырёх-байтовых двойных слов. Можно также записывать новые значения содержимого ячеек памяти по любому адресу.
  • Работать с дисковой подсистемой с помощью следующих команд:
    • Просмотр каталогов.
    • Смена рабочего каталога, либо диска.
    • Создание / удаление каталогов и файлов.
  • Просматривать перечень всех запущенных в системе задач.
  • Получить список открытых файлов.
  • Получить список установленных устройств.
  • Просматривать таблицы ARP состояния локальной сети.

Shell запускается автоматически, если при конфигурации проекта не указана задача, которую необходимо запускать при старте системы, либо в качестве параметра USER_PROC указана процедура shell. Связь с терминалом инструментальной машины происходит при этом по каналу UART. Параметры подключения:

  • Выходной интерфейс процессора — DEBUG UART0.
  • Скорость — 115200 bps.
  • Проверка чётности — отсутствует.
  • Количество бит данных — 8.
  • Количество стоп бит — 1.

Если в файле конфигурации системы указан параметр INCLUDE_NET_CONSOLE, то отдельный экземпляр интерпретатора команд будет запускаться при подключении к целевой машине терминала по локальной сети по протоколу UDP, а также, при включении параметра INCLUDE_TCP_CONSOLE, будет создаваться по одному экземпляру на каждую сессию при подключении по протоколу TCP/IP. Параметры подключения:

В качестве терминала для инструментальной машины удобнее всего использовать такую программу, как Putty. Примеры настройки программы для работы по сети и через UART приведены на следующих рисунках. Для правильного отображения перевода строк, а также для работы текстового редактора следует обратить внимание на настройки на вкладке Terminal. А именно нужно установить флажок в пункте Implicit CR in every LF и принудительно отключить локальное эхо и локальное редактирование строки (см. Настройка терминала Putty).

Настройка сетевого подключения Putty.

Настройка подключения Putty через UART.

Настройка терминала Putty.

После запуска Shell на экране инструментальной ЦВМ появится приветственная надпись, показанная на рисунке ниже.

Приветствие Shell.

Справка Shell

Для вывода подсказки о перечне команд достаточно ввести команду h и нажать клавишу Enter. Появится подсказка следующего вида:

C:/>h
h               - print this text
hf              - print file utilites help
hl              - print logarea utilites help
d <addr32>      - display memory dump in bytes
dw <addr32>     - display memory dump in words
dd <addr32>     - display memory dump in double words
m <addr32>      - modify memory in bytes
mw <addr32>     - modify memory in words
md <addr32>     - modify memory in double words
i               - print tasks info
sp &<function>  - spawn function as a new task
td <task>       - delete task by name
tp <task> <N>   - set task priority at N
boot            - boot new kernel image
hr              - hard reset
C:/>    

Справка работы с диском

Чтобы получить справку о командах работы с диском достаточно набрать команду hf:

C:/>hf
------------- FILE UTILITES ------------------
dir <path>          - show directory
dir* <path>         - show directory paged
cd <path>           - change work device/directory
mkd <path>          - create new directory
rmd <path>          - delete directory
copy <from> <to>    - copy files by wildcard
del <files>         - delete files by wildcard
type <file>         - show text file
ed <file>           - edit text file
chkdsk <device>     - testing filesystem on device

Дамп памяти

Чтобы получить дамп памяти, начиная с указанного адреса, достаточно использовать команды d, dw, или dd. После команды через пробел нужно указать адрес в шестнадцатеричной форме:

C:/>d 120
00000120: 06 4A 08 B5 12 1A 02 F0 5D FF 00 21 DF F8 10 90
00000130: 08 46 00 F0 59 FF 00 BF 00 00 F8 4F 50 01 F8 4F
00000140: D0 49 00 00 08 B5 05 46 04 4B DC 68 00 F0 CD F8
00000150: 2A 46 41 F2 BB 01 00 20 A0 47 00 BF 00 00 F8 4F
00000160: 00 20 70 47 08 B5 07 48 01 F0 0E F8 4C F2 50 30
00000170: 02 F0 BE FF FF F7 F4 FF 00 20 00 F0 34 F9 00 20
00000180: 08 BD 00 BF EF 43 00 00 82 B0 00 23 01 93 01 9B
00000190: 63 2B 03 DC 00 46 01 9B 01 33 F7 E7 02 B0 70 47
000001A0: 10 B5 FF F7 F1 FF 11 EE 10 4F FF F7 ED FF 24 F4
000001B0: 80 54 01 EE 10 4F 10 BD 10 B5 FF F7 E5 FF 11 EE

Модифицировать дамп памяти

Для того, чтобы модифицировать содержимое памяти начиная с указанного адреса, достаточно использовать команды m, mw, или md. В качестве параметра нужно указать адрес, с которого нужно начинать модификацию:

C:/>m 123
Addr:00000123 Data:B5 -

Далее нужно ввести новое значение для ячейки памяти в шестнадцатеричной форме и нажать Enter. Если данную ячейку изменять не требуется, следует просто нажать Enter. Новое значение запишется и произойдет переход на следующую ячейку:

Addr:00000123 Data:B5 B7
Addr:00000124 Data:12 -

Чтобы выйти из режима вместо данных нужно ввести символ Пробел и нажать Enter.

Просмотр задач

Для просмотра сведений об имеющихся в системе задачах и их состоянии используется команда i:

C:/>i
Name    Priority    Id    Delay Semaphore   State
------------------------------------------------------
SHELL      50   7FFDF600    0   00000000    IN WORK
RootTask  255   7FFFFC00    0   00000000    ACTIVE
DPCMan     -1   7FFEE700   -1   7FFEF200    PEND
NetPoll     0   7DA26E00   -1   7DA27500    PEND
tsAcker     0   7D94E200    1   7D94E500    PEND
FTP-S       1   7DA00600   -1   7D93DB00    PEND
netShell    5   7DA11D00   -1   7DA16700    PEND
netConTx    5   7DA15000   71   7DA15E00    PEND
------------------------------------------------------
C:/>

В отображаемой таблице будут указаны задачи с указанием их имен, приоритетов, идентификаторов, задержек, семафоров, у которых задачи ожидают и состояния. Текущая выполняемая задача будет иметь состояние IN WORK. Активные, но в данный момент менее приоритетные задачи будут иметь состояние ACTIVE. Задержанные на какое-то время, или ожидающие у семафора задачи будут иметь состояние PEND. Приостановленные задачи будут иметь состояние SUSPEND.

Открытые файлы, сокеты, устройства

Для просмотра информации об открытых файлах, сокетах и символьных устройствах можно ввести команду iosFdShow:

C:/>iosFdShow
fd  name          drv
 3  sioCon        0 in out err
 4  netCon        2
 5  socket/<tcp>  3
Value = 1610613075 (0x60000153)
C:/>

Устройство, являющееся стандартным устройством ввода / вывода, отмечено как in, out и err.

Установленные устройства

Для просмотра информации об установленных в системе устройствах можно использовать команду iosDevShow:

C:/>iosDevShow
DeviceName Driver   DCB
socket      3       00000000
netCon      2       00000000
C:          1       7FFCD100
sioCon      0       7FFCF100
Value = 4 (0x4)
C:/>

В этом примере видно, что в системе имеется TCP/IP сокет, открытый на прослушивание FTP-соединений, netCon — сетевая консоль для связи по протоколу UDP, локальный диск C: и последовательная консоль sioCon.

Информация о сети

Для просмотра информации о состоянии сети Ethernet можно воспользоваться командой netShow:

C:/>netShow
Table of Address Resolution:
----------------------------
1 #0 00:1B:EB:61:6C:7E 10.0.0.222
2 #0 10:7B:44:45:85:2B 10.0.7.156
3 #0 00:1B:EB:61:6C:7E 10.0.0.90
4 #0 BC:EE:7B:71:FB:57 10.0.7.119
----------------------------
Value = 0 (0x0)
C:/>

Здесь видно активные IP-адреса в сети. При этом в таблице показаны порядковый номер, номер сетевого адаптера, MAC-адрес и IP-адрес каждой записи из таблицы ARP.

Удалить задачу

Для того, чтобы удалить указанную задачу, используется команда td. В качестве параметра указывается имя запущенной задачи, которую требуется удалить:

C:/>td myTask1
Ok!
C:/>

Изменить приоритет задачи

Для изменения приоритета указанной задачи используется команда tp. При этом первым параметром указывается имя задачи с учетом регистра, а вторым — новое значение приоритета:

C:/>tp myTask2 100
Ok!
C:/>

В указанном примере задача myTask2 получает приоритет 100.

Запустить задачу

Чтобы запустить некоторую процедуру языка Си, как отдельную задачу, можно воспользоваться командой sp. В качестве параметра необходимо указать имя этой процедуры, но перед именем необходимо указать символ &:

C:/>sp &myProc
Task spawned as usrT1 , TID=7D53A000

В этом примере процедура myProc запускается, как задача с именем usrT1 и приоритетом 100.

Выполнить процедуру

Любая функция, включенная в пользовательский проект и объявленная как глобальная, может быть вызвана из интерпретатора команд путем ввода ее имени с использованием синтаксиса, принятого в языке Си. Так, например, для вывода сообщения достаточно просто набрать:

C:/>printf(“%s %i”,”Hello!”,38)
Hello! 38
C:/>

Аппаратная перезагрузка

Для вызова перезагрузки (аппаратного рестарта) системы служит команда hr.

Работа с переменными

Просмотр переменной

Для просмотра содержимого переменной типа int, входящей в проект, достаточно просто набрать ее имя:

C:/>myVar
Addr = 0x4904082C Value = 0 (0x0)
C:/>

Изменение переменной в десятичном виде

Чтобы изменить содержимое переменной типа int, достаточно записать выражение присваивания языка Си:

C:/>myVar = 1234
Addr = 0x4904082C New value = 1234 (0x4D2)
C:/>

Изменение переменной в шестнадцатеричном виде

Если требуется ввести значение в шестнадцатеричном виде, то можно записать его так, как это и принято в языке Си. При этом буквенные обозначения цифр можно набирать как на верхнем (A,B,C ), так и на нижнем (a,b,c ) регистре:

C:/>myVar = 0x1A2C3D4E
Addr = 0x4904082C New value = 439106894 (0x1A2C3D4E)
C:/>

Изменение строковой переменной

Для ввода значения строковой переменной, оно записывается в кавычках, как и принято в языке Си:

C:/>string = "Hello world"
Addr = 0x490609DC New value = 2102453504 (0x7D50E500)
C:/>printf(string)
Hello world
Value = 1610613075 (0x60000153)
C:/>

Работа с диском

Просмотр каталога

Для просмотра текущего каталога используется команда dir:

C:/>dir
Volume in drive C: is A20
Directory of 'C:/'
    SVS               <DIR>   1/01/2000   0:16:32
    BOOT        SCR     151  30/09/2014   13:36:18
    LICENSE     SYS      40   1/01/2017   12:10:38
    SETTINGS    INI      23   1/01/2017   12:02:00
    TST         INI      29   1/01/2000   0:05:24
    T           TTT      53   1/01/2000   0:17:16
    PB          MP3 3731445   1/01/2000   0:06:54
    POEZD       MP3 3545427   1/01/2017   12:04:52
    ZATEH       MP3 4681866   1/01/2017   12:24:00
    MULTEX      BIN  221832  20/06/2022   11:50:24
Total 12180866 bytes in 9 files, 1 directories
Free space = 4164944 Kbytes.
C:/>    

Для просмотра содержимого подкаталога нужно указать путь к подкаталогу. Например, для просмотра подкаталога SVS нужно дать команду dir C:/SVS.

C:/>dir C:/SVS
Volume in drive C: is A20
Directory of 'C:/SVS/'
    .       <DIR>   1/01/2000   0:16:32
    ..      <DIR>   1/01/2000   0:16:32
Total 0 bytes in 0 files, 2 directories
Free space = 4164944 Kbytes.
C:/>    

Смена каталога / диска

Для того, чтобы поменять текущий диск, нужно просто ввести в качестве команды его метку. Так, если подключен USB Flash-диск, можно переключиться на него:

C:/>F:
F:/>

Для того, чтобы выбрать текущим каталог, отличный от корневого, используется команда команду cd:

C:/>cd c:/svs
C:/SVS/>

Удаление файла

Для удаления файла, или группы файлов, используйте команду del. В следующем примере с диска удаляются все файлы с расширением .mp3:

C:/>del c:/*.mp3
Delete file 'C:/ZATEH.MP3'...done.
Delete file 'C:/POEZD.MP3'...done.
Delete file 'C:/PB.MP3'...done.
C:/>

Копирование файла

Для копирования файла, или группы файлов с одного места в другое, используется команда copy:

C:/>copy c:/multex.bin f:/*.*
Copy from 'C:/MULTEX.BIN' to 'F:/MULTEX.BIN'...done.
1 file(s) copied.
C:/>

Удаление каталога

Для удаления пустого каталога используется команда rmd:

C:/>rmd C:/SVS
C:/>
Предупреждения
Попытка удаления непустого каталога приведет к ошибке.

Создание каталога

Для создания нового каталога используется команда mkd:

C:/>mkd C:/SVS
C:/>

Проверка диска

Для проверки файловой системы на диске служит команда chkdsk:

C:/>chkdsk
Checking device C:...
File System: FAT32
Check FAT...done
Clusters:
Total: 1044224, Reserved: 0, Free: 1044149
Sectors per cluster: 8
Check file system...
Total Files:17, Data:8, Cat's:2, Labels:1 LongNames:6
Total Deleted Files:67
Result of checking: OK!

Поддерживаемые сочетания клавиш

В интерпретатор команд Shell встроена поддержка сочетаний клавиш для редактирования вводимого текста и перемещения по вводимой строке.

История команд

  • Ctrl+P или Up – перейти в истории команд на 1 команду назад (к предыдущей команде).
  • Ctrl+N или Down – перейти в истории команд на 1 команду вперед (к следующей команде).

Навигация

  • Ctrl+B или Left – переместить курсор на 1 символ влево.
  • Ctrl+F или Right – переместить курсор на 1 символ вправо.
  • Ctrl+A или Home – перейти в начало строки.
  • Ctrl+E или End – перейти в конец строки.
  • Alt+F – переместить курсор вперед к следующему слову.
  • Alt+B – переместить курсор назад к предыдущему слову.

Редактирование

  • Insert – переключение режима "вставки" на "замену" и обратно.
  • Ctrl+D или Delete – удалить 1 символ справа от текущей позиции.
  • Ctrl+H или Backspace – удалить 1 символ слева от текущей позиции.
  • Alt+D – удалить все символы "слова" от текущей позиции до правого конца.
  • Ctrl+W – удалить все символы "слова" от текущей позиции до левого конца.
  • Ctrl+K – удалить все символы команды от текущей позиции до правого конца.
  • Ctrl+U – удалить все символы команды от текущей позиции до левого конца.

Текстовый редактор Edit

Встроенный текстовый редактор Edit предназначен для создания и редактирования конфигурационных файлов на жестких дисках устройства. Редактор встроен в ядро операционной системы и может быть вызван из оболочки Shell с помощью команды ed.

Запуск редактора

Для редактирования имеющегося файла его имя можно указать в качестве параметра. В примере ниже приведён вызов редактора для редактирования файла settings.ini и приглашение редактора к редактированию файла:

C:/>ed settings.ini
[list edit help quit]>
Предупреждения
При указании имени файла без полного пути, будет открыт (создан) файл в текущей директории на текущем диске.

Для создания и редактирования нового файла следует вызвать редактор без параметров. При этом пользователю будет предложено ввести имя нового файла. После ввода имени появится сообщение с предложением создать новый файл, на что следует согласиться – ввести символ y. Далее редактор создаст файл с указанным именем и выведет приглашение к редактированию содержимого:

C:/>ed text.txt
File "text.txt" does not exist.  Do you want to create a new one?
[yes no]>y
[list edit help quit]>

Используемые команды

Для работы с содержимым файла используются команды, состоящие из одного символа. В приглашении редактора дана подсказка с наиболее часто используемыми командами. Чтобы посмотреть список всех команд следует ввести символ h. Справка по командам редактора приведена ниже:

[list edit help quit]>h
------------------------------------------------------------
"Edit" ver.2.02
------------------------------------------------------------
L [begin] [end] - List a range of strings.
              l - List entire file.
              a - Add new string at end.
       i [line] - Insert new string.
       d [line] - Delete string.
       e [line] - Edit string.
              w - Write file.
              q - Exit without saving.
              h - Help.
------------------------------------------------------------
[list edit help quit]>

Просмотр файла

Для просмотра содержимого файла следует ввести символ l. Ниже показан вывод листинга некоторого файла settings.ini:

[list edit help quit]>l
------------------------------------------------------------
File: "settings.ini"
------------------------------------------------------------
0000|[DEVICE]
0001|PORT=1243
0002|IP=192.168.0.31
0003|[SOURCE]
0004|IP=192.168.0.1
------------------------------------------------------------
[list edit help quit]>

Редактирование строк

Правка текста в редакторе выполняется построчно. Для редактирования определённой строки нужно ввести команду e и номер редактируемой строки. Ввод команды e без параметров запустит редактирование строки с номером 0. Для перехода к следующей или предыдущей строкам в режиме редактирования можно использовать стрелки вниз и вверх соответственно. После окончания редактирования следует подтвердить изменения с помощью клавиши Enter. Пример редактирования второй строки показан ниже. Здесь оператор ввёл команду e 2, затем изменил содержимое строки (изменил адрес) и нажал ввод. В приглашении редактора появился символ *, обозначающий, что содержимое файла было изменено:

[list edit help quit]>e 2
0002|IP=192.168.0.32
[list edit help quit]*>

Запись изменений

После изменения содержимого файла его следует сохранить с помощью команды w. Редактор запросит подтверждение на сохранение изменений в файле. Следует ввести подтверждение y и нажать ввод. Редактор выведет сообщение об успешном сохранении данных:

[list edit help quit]*>w
Confirm saving the changes to "settings.ini":
[yes no]>y
Done! 238 bytes written to the "settings.ini".
[list edit help quit]>

Завершение работы

Сохранив изменения в файле можно закрыть редактор с помощью команды q. Редактор будет закрыт и пользователю увидит приглашение интерпретатора команд Shell:

[list edit help quit]>q
C:/>

Быстрый просмотр текстового файла

В дополнение к встроенному редактору Edit в систему встроено средство быстрого просмотра содержимого текстовых файлов. Для вывода строк файла в консоль следует использовать команду type с именем файла в качестве параметра. Ниже приведён пример вывода в консоль содержимого файла settings.ini:

C:/>type settings.ini
[DEVICE]
PORT=1243
IP=192.168.0.31
[SOURCE]
IP=192.168.0.1