|  |  | 
| Строка 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)
 |  | 
| − | |}
 |  | 
| − | -->
 |  |