Skip to content

Commit 13b628c

Browse files
Merge pull request #17 from deryugina/master
Corrected the ru-version of "Hello, World!" example
2 parents e3d652a + cac008f commit 13b628c

File tree

1 file changed

+30
-21
lines changed

1 file changed

+30
-21
lines changed
Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
# Пример “Hello World”
2-
Для добавления обычного примера команды выводящей сообщение “hello world” необходимо создать файл “hello.c” с исходным кодом на языке Си.
3-
2+
Чтобы написать пример команды "Hello, World!" -- нужно создать файл "hello.c" с исходным кодом на языке "C":
43
```c
54
#include <stdio.h>
65

@@ -9,14 +8,18 @@ int main(int argc, char **argv) {
98
return 0;
109
}
1110
```
12-
1311
И затем добавить описание модуля.
1412
1513
## Добавление модуля
16-
Все модули и интерфейсы системы описываются в my-файлах: файлах с расширением .my или имеющих имя Mybuild (без расширения).
17-
Структурно каждый my-файл содержит объявление пакета, которому принадлежат все определяемые в файле сущности, (опционально) список импортируемых имен из других пакетов, а также определения самих модулей и интерфейсов.
18-
К примеру, для добавления новой команды для встроенного в ядро командного интерпретатора создадим новый файл Hello.my со следующим содержимым:
14+
Все модули и интерфейсы системы описываются в "my"-файлах. **"My"-файлы** -- это файлы, имеющие расширение **".my"** или имя **"Mybuild"**.
15+
16+
**Структурно каждый "my"-файл содержит:**
1917
18+
* объявление пакета, которому принадлежат все определяемые в файле сущности
19+
* список импортируемых имен из других пакетов (опционально)
20+
* определения самих модулей и интерфейсов
21+
22+
Например, чтобы добавить команду в командный интерпретатор, встроенный в ядро, нужно создать файл "Hello.my" с таким содержанием:
2023
```java
2124
package embox.cmd.tutorial
2225
@@ -26,26 +29,28 @@ module hello {
2629
source "hello.c"
2730
}
2831
```
32+
В этом примере мы описали простой модуль с единственным атрибутом "source" -- файлом "hello.c", который будем скомпилирован и связан с ядром, если модуль будет добавлен в сборку.
33+
34+
**Аннотация "@Cmd"** регистрирует модуль в системе как команду встроенного интерпретатора. Это позволяет запускать модуль по имени "hello".
35+
36+
Опциональный **параметр "help"** содержит строку, которая будет выведана при запуске команды “help hello” (если модуль "help" включен в сборку).
2937

30-
В этом примере описывается простой модуль имеющий всего один атрибут (source) - файл с исходным кодом “hello.c”, которых будет скомпилирован и связан с ядром в случае добавления модуля в сборку.
31-
Аннотация @Cmd регистрирует модуль в системе как команду встроенного интерпретатора, позволяя, таким образом, запускать ее по имени “hello”. Необязательный параметр help содержит строку, которая будет выведана при запуске команды “help hello” (если модуль help также включен в сборку). Аннотация @AutoCmd позволяет использовать привычную функцию main() в качестве точки входа в программу.
38+
**Аннотация "@AutoCmd"** позволяет использовать привычную функцию "main()" в качестве точки входа в программу.
3239

3340
### Атрибуты модуля
34-
Модуль hello достаточно примитивен и не определяет никаких внешних зависимостей или опций. Единственный его атрибут - source - определяет набор исходных файлов для компиляции.
35-
Опции
36-
Теперь модифицируем пример таким образом, чтобы строка приветствия задавалась в виде опции. Для этого используется атрибут option.
37-
Добавим модулю hello (файл Hello.my) строковую опцию greeting:
41+
**Модуль "hello"** достаточно примитивен и не определяет никаких внешних зависимостей или опций.
42+
Единственный его атрибут - "source" - определяет набор исходных файлов для компиляции.
3843

44+
### Опции
45+
Теперь давайте зададим строку приветствия в виде опции. Для этого мы воспользуемся атрибутом "option" и добавим модулю "hello" опцию "greeting":
3946
```c
4047
// ...
4148
module hello {
4249
// ...
4350
option string greeting = "World"
4451
}
4552
```
46-
47-
И модифицируем файл исходного кода hello.c таким образом, чтобы команда после слова “Hello” выводила строку, содержащуюся в значении опции greeting:
48-
53+
И изменим файл "hello.c" таким образом, чтобы команда после слова "Hello" выводила строку, которая содержится в значении опции "greeting":
4954
```c
5055
#define GREETING OPTION_STRING_GET(greeting)
5156

@@ -55,8 +60,7 @@ module hello {
5560
```
5661
5762
## Включение в сборку
58-
Для того, чтобы новый модуль оказался в результирующем образе ядра, его необходимо добавить в конфигурацию сборки, которая описывается в файле conf/mods.conf:
59-
63+
Для того, чтобы новый модуль оказался в результирующем образе ядра, его необходимо добавить в конфигурацию сборки, которая описывается в файле "conf/mods.conf":
6064
```
6165
package genconfig
6266

@@ -65,15 +69,20 @@ configuration conf {
6569
include embox.cmd.tutorial.hello
6670
}
6771
```
68-
Для того, чтобы переопределить значение опции, в конфигурации следует задать новые значения для опций в скобках после указания модуля:
69-
72+
Чтобы изменить значение опции, следует указать новое значение в скобках:
7073
```
7174
// ...
7275
include embox.cmd.tutorial.hello(greeting="Everyone")
7376
// ...
7477
```
78+
Как и многие атрибуты модуля, конфигурация поддерживает добавление аннотаций.
79+
Чаще всего используется аннотация **"@Runlevel"**. Она позволяет загружать модули поэтапно и определять порядок их загрузки.
80+
81+
**Как правило, на ранних стадиях (runlevel=0) загружаются:**
7582
76-
Как и многие атрибуты модуля, конфигурация также поддерживает добавление аннотаций. Наиболее часто используемой является аннотрация @Runlevel, позволяющая разбить загрузку системы на стадии и определить, на каком этапе загружать тот или иной модуль.
83+
* драйверы устройств, необходимых для корректного функционирования системы (например, контроллер прерываний)
84+
* основные компоненты системы
85+
Также на ранних стадиях исполняются низкоуровневые тесты и процедуры самодиагностики.
7786
78-
Как правило, на ранних стадиях (runlevel=0) загружаются драйверы устройств, необходимых для корректного функционирования системы (например, контроллер прерываний), основные компоненты системы, а также исполняются низкоуровневые тесты и процедуры самодиагностики. Следует отметить, что runlevel определяет лишь максимальную стадию, на которой должен быть запущен данный модуль. Таким образом, если какой-либо модуль, загружаемый на нулевой стадии, зависит от модуля, загружаемого позже, последний все-равно будет загружен раньше, т.е. на нулевой стадии.
87+
**Обратите внимание**: порядок загрузки модулей по зависимостям имеет самый высокий приоритет. Поэтому опция "@Runlevel" работает в тех случаях, когда она не противоречит порядку загрузки по зависимостям.
7988

0 commit comments

Comments
 (0)