Спец курс (Автоматизация процесса проектирования)/Практические задания 4 — различия между версиями
Vidokq (обсуждение | вклад) |
ANA (обсуждение | вклад) м |
||
Строка 2: | Строка 2: | ||
== Перед выполнение ознакомиться с правилами оформления задания == | == Перед выполнение ознакомиться с правилами оформления задания == | ||
* [[Спец курс (Автоматизация процесса проектирования)/Практические задания (Пример)]] | * [[Спец курс (Автоматизация процесса проектирования)/Практические задания (Пример)]] | ||
+ | |||
+ | |||
+ | Файл для задач. | ||
+ | |||
+ | === Общие требования к интерфейсу программ === | ||
+ | |||
+ | * первый параметр обязательный - имя входного файла. Если этот параметр не задан, то вывести сообщение о том как использовать программу (usage) | ||
+ | * второй параметр необязательный - имя выходного файла. Если параметр не задан, то сформировать имя выходного файла из имени входного по шаблону: <имя_вх_файла>_out.<расширение_вх_файла>. | ||
+ | |||
+ | Если входной файл не может быть открыт, либо выходной файл не может быть создан (если задан неправильный путь в командной строке), то вывести соответствующее сообщение об ошибке. | ||
+ | |||
+ | === Разворот байт === | ||
+ | Во входном файле (лог файл) строки с пометкой "(D)" включают данные - четыре DWord (двойное слово - 32 двоичных разряда, далее DW). Например: | ||
+ | 0 (D) 80000d00 02000000 00000000 00000000 | ||
+ | Задача развернуть байты в каждом DW`е, как показано ниже | ||
+ | 0 (D) 000d0080 00000002 00000000 00000000 | ||
+ | В файле есть строки с данными со слово "LittleEndian", в которых уже проведено данное преобразование, поэтому их не следует изменять. Например: | ||
+ | 0 (D) 8020c011 LittleEndian | ||
+ | Остальные строки из входного файла перенести в выходной без изменений. | ||
+ | |||
+ | === Анализ команды === | ||
+ | |||
+ | Найти в логе данные, которые задают команду и расшифровать её, записав в строке после данных имена и значения полей команды. | ||
+ | |||
+ | Пакет данных относящийся к команде имеет размер 64 байта, в заголовке пакета должно быть '''BC:0064'''. После строки заголовка следует 4 строки с данными, где в первом столбце - номер DWord`а данных пакета, второй столбец - маркер данных "(D)". | ||
+ | <small>test_top 203865.00 203869.00 R MRd32 0x0100/01 355 0 0 0 0 0 0x40008080 f f 16 (H) 00008010 010001ff 40008080 ---- 0x3191b2b4 0xf87188a | ||
+ | test_top 203897.00 203917.00 T CplD 0x0100/01 182 0 0 0 0 0 ID:0xffff Stat:SC '''BC:0064''' 16 (H) 4a008010 ffff0040 01000100 ---- 0 0xa94d0d83 0x37e1b7df | ||
+ | 0 (D) 01000400 02000000 00000000 00000000 | ||
+ | 4 (D) 00000000 00000000 00900140 00000000 | ||
+ | 8 (D) 00c00140 00000000 0a000000 00000000 | ||
+ | 12 (D) 01000000 00000000 00000000 00000000 | ||
+ | </small> | ||
+ | |||
+ | Данные в логе записываются слева направо - с младшего адреса. В приведённом примере байт 0 нулевого DWord`а равень 01, второй байт - 00, третий 04, четвертый байт - 00 и т.д. Далее идут четыре DWorda данных от младшего к старшему. | ||
+ | |||
+ | Расшифровка команды в [http://www.nvmexpress.org/wp-content/uploads/NVM-Express-1_1.pdf спецификации] | ||
+ | |||
+ | * Figure 10: Command Dword 0 | ||
+ | * Figure 11: Command Dword 0-15: Command Format – Admin Command Set | ||
+ | |||
+ | Например, строка с первыми четырьмя DWord`ами: | ||
+ | 0 (D) 01000400 02000000 00000000 00000000 | ||
+ | должна быть преобразована согласно таблицы 10 и 11 в следующую строку: | ||
+ | 0 (D) 01000400 02000000 00000000 00000000 '''CMD=01, FUSE=00, PSDT=PRP, CID=0004, NSID=2''' | ||
+ | |||
+ | <!-- {|class=standard | ||
+ | |Bit | ||
+ | |Field name | ||
+ | |- | ||
+ | | 31:16 | ||
+ | | Command Identifier (CID): | ||
+ | |- | ||
+ | | 15 | ||
+ | | PRP or SGL for Data Transfer (PSDT): ‘0’ - PRP, ‘1’ - SGL | ||
+ | |- | ||
+ | | 14:10 | Reserved | ||
+ | |- | ||
+ | | 09:08 | Fused Operation (FUSE) | ||
+ | {| | ||
+ | | Bits | Definition | ||
+ | |- | ||
+ | | 00b |Normal operation | ||
+ | |- | ||
+ | |01b | Fused operation, first command | ||
+ | |- | ||
+ | | 10b | Fused opera tion, second command | ||
+ | |- | ||
+ | | 11b | Reserved | ||
+ | |} | ||
+ | |- | ||
+ | | 07:00 | Opcode (OPC) | ||
+ | |} | ||
+ | --> |
Версия 11:44, 24 марта 2018
Содержание |
Перед выполнение ознакомиться с правилами оформления задания
Файл для задач.
Общие требования к интерфейсу программ
- первый параметр обязательный - имя входного файла. Если этот параметр не задан, то вывести сообщение о том как использовать программу (usage)
- второй параметр необязательный - имя выходного файла. Если параметр не задан, то сформировать имя выходного файла из имени входного по шаблону: <имя_вх_файла>_out.<расширение_вх_файла>.
Если входной файл не может быть открыт, либо выходной файл не может быть создан (если задан неправильный путь в командной строке), то вывести соответствующее сообщение об ошибке.
Разворот байт
Во входном файле (лог файл) строки с пометкой "(D)" включают данные - четыре DWord (двойное слово - 32 двоичных разряда, далее DW). Например:
0 (D) 80000d00 02000000 00000000 00000000
Задача развернуть байты в каждом DW`е, как показано ниже
0 (D) 000d0080 00000002 00000000 00000000
В файле есть строки с данными со слово "LittleEndian", в которых уже проведено данное преобразование, поэтому их не следует изменять. Например:
0 (D) 8020c011 LittleEndian
Остальные строки из входного файла перенести в выходной без изменений.
Анализ команды
Найти в логе данные, которые задают команду и расшифровать её, записав в строке после данных имена и значения полей команды.
Пакет данных относящийся к команде имеет размер 64 байта, в заголовке пакета должно быть BC:0064. После строки заголовка следует 4 строки с данными, где в первом столбце - номер DWord`а данных пакета, второй столбец - маркер данных "(D)".
test_top 203865.00 203869.00 R MRd32 0x0100/01 355 0 0 0 0 0 0x40008080 f f 16 (H) 00008010 010001ff 40008080 ---- 0x3191b2b4 0xf87188a test_top 203897.00 203917.00 T CplD 0x0100/01 182 0 0 0 0 0 ID:0xffff Stat:SC BC:0064 16 (H) 4a008010 ffff0040 01000100 ---- 0 0xa94d0d83 0x37e1b7df 0 (D) 01000400 02000000 00000000 00000000 4 (D) 00000000 00000000 00900140 00000000 8 (D) 00c00140 00000000 0a000000 00000000 12 (D) 01000000 00000000 00000000 00000000
Данные в логе записываются слева направо - с младшего адреса. В приведённом примере байт 0 нулевого DWord`а равень 01, второй байт - 00, третий 04, четвертый байт - 00 и т.д. Далее идут четыре DWorda данных от младшего к старшему.
Расшифровка команды в спецификации
- Figure 10: Command Dword 0
- Figure 11: Command Dword 0-15: Command Format – Admin Command Set
Например, строка с первыми четырьмя DWord`ами:
0 (D) 01000400 02000000 00000000 00000000
должна быть преобразована согласно таблицы 10 и 11 в следующую строку:
0 (D) 01000400 02000000 00000000 00000000 CMD=01, FUSE=00, PSDT=PRP, CID=0004, NSID=2