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

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

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

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

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

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

В качестве терминала для инструментальной машины удобнее всего использовать такую программу, как 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 имеется встроенный текстовый редактор. Редактор позволяет просматривать и редактировать текстовые файлы из консоли.

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

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

C:/>type C:/settings.ini
[SCREEN]
LIGHT=100
C:/>

Редактирование файла

Для редактирования небольших текстовых файлов нужно войти в режим редактирования с помощью команды ed:

C:/>ed c:/settings.ini
Edit file c:/settings.ini
L [begin] [end] - list
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
-----------------------------------------------
0000 | [SCREEN]
0001 | LIGHT=100
ed>

Более полное описание работы во встроенном текстовом редакторе доступно в режиме редактирования по команде help.

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

В интерпретатор команд 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 – удалить все символы команды от текущей позиции до левого конца.