You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This board has only 1MiB flash memory, so it's a little bit more compilated. OpenCV requires too much read-only memory (it's mostly code), so you have to use QSPI flash to run it.
Чтобы написать пример команды "Hello, World!" -- нужно создать файл "hello.c" с исходным кодом на языке "C":
1
+
# Пример “Hello, World!”
2
+
Чтобы написать пример команды "Hello, World!" -- нужно создать файл **hello.c** с исходным кодом на языке **C**:
3
3
```c
4
4
#include<stdio.h>
5
5
@@ -11,15 +11,17 @@ int main(int argc, char **argv) {
11
11
И затем добавить описание модуля.
12
12
13
13
## Добавление модуля
14
-
Все модули и интерфейсы системы описываются в "my"-файлах. **"My"-файлы** -- это файлы, имеющие расширение **".my"** или имя **"Mybuild"**.
14
+
Все модули и интерфейсы системы описываются в my-файлах.
15
15
16
-
**Структурно каждый "my"-файл содержит:**
16
+
**My-файлы** -- это файлы, имеющие расширение **.my** или имя **Mybuild** (без расширения).
17
+
18
+
**Структурно каждый my-файл содержит:**
17
19
18
20
* объявление пакета, которому принадлежат все определяемые в файле сущности
19
21
* список импортируемых имен из других пакетов (опционально)
20
22
* определения самих модулей и интерфейсов
21
23
22
-
Например, чтобы добавить команду в командный интерпретатор, встроенный в ядро, нужно создать файл "Hello.my" с таким содержанием:
24
+
Например, чтобы добавить команду в командный интерпретатор, встроенный в ядро, нужно создать файл **Hello.my** с таким содержанием:
23
25
```java
24
26
package embox.cmd.tutorial
25
27
@@ -29,28 +31,28 @@ module hello {
29
31
source "hello.c"
30
32
}
31
33
```
32
-
В этом примере мы описали простой модуль с единственным атрибутом "source" -- файлом "hello.c", который будем скомпилирован и связан с ядром, если модуль будет добавлен в сборку.
34
+
В этом примере мы описали простой модуль с единственным атрибутом **source** -- файлом **hello.c**, который будет скомпилирован и связан с ядром, если модуль будет добавлен в сборку.
33
35
34
-
**Аннотация "@Cmd"** регистрирует модуль в системе как команду встроенного интерпретатора. Это позволяет запускать модуль по имени "hello".
36
+
Аннотация **@Cmd** регистрирует модуль в системе как команду встроенного интерпретатора. Это позволяет запускать модуль по имени *hello*.
35
37
36
-
Опциональный **параметр "help"** содержит строку, которая будет выведана при запуске команды “help hello” (если модуль "help" включен в сборку).
38
+
Опциональный параметр **help** содержит строку, которая будет выведана при запуске команды *help hello* (если модуль help включен в сборку).
37
39
38
-
**Аннотация "@AutoCmd"** позволяет использовать привычную функцию "main()" в качестве точки входа в программу.
40
+
Аннотация **@AutoCmd** позволяет использовать привычную функцию *main()* в качестве точки входа в программу.
39
41
40
42
### Атрибуты модуля
41
-
**Модуль "hello"** достаточно примитивен и не определяет никаких внешних зависимостей или опций.
42
-
Единственный его атрибут - "source" - определяет набор исходных файлов для компиляции.
43
+
Модуль **hello** достаточно примитивен и не определяет никаких внешних зависимостей или опций.
44
+
Единственный его атрибут - *source* - определяет набор исходных файлов для компиляции.
43
45
44
46
### Опции
45
-
Теперь давайте зададим строку приветствия в виде опции. Для этого мы воспользуемся атрибутом "option" и добавим модулю "hello" опцию "greeting":
47
+
Теперь давайте зададим строку приветствия в виде опции. Для этого мы воспользуемся атрибутом **option** и добавим модулю *hello* опцию *greeting*:
46
48
```c
47
49
// ...
48
50
module hello {
49
51
// ...
50
52
option string greeting = "World"
51
53
}
52
54
```
53
-
И изменим файл "hello.c" таким образом, чтобы команда после слова "Hello" выводила строку, которая содержится в значении опции "greeting":
55
+
А также изменим файл **hello.c** таким образом, чтобы команда после слова *Hello* выводила строку, которая содержится в значении опции *greeting*:
54
56
```c
55
57
#defineGREETING OPTION_STRING_GET(greeting)
56
58
@@ -60,7 +62,7 @@ module hello {
60
62
```
61
63
62
64
## Включение в сборку
63
-
Для того, чтобы новый модуль оказался в результирующем образе ядра, его необходимо добавить в конфигурацию сборки, которая описывается в файле "conf/mods.conf":
65
+
Для того, чтобы новый модуль оказался в конечном образе ядра, его необходимо добавить в конфигурацию сборки, которая описывается в файле *conf/mods.conf*:
64
66
```
65
67
package genconfig
66
68
@@ -76,13 +78,14 @@ configuration conf {
76
78
// ...
77
79
```
78
80
Как и многие атрибуты модуля, конфигурация поддерживает добавление аннотаций.
79
-
Чаще всего используется аннотация **"@Runlevel"**. Она позволяет загружать модули поэтапно и определять порядок их загрузки.
81
+
82
+
Чаще всего используется аннотация **@Runlevel**. Она позволяет загружать модули поэтапно и определять порядок их загрузки.
80
83
81
84
**Как правило, на ранних стадиях (runlevel=0) загружаются:**
82
85
83
86
* драйверы устройств, необходимых для корректного функционирования системы (например, контроллер прерываний)
84
87
* основные компоненты системы
85
88
Также на ранних стадиях исполняются низкоуровневые тесты и процедуры самодиагностики.
86
89
87
-
**Обратите внимание**: порядок загрузки модулей по зависимостям имеет самый высокий приоритет. Поэтому опция "@Runlevel" работает в тех случаях, когда она не противоречит порядку загрузки по зависимостям.
90
+
**Обратите внимание**: порядок загрузки модулей по зависимостям имеет самый высокий приоритет. Поэтому опция *@Runlevel* работает в тех случаях, когда она не противоречит порядку загрузки по зависимостям.
0 commit comments