# Программирование LEGO NXT на C

Текстовое программирование для LEGO NXT осуществляется на языке C с использованием макросов и функций из библиотеки ECRobot.

Общая структура программы:

* Сначала идёт подключение заголовочных файлов, используемых в программе (стандартные заголовочные файлы C и заголовочные файлы ECRobot).
* Затем идёт объявление констант и переменных, используемых в программе.
* За ними описываются функции `ecrobot_device_initialize` и `ecrobot_device_terminate`. Первая вызывается при запуске программы, вторая — при прекращении её работы. В них обычно выполняется инициализация и деинициализация датчиков, энкодеров и других устройств робота. По умолчанию в `ecrobot_device_initialize` инициализируется генератор случайных чисел.
* За ними идёт описание функции `user_1ms_isr_type2`, которая вызывается каждую миллисекунду.
* Затем идёт описание задачи, которая запускается на исполнение при старте программы: `TASK (OSEK_Task_Number_0)`. Здесь, собственно, и выполняется большая часть программирования.

```c
#include <string.h>
#include "kernel.h"
#include "kernel_id.h"
#include "ecrobot_interface.h"
#include "trik_studio_utils.h"
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
#include <math.h>

U32 __interpretation_started_timestamp__ = 0;
static const float pi = 3.14159265;



void ecrobot_device_initialize(void)
{
	srand(systick_get_ms());

}

void ecrobot_device_terminate(void)
{

}

/* nxtOSEK hook to be invoked from an ISR in category 2 */
void user_1ms_isr_type2(void)
{

}

/* Main task */
TASK(TASK_MAIN)
{
	__interpretation_started_timestamp__ = systick_get_ms();

	TerminateTask();
}
```

{% hint style="info" %}
[Полное описание](http://lejos-osek.sourceforge.net/api.htm) функций на английском, доступных при программировании.

В качестве примеров можно использовать код, генерируемый по диаграммам самой средой TRIK Studio.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://help.trikset.com/nxt/c.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
