OSAL API - CC2530/CC2538

OSAL API - CC2530/CC2538

Application Programming Interface

Документ API для доступа к компоненту SW Operating System Abstraction Layer (OSAL)

Document Number: SWRA194 Version 1.12

Скачать оригинал (eng)

 

 

 

 

 

 

 

 

 

ОГЛАВЛЕНИЕ

1. ВВЕДЕНИЕ ...............................................  1
1.1 ЦЕЛЬ ................................................ ........1
1.2 ОБЛАСТЬ ПРИМЕНЕНИЯ .........................1
1.3 СОКРАЩЕНИЯ ............................................ 1
2. ОБЗОР API .............................................. 2
2.1 ОБЗОР ................................................2
3.1 ВВЕДЕНИЕ ................................................ 3
3.2 OSAL_MSG_ALLOCATE () ....................... 3
3.3 OSAL_MSG_DEALLOCATE () .................. 3
3.4 OSAL_MSG_SEND () ................................ 4
3.5 OSAL_MSG_RECEIVE () ........................... 4
3.6 OSAL_MSG_FIND () ................................. 5
4.1 ВВЕДЕНИЕ ................................................ 6
4.2 OSAL_SET_EVENT () ................................. 6
5. API управления таймером ........................... 7
5.1 ВВЕДЕНИЕ ................................................ 7
5.2 OSAL_START_TIMEREX () ........................ 7
5.3 OSAL_START_RELOAD_TIMER () .............. 7
5.4 OSAL_STOP_TIMEREX () ............................. 8
5.5 OSAL_GETSYSTEMCLOCK () ........................ 8
6.1 ВВЕДЕНИЕ ................................................ .... 10
6.2 OSAL_INT_ENABLE () ................................... 10
6.3 OSAL_INT_DISABLE () ................................... 10
7. API управления задачами ................................ 12
7.1 ВВЕДЕНИЕ ................................................ ... 12
7.2 OSAL_INIT_SYSTEM () .................................. 12
7.3 OSAL_START_SYSTEM () ............................... 13
7.4 OSAL_RUN_SYSTEM () ................................. 13
7.5 OSAL_SELF( ).................................................14
8. API управления памятью..........................15
8.1 ВВЕДЕНИЕ...............................................15
8.2 OSAL_MEM_ALLOC( ) ....................................15
8.3 OSAL_MEM_FREE( ).........................................15
9. API управление питанием................................16
9.1 ВВЕДЕНИЕ..................................................16
9.2 OSAL_PWRMGR_INIT( ).......................................16
9.3 OSAL_PWRMGR_POWERCONSERVE( ) ..............16
9.4 OSAL_PWRMGR_DEVICE( )....................................17
9.5 OSAL_PWRMGR_TASK_STATE( )...........................17
10. API энергонезави​симой памяти.................................19
10.1 ВВЕДЕНИЕ ................................................ ............. 19
10.2 OSAL_NV_ITEM_INIT () ......................................... 20
10.3 OSAL_NV_READ () ............................................. 20
10.4 OSAL_NV_WRITE () ......................................... 21
10.5 OSAL_NV_DELETE () .................................... 21
10.6 OSAL_NV_ITEM_LEN () ................................. 22
10.7 OSAL_OFFSETOF () ..................................... 22
11.1 ВВЕДЕНИЕ ................................................ ............24
11.2 OSAL_SNV_READ () ............................................ 24
11.3 OSAL_SNV_WRITE () ........................................ 25
12. OSAL Система часов ................................. 26
12.1 ВВЕДЕНИЕ ................................................ .... 26
12.2 PARTICIPANTUPUPATE () ................................. 26
12.3 OSAL_SETCLOCK () .......................................... 26
12.4 OSAL_GETCLOCK () ........................................... 27
12.5 OSAL_CONVERTUTCTIME () ............................. 27
12.6 OSAL_CONVERTUTCSECS () ........................... 28
13. OSAL Разное .............................................. ...... 29
13.1 ВВЕДЕНИЕ ................................................ ........ 29
13.2 OSAL_RAND () .............................................. ..... 29
13.3 OSAL_MEMCMP () ............................................. 29
13.4 PARTAL_MEMSET () .......................................... 29
13.5 OSAL_MEMCPY () .......................................... 30

1. Введение

1.1 Цель

Цель этого документа - определить API OS Abstraction Layer (OSAL). Этот API-интерфейс позволяет записывать программные компоненты продукта стека TI, такие как Z-Stack ™, RemoTI ™ и BLE, независимо от особенностей операционной системы, ядра или среды задач (включая циклы управления или соединение с системой прерываний).

1.2 Область применения

Этот документ перечисляет все вызовы функций, предоставляемые OSAL. Вызовы функций указаны достаточно подробно, чтобы позволить программисту реализовать их.

1.3 Сокращения

API Application Programming Interface - интерфейс прикладного программирования
BLE Bluetooth Low Energy
NV Non-Volatile энергонезависимый
OSAL Operating System (OS) Abstraction Layer - Операционная система (ОС) уровень абстракции
RF4CE RF for Consumer Electronics - для бытовой электроники
RemoTI Texas Instruments RF4CE protocol stack - Стек протоколов RemoTI Texas Instruments RF4CE
Z-Stack Texas Instruments ZigBee protocol stack - Стек протоколов Texas Instruments ZigBee

2. Обзор API

2.1 Обзор

Уровень абстракции ОС используется для защиты программных компонентов стека TI от особенностей среды обработки. Он обеспечивает следующие функциональные возможности, независимые от среды обработки.

1. Регистрация задач, инициализация, запуск

2. Обмен сообщениями между задачами

3. Синхронизация задач

4. Обработка прерываний

5. Таймеры

6. Распределение памяти

3. API управления сообщениями

3.1 Введение

API управления сообщениями предоставляет механизм для обмена сообщениями между задачами или элементами обработки с различными средами обработки (например, процедурами обработки прерываний или функциями, вызываемыми в цикле управления). Функции этого API позволяют задаче распределять и отменять распределение буферов сообщений, отправлять командные сообщения другой задаче и получать ответные сообщения.

3.2 osal_msg_allocate ()

3.2.1 Описание

Эта функция вызывается задачей для выделения буфера сообщений, после чего задача / функция заполняет сообщение и вызывает osal_msg_send () для отправки сообщения другой задаче. Если буфер не может быть выделен, msg_ptr будет установлен в NULL.

ПРИМЕЧАНИЕ: не путайте эту функцию с osal_mem_alloc (), эта функция используется для выделения буфера для отправки сообщения между задачами [используя osal_msg_send ()]. Используйте osal_mem_alloc () для выделения блоков памяти.

3.2.2 Прототип

uint8 * osal_msg_allocate (uint16 len)

3.2.3 Подробности параметров

len - длина сообщения.

3.2.4 Возврат

Возвращаемое значение - указатель на буфер, выделенный для сообщения. Нулевой возврат указывает на сообщение операция выделения не удалась.

3.3 osal_msg_deallocate ()

3.3.1 Описание

Эта функция используется для отмены выделения буфера сообщений. Эта функция вызывается задачей (или элементом обработки) после завершения обработки полученного сообщения.

3.3.2 Прототип

uint8 osal_msg_deallocate (uint8 * msg_ptr)

3.3.3 Подробности параметров

msg_ptr - указатель на буфер сообщений, который должен быть выделен.

3.3.4 Возврат

Возвращаемое значение указывает на результат операции.

SUCCESS - Успешное удаление

INVALID_MSG_POINTER - Неверный указатель сообщения

MSG_BUFFER_NOT_AVAIL - Буфер в очереди

3.4 osal_msg_send ()

3.4.1 Описание

Функция osal_msg_send вызывается задачей для отправки команды или сообщения данных другой задаче или элементу обработки. Поле идентификатора destination_task должно ссылаться на действительную системную задачу. Функция osal_msg_send () также установит событие SYS_EVENT_MSG в списке событий целевых задач.

3.4.2 Прототип

uint8 osal_msg_send (uint8 destination_task, uint8 * msg_ptr)

3.4.3 Подробности параметров

destination_task - это идентификатор задачи для получения сообщения.
msg_ptr - указатель на буфер, содержащий сообщение. Msg_ptr должен быть указателем на действительный буфер сообщений, выделенный с помощью osal_msg_allocate ().

3.4.4 Возврат

Возвращаемое значение - это 1-байтовое поле, указывающее результат операции.
 
SUCCESS - Сообщение успешно отправлено
INVALID_MSG_POINTER - Неверный указатель сообщения INVALID_TASK Destination_task недействителен

3.5 osal_msg_receive ()

3.5.1 Описание

Эта функция вызывается задачей для получения полученного командного сообщения. Вызывающая задача должна отменить выделение буфера сообщений после обработки сообщения с помощью вызова osal_msg_deallocate ().

3.5.2 Прототип

uint8 * osal_msg_receive (uint8 task_id)

3.5.3 Подробности параметров

task_id - это идентификатор вызывающей задачи (которой было предназначено сообщение).

3.5.4 Возврат

Возвращаемое значение - указатель на буфер, содержащий сообщение, или NULL, если нет полученного сообщения.

3.6 osal_msg_find ()

3.6.1 Описание

Эта функция ищет существующее сообщение OSAL, соответствующее параметру task_id и событию.

3.6.2 Прототип

osal_event_hdr_t * osal_msg_find (uint8 task_id, событие uint8)

3.6.3 Подробности параметров

task_id - это идентификатор, которому должно соответствовать сообщение OSAL в очереди.
event - это идентификатор события OSAL, которому должно соответствовать сообщение OSAL в очереди.

3.6.4 Возврат

Возвращаемое значение - указатель на соответствующее сообщение OSAL в случае успеха или NULL в случае ошибки.

4. API синхронизации задач

4.1 Введение

Этот API позволяет задаче ожидать возникновения событий и возвращать управление в ожидании. Функции в этом API можно использовать для установки событий для задачи и уведомления о задаче, как только будет установлено любое событие.

4.2 osal_set_event ()

4.2.1 Описание

Эта функция вызывается для установки флагов событий для задачи.

4.2.2 Прототип

uint8 osal_set_event (uint8 task_id, uint16 event_flag)

4.2.3 Подробности параметров

task_id - это идентификатор задачи, для которой должно быть установлено событие.
event_flag - это 2-байтовая битовая карта, каждый бит которой указывает событие. Существует только одно системное событие (SYS_EVENT_MSG), остальные события / биты определяются задачей-получателем.

4.2.4 Возврат

Возвращаемое значение указывает на результат операции.

SUCCESS Успех
INVALID_TASK Неверное задание

5. API управления таймером

5.1 Введение

Этот API позволяет использовать таймеры как для внутренних задач (стек TI), так и для внешних (уровень приложения). API предоставляет функции для запуска и остановки таймера. Таймеры могут быть установлены с шагом в 1 миллисекунду.

5.2 osal_start_timerEx ()

5.2.1 Описание

Эта функция вызывается для запуска таймера. Когда таймер истекает, данный бит события будет установлен. Событие будет установлено для задачи, указанной в taskID. Этот таймер является однократным таймером, что означает, что по истечении времени таймера он не перезагружается.

5.2.2 Прототип

uint8 osal_start_timerEx (uint8 taskID, uint16 event_id,
                                         uint32 timeout_value);

5.2.3 Подробности параметров

taskID - это идентификатор задачи, которая должна получить событие по истечении таймера.
event_id - это пользовательский бит события. Когда таймер истекает, вызывающая задача будет уведомлена (событие).
timeout_value - количество времени (в миллисекундах) до установки события таймера.

5.2.4 Возврат

Возвращаемое значение указывает на результат операции.
 
SUCCESS  - Успешный запуск таймера
NO_TIMER_AVAILABLE - Невозможно запустить таймер

5.3 osal_start_reload_timer ()

5.3.1 Описание

Вызовите эту функцию, чтобы запустить таймер, который, когда он истечет, установит бит события и автоматически перезагрузит значение времени ожидания. Событие будет установлено для задачи, указанной в taskID.

5.3.2 Прототип

uint8 osal_start_reload_timer (uint8 taskID, uint16 event_id,
              uint32 timeout_value);

5.3.3 Подробности параметров

taskID - это идентификатор задачи, которая должна получить событие по истечении таймера.
event_id - это пользовательский бит события. Когда таймер истекает, вызывающая задача будет уведомлена (событие).
timeout_value - количество времени (в миллисекундах) до установки события таймера. Это значение перезагружается в таймер, когда время истекает.

5.3.4 Возврат

Возвращаемое значение указывает на результат операции.

SUCCESS - Успешный запуск таймера
NO_TIMER_AVAILABLE - Невозможно запустить таймер

5.4 osal_stop_timerEx ()

5.4.1 Описание

Эта функция вызывается, чтобы остановить таймер, который уже был запущен. В случае успеха функция отменит таймер и предотвратит событие, связанное с таймером.

5.4.2 Прототип

uint8 osal_stop_timerEx (uint8 task_id, uint16 event_id);

5.4.3 Подробности параметров

task_id - это задача, для которой нужно остановить таймер.
event_id - это идентификатор таймера, который должен быть остановлен.

5.4.4 Возврат

Возвращаемое значение указывает на результат операции.

ТSUCCESS аймер успешно остановлен
INVALID_EVENT_ID Неверное событие

5.5 osal_GetSystemClock ()

5.5.1 Описание

Эта функция вызывается для чтения системных часов

5.5.2 Прототип

uint32 osal_GetSystemClock (void);

5.5.3 Подробности параметров

Нет.

5.5.4 Возврат

Системные часы в миллисекундах.

6. API управления прерываниями

6.1 Введение

Этот API позволяет заданию взаимодействовать с внешними прерываниями. Функции в API позволяют задаче связать определенную служебную процедуру с каждым прерыванием. Прерывания могут быть включены или отключены. Внутри сервисной процедуры события могут быть установлены для других задач.

6.2 osal_int_enable ()

6.2.1 Описание

Эта функция вызывается для разрешения прерывания. После включения возникновение прерывания вызывает вызванную служебную подпрограмму, связанную с этим прерыванием.

6.2.2 Прототип

uint8 osal_int_enable (uint8 interrupt_id)

6.2.3 Подробности параметров

interrupt_id идентифицирует прерывание, которое должно быть включено.

6.2.4 Возврат

Возвращаемое значение указывает на результат операции.

SUCCESS - прерывание успешно выполнено
INVALID_INTERRUPT_ID - Неверное прерывание

6.3 osal_int_disable ()

6.3.1 Описание

Эта функция вызывается для отключения прерывания. Когда происходит отключенное прерывание, служебная процедура, связанная с этим прерыванием, не вызывается.

6.3.2 Прототип

uint8 osal_int_disable (uint8 interrupt_id)

6.3.3 Подробности параметров

interrupt_id идентифицирует прерывание, которое будет отключено.

6.3.4 Возврат

Возвращаемое значение указывает на результат операции.

SUCCESS - прерывание успешно отключено
INVALID_INTERRUPT_ID - Неверное прерывание

7. API управления задачами

7.1 Введение

Этот API используется для добавления и управления задачами в системе OSAL. Каждая задача состоит из функции инициализации и функции обработки событий. OSAL вызывает osalInitTasks () [приложение поставляется] для инициализации задач, а OSAL использует таблицу задач (const pTaskEventHandlerFn tasksArr []) для вызова обработчика событий для каждой задачи (также входит в поставку приложения).

Пример реализации таблицы задач:

const pTaskEventHandlerFn tasksArr [] =
{
  macEventLoop,
  nwk_event_loop,
  Hal_ProcessEvent,
  MT_ProcessEvent,
  APS_event_loop,
  ZDApp_event_loop,
};
const uint8 tasksCnt = sizeof (tasksArr) / sizeof (tasksArr [0]);

Пример реализации osalInitTasks ():

void osalInitTasks (void)
{
  uint8 taskID = 0;
  tasksEvents = (uint16 *) osal_mem_alloc (sizeof (uint16) * tasksCnt);
  osal_memset (tasksEvents, 0, (sizeof (uint16) * tasksCnt));
  macTaskInit (taskID ++);
  nwk_init (taskID ++);
  Hal_Init (taskID ++);
  MT_TaskInit (taskID ++);
  APS_Init (taskID ++);
  ZDApp_Init (taskID ++);
}

7.2 osal_init_system ()

7.2.1 Описание

Эта функция инициализирует систему OSAL. Функция должна быть вызвана при запуске до использования любой другой функции OSAL.

7.2.2 Прототип

uint8 osal_init_system (void)

7.2.3 Подробности параметров

Нет.

7.2.4 Возврат

Возвращаемое значение указывает на результат операции.

SUCCESS - Успех

7.3 osal_start_system ()

7.3.1 Описание

Эта функция является основной функцией цикла системы задач, многократно вызывая osal_run_system () из бесконечного цикла. Эта функция никогда не возвращается. При использовании другого планировщика он должен вызывать sal_run_system () напрямую и не использовать эту функцию.

7.3.2 Прототип

void osal_start_system (void)

7.3.3 Подробности параметров

Нет.

7.3.4 Возврат

Нет.

7.4 osal_run_system ()

7.4.1 Описание

Эта функция выполнит один проход через таблицу OSAL taskEvents и вызовет функцию task_event_processor для первой задачи, которая найдена как минимум с одним ожидающим событием. После обслуживания события все оставшиеся события будут возвращены в основной цикл в следующий раз. Если нет ожидающих событий (для всех задач), эта функция переводит процессор в спящий режим.

7.4.2 Прототип

void osal_run_system (void)

7.4.3 Подробности параметров

Нет.

7.4.4 Возврат

Нет.

7.5 osal_self ()

7.5.1 Описание

Эта функция возвращает идентификатор задачи текущей активной задачи OSAL, соответствующий индексу задачи в таблице задач OSAL. Эта функция может использоваться приложением для определения идентификатора задачи OSAL, в которой оно выполняется. При вызове, когда нет задачи OSAL, эта функция возвращает значение TASK_NO_TASK.

7.5.2 Прототип

uint8 osal_self (void)

7.5.3 Подробности параметров

Нет.

7.5.4 Возврат

OSAL ID задачи текущей активной задачи.
 
0x00 - 0xFE - ID активной задачи OSAL
0xFF (TASK_NO_TASK)  - Нет активной задачи OSAL

8. API управления памятью

8.1 Введение

Этот API представляет собой простую систему выделения памяти. Эти функции позволяют динамическое распределение памяти.

8.2 osal_mem_alloc ()

8.2.1 Описание

Эта функция представляет собой простую функцию выделения памяти, которая возвращает указатель на буфер (в случае успеха).

8.2.2 Прототип

void * osal_mem_alloc (размер uint16);

8.2.3 Подробности параметров

size - количество байтов в буфере.

8.2.4 Возврат

Пустой указатель (который должен быть приведен к намеченному типу буфера) на вновь выделенный буфер. Указатель NULL возвращается, если недостаточно памяти для выделения.

8.3 osal_mem_free ()

8.3.1 Описание

Эта функция освобождает выделенную память для повторного использования. Это работает, только если память уже была выделена с помощью osal_mem_alloc ().

8.3.2 Прототип

void osal_mem_free (void * ptr);

8.3.3 Подробности параметров

ptr - указатель на буфер, который нужно «освободить». Буфер должен быть предварительно выделен с помощью osal_mem_alloc ().

8.3.4 Возврат

Нет.

9. API управления питанием

9.1 Введение

В этом разделе описывается система управления питанием OSAL. Система позволяет приложениям / задачам уведомлять OSAL, когда можно безопасно отключить приемник и внешнее оборудование, и перевести процессор в спящий режим.

​Есть две функции для управления питанием. Первый, osal_pwrmgr_device (), вызывается для установки режима уровня устройства (энергосбережение или отсутствие энергосбережения). Затем существует состояние питания задачи, каждая задача может удерживать диспетчер питания от сохранения энергии, вызывая osal_pwrmgr_task_state (PWRMGR_HOLD). Если задача «Удерживает» диспетчер питания, для этого необходимо вызвать osal_pwrmgr_task_state (PWRMGR_CONSERVE), чтобы диспетчер питания мог продолжать работу в режиме энергосбережения.

По умолчанию, когда задача инициализируется, состояние питания каждой задачи устанавливается на PWRMGR_CONSERVE, поэтому, если задача не хочет откладывать сохранение энергии (без изменений), ей не нужно вызывать osal_pwrmgr_task_state ().

​Кроме того, по умолчанию устройство с батарейным питанием будет находиться в состоянии PWRMGR_ALWAYS_ON до тех пор, пока оно не присоединится к сети, затем оно изменит свое состояние на PWRMGR_BATTERY. Это означает, что если устройство не может найти устройство для подключения, оно не перейдет в состояние энергосбережения. Если вы хотите изменить это поведение, добавьте osal_pwrmgr_device (PWRMGR_BATTERY) в функции инициализации задачи вашего приложения или когда ваше приложение останавливает / приостанавливает процесс присоединения.

Диспетчер питания будет проверять режим устройства и общее состояние питания всех задач, прежде чем перейти в состояние энергосбережения.

9.2 osal_pwrmgr_init ()

9.2.1 Описание

Эта функция инициализирует переменные, используемые системой управления питанием.
ВАЖНО: не вызывайте эту функцию, она уже вызывается osal_init_system ().

9.2.2 Прототип

void osal_pwrmgr_init (void);

9.2.3 Подробности параметров

Нет.

9.2.4 Возврат

Нет.

9.3 osal_pwrmgr_powerconserve ()

9.3.1 Описание

Эта функция вызывается для перехода в режим отключения питания.
ВАЖНО: Не вызывайте эту функцию, она уже вызывается в основном цикле OSAL [osal_start_system ()].

9.3.2 Прототип

void osal_pwrmgr_powerconserve (void);

9.3.3 Подробности параметров

Нет.

9.3.4 Возврат

Нет.

9.4 osal_pwrmgr_device ()

9.4.1 Описание

Эта функция вызывается при включении питания или всякий раз, когда меняются требования к питанию (например, от аккумулятора с поддержкой).

Эта функция устанавливает общее состояние ВКЛ / ВЫКЛ диспетчера питания устройства. Эта функция должна вызываться из центрального контролирующего объекта (например, ZDO).

9.4.2 Прототип

void osal_pwrmgr_device (uint8 pwrmgr_device);

9.4.3 Подробности параметров

pwrmgr_device - изменяет или устанавливает режим энергосбережения.

PWRMGR_ALWAYS_ON  - При этом выборе экономия энергии не происходит, и устройство, скорее всего, работает от сети.
PWRMGR_BATTERY - Включает энергосбережение.

9.4.4 Возврат

Нет.

9.5 osal_pwrmgr_task_state ()

9.5.1 Описание

Эта функция вызывается каждой задачей, чтобы определить, хочет ли эта задача сохранить энергию. Задача вызовет эту функцию, чтобы проголосовать, хочет ли она, чтобы OSAL экономила электроэнергию, или она хочет отложить экономию энергии. По умолчанию при создании задачи ее собственное состояние питания устанавливается на сохранение. Если задача всегда хочет быть активной, ей вообще не нужно вызывать эту функцию.

9.5.2 Прототип

uint8 osal_pwrmgr_task_state (uint8 task_id, состояние uint8);

9.5.3 Подробности параметров

state - изменяет состояние питания задачи.
 
PWRMGR_CONSERVE - Включает энергосбережение, все задачи должны быть согласованы. Это состояние по умолчанию при инициализации задачи.
PWRMGR_HOLD - Отключает энергосбережение.

9.5.4 Возврат

Возвращаемое значение указывает на результат операции.

SUCCESS - Успех
INVALID_TASK - Неверное задание

10. API энергонезависимой памяти

10.1 Введение

В этом разделе описывается система энергонезависимой (NV) памяти OSAL. Система позволяет приложениям постоянно сохранять информацию в памяти устройства. Он также используется стеком для постоянного хранения определенных элементов, требуемых спецификацией ZigBee. Функции NV предназначены для чтения и записи пользовательских элементов, состоящих из произвольных типов данных, таких как структуры или массивы. Пользователь может прочитать или записать весь элемент или элемент элемента, установив соответствующее смещение и длину. API не зависит от носителя хранения NV и может быть реализован для флэш-памяти или EEPROM.

Каждый элемент NV имеет уникальный идентификатор. Для приложений существует определенный диапазон значений идентификаторов, в то время как некоторые значения идентификаторов зарезервированы или используются стеком или платформой. Если ваше приложение создает свой собственный элемент NV, оно должно выбрать идентификатор из диапазона значений приложения. Смотрите таблицу ниже.
VALUE USER
0x0000  зарезервировано
0x0001 - 0x0020 OSAL
0x0021 - 0x0040 NWK
0x0041 - 0x0060 APS
0x0061 - 0x0080 Security
0x0081 - 0x00B0 ZDO
0x00B1 - 0x00E0  Commissioning SAS - Ввод в эксплуатацию SAS
0x00E1 - 0x0100 зарезервировано
0x0101 - 0x01FF Trust Center Link Keys - Ключи центра управления безопасностью
0x0201 - 0x0300
ZigBee-Pro: APS Ссылки Ключи
ZigBee-RF4CE: сетевой уровень
0x0301 - 0x0400
ZigBee-Pro: мастер-ключи
ZigBee-RF4CE: фреймворк приложения
0x0401 - 0x0FFF Приложение
0x1000 -0xFFFF Зарезервировано

При использовании этого API есть несколько важных соображений:

1. Это блокирующие вызовы функций, и операция может занять несколько миллисекунд. Это особенно верно для операций записи NV. Кроме того, прерывания могут быть отключены на несколько миллисекунд. Лучше всего выполнять эти функции в тех случаях, когда они не конфликтуют с другими критичными по времени операциями.

Например, хорошее время для записи элементов NV будет при выключенном приемнике.

2. Попытайтесь выполнять записи NV редко. Это требует времени и силы; также большинство флэш-устройств имеют ограниченное количество циклов стирания.

3. Если структура одного или нескольких элементов NV изменяется, особенно при обновлении одной версии программного обеспечения стека TI на другую, необходимо стереть и повторно инициализировать память NV. В противном случае операции чтения и записи для измененных элементов NV не будут выполнены или приведут к ошибочным результатам.

10.2 osal_nv_item_init ()

10.2.1 Описание

Инициализируйте элемент в NV. Эта функция проверяет наличие элемента в NV. Если он не существует, он создается и инициализируется с данными, переданными в функцию, если таковые имеются.

Эта функция должна вызываться для каждого элемента перед вызовом osal_nv_read () или osal_nv_write ().

10.2.2 Прототип

uint8 osal_nv_item_init (uint16 id, uint16 len, void * buf);

10.2.3 Подробности параметров

id - идентификатор элемента, определенный пользователем.
len - длина элемента в байтах.
* buf - указатель на данные инициализации элемента. Если данные инициализации отсутствуют, установите значение NULL.

10.2.4 Возврат

Возвращаемое значение указывает на результат операции.
 
SUCCESS - Успех
NV_ITEM_UNINIT - Успешно, но элемент не существует
NV_OPER_FAILED - Операция не удалась

10.3 osal_nv_read ()

10.3.1 Описание

Чтение данных из NV. Эта функция может использоваться для считывания всего элемента из NV или элемента элемента путем индексации элемента со смещением. Считанные данные копируются в * buf.

10.3.2 Прототип

uint8 osal_nv_read( uint16 id, uint16 offset, uint16 len, void *buf );

10.3.3 Подробности параметров

id - идентификатор элемента, определенный пользователем.
offset - смещение памяти в элемент в байтах.
len - длина элемента в байтах.
* buf - данные считываются в этот буфер.

10.3.4 Возврат

Возвращаемое значение указывает на результат операции.

SUCCESS - Успех
NV_OPER_FAILED - Операция не удалась

10.4 osal_nv_write ()

10.4.1 Описание

Записать данные в NV. Эта функция может использоваться для записи всего элемента в NV или элемента элемента путем индексации элемента со смещением.

10.4.2 Прототип

uint8 osal_nv_write( uint16 id, uint16 offset, uint16 len, void *buf );

10.4.3 Подробности параметров

id - идентификатор элемента, определенный пользователем.
offset - смещение памяти в элемент в байтах.
len - длина элемента в байтах.
* buf - данные для записи.

10.4.4 Возврат

Возвращаемое значение указывает на результат операции.

SUCCESS - Успех
NV_ITEM_UNINIT - Элемент не инициализирован
NV_OPER_FAILED - Операция не удалась

10.5 osal_nv_delete ()

10.5.1 Описание

Удалить элемент из NV. Эта функция проверяет наличие элемента в NV. Если элемент существует и его длина соответствует длине, указанной в вызове функции, элемент будет удален из NV.

10.5.2 Прототип

uint8 osal_nv_delete (uint16 id, uint16 len);

10.5.3 Подробности параметров

id - идентификатор элемента, определенный пользователем.
len - длина элемента в байтах.

10.5.4 Возврат

Возвращаемое значение указывает на результат операции.

SUCCESS - Успех
NV_ITEM_UNINIT - Элемент не инициализирован
NV_BAD_ITEM_LEN - Неверный параметр длины
NV_OPER_FAILED - Операция не удалась

10.6 osal_nv_item_len ()

10.6.1 Описание

Получить длину элемента в NV. Эта функция возвращает длину элемента NV, если он найден, иначе ноль.

10.6.2 Прототип

uint16 osal_nv_item_len( uint16 id );

10.6.3 Подробности параметров

id - идентификатор элемента, определенный пользователем.

10.6.4 Возврат

Возвращаемое значение указывает на результат операции.

0          NV элемент не найден
1 - N    Длина элемента NV

10.7 osal_offsetof ()

10.7.1 Описание

Этот макрос вычисляет смещение памяти в байтах элемента в структуре. Это полезно для расчета параметра смещения, используемый функциями NV API.

10.7.2 Прототип

osal_offsetof(type, member)

10.7.3 Подробности параметров

type - Тип конструкции.
member - член структуры.
 

11. API простой энергонезависимой памяти

11.1 Введение

В этом разделе описывается простая энергонезависимая система памяти OSAL. Как и система памяти OSAL NV, система памяти Simple NV позволяет приложениям постоянно сохранять информацию в памяти устройства.

С другой стороны, в отличие от системы памяти OSAL NV, система памяти Simple NV предоставляет гораздо более простой API для уменьшения размера кода приложения и размера стека, а также размера кода реализации системы OSAL Simple NV. Пользователь может прочитать или записать весь элемент, но он не может частично прочитать или записать элемент.

Как и в системе памяти NV, каждый элемент NV имеет уникальный идентификатор. Для приложений существует определенный диапазон значений идентификаторов, в то время как некоторые значения идентификаторов зарезервированы или используются стеком или платформой. Если ваше приложение создает свои собственные элементы NV, оно должно выбрать идентификатор из диапазона значений приложения. Смотрите таблицу ниже.

Обратите внимание, что таблица может не применяться к определенной пользовательской сборке стека.

VALUE  USER
0x00  зарезервировано
0x01 - 0x6F
Зарезервировано для ZigBee RF4CE сетевой уровень
0x70 - 0x7F
Зарезервировано для ZigBee RF4CE рамки приложения (РТИ)
0x80 - 0xFE Приложение
0xFF Зарезервировано
 

При использовании этого API есть несколько важных соображений:

1. Это блокирующие вызовы функций, и операция может занять несколько сотен миллисекунд.

Это особенно верно для операций записи NV. Кроме того, прерывания могут быть отключены на несколько миллисекунд. Лучше всего выполнять эти функции в те моменты, когда они не конфликтуют с другими критически важными операциями. Например, хорошее время для записи элементов NV будет при выключенном приемнике.

2. Кроме того, функции не должны вызываться из подпрограммы обработки прерываний, если иное не указано в отдельном примечании к приложению или примечании к выпуску реализации.

3. Попробуйте выполнять записи NV редко. Это требует времени и силы; также большинство флэш-устройств имеют ограниченное количество циклов стирания.

4. Если структура одного или нескольких элементов NV изменяется, особенно при обновлении одной версии программного обеспечения стека TI на другую, необходимо стереть и повторно инициализировать память NV. В противном случае операции чтения и записи для измененных элементов NV не будут выполнены или приведут к ошибочным результатам.

11.2 osal_snv_read ()

11.2.1 Описание

Чтение данных из NV. Эта функция может быть использована для чтения всего элемента из NV. Считанные данные копируются в * pBuf.

11.2.2 Прототип

uint8 osal_snv_read (osalSnvId_t id, osalSnvLen_t len, void * pBuf);

11.2.3 Подробности параметров

id - идентификатор элемента, определенный пользователем.
len - длина элемента в байтах.
* pBuf - данные считываются в этот буфер.

11.2.4 Возврат

Возвращаемое значение указывает на результат операции. Обратите внимание, что попытка прочитать элемент, который никогда не записывался ранее, приведет к коду возврата NV_OPER_FAILED.

SUCCESS  - Успех
NV_OPER_FAILED - Операция не удалась

11.3 osal_snv_write ()

11.3.1 Описание

Записать данные в NV. Эта функция может быть использована для записи всего элемента в NV.

11.3.2 Прототип

uint8 osal_snv_write (osalSnvId_t id, osalSnvLen_t len, void * pBuf);

11.3.3 Подробности параметров

id - идентификатор элемента, определенный пользователем.
len - длина элемента в байтах.
* pBuf - данные для записи.

11.3.4 Возврат

Возвращаемое значение указывает на результат операции. Обратите внимание, что разрешено записывать элемент, который никогда ранее не инициализировался в системе NV другими способами.

SUCCESS - Успех
NV_OPER_FAILED - Операция не удалась

12. OSAL Система часов

12.1 Введение

В этом разделе описывается система часов OSAL. Система предоставляет способ сохранить дату и время для устройства. Эта система будет хранить количество секунд с 0 часов, 0 минут, 0 секунд с 1 января 2000 года по UTC. В этой системе используются следующие два типа данных / структуры (определенные в OSAL_Clock.h):

// number of seconds since 0 hrs, 0 minutes, 0 seconds, on the
// 1st of January 2000 UTC
typedef uint32 UTCTime;
// To be used with
typedef struct
{
   uint8 seconds; // 0-59
   uint8 minutes; // 0-59
   uint8 hour; // 0-23
   uint8 day; // 0-30
   uint8 month; // 0-11
   uint16 year; // 2000+
} UTCTimeStruct;

Вы должны включить флаг компилятора OSAL_CLOCK, чтобы использовать эту функцию. Кроме того, эта функция не поддерживает время для спящих устройств.

12.2 osalTimeUpdate ()

12.2.1 Описание

Вызывается из osal_run_system () для обновления времени. Эта функция считывает количество тактов MAC 320usec для поддержания времени OSAL Clock. Не вызывайте эту функцию где-либо еще.

12.2.2 Прототип

void osalTimeUpdate (void);

12.2.3 Подробности параметров

Нет.

12.2.4 Возврат

Нет.

12.3 osal_setClock ()

12.3.1 Описание

Вызовите эту функцию, чтобы инициализировать время устройства.

12.3.2 Прототип

void osal_setClock (UTCTime newTime);

12.3.3 Подробности параметров

newTime - новое время в секундах с 0 часов, 0 минут, 0 секунд, 1 января 2000 года UTC.

12.3.4 Возврат

Нет.

12.4 osal_getClock ()

12.4.1 Описание

Вызовите эту функцию, чтобы получить текущее время устройства.

12.4.2 Прототип

UTCTime osal_getClock (void);

12.4.3 Подробности параметров

Нет.

12.4.4 Возврат

Текущее время в секундах с нуля часов, 0 минут, 0 секунд, 1 января 2000 года UTC.

12.5 osal_ConvertUTCTime ()

12.5.1 Описание

Вызовите эту функцию для преобразования UTCTime в UTCTimeStruct.

12.5.2 Прототип

void osal_ConvertUTCTime (UTCTimeStruct * tm, UTCTime secTime);

12.5.3 Подробности параметров

secTime - время в секундах с 0 часов, 0 минут, 0 секунд, 1 января 2000 года UTC.
tm - указатель на временную структуру.

12.5.4 Возврат

Нет.

12.6 osal_ConvertUTCSecs ()

12.6.1 Описание

Вызовите эту функцию, чтобы преобразовать UTCTimeStruct в UTCTime.

12.6.2 Прототип

UTCTime osal_ConvertUTCSecs (UTCTimeStruct * tm);

12.6.3 Подробности параметров

tm - указатель на временную структуру.

12.6.4 Возврат

Преобразованное время в секундах с 0 часов, 0 минут, 0 секунд, 1 января 2000 года UTC

13. OSAL Разное

13.1 Введение

В этом разделе описываются различные функции OSAL, которые не вписываются в предыдущие категории OSAL.

13.2 osal_rand ()

13.2.1 Описание

Эта функция возвращает 16-битное случайное число.

13.2.2 Прототип

uint16 osal_rand (void);

13.2.3 Подробности параметров

Нет.

13.2.4 Возврат

Возвращает случайное число.

13.3 osal_memcmp ()

13.3.1 Описание

Сравнение разделов памяти.

13.3.2 Прототип

uint8 osal_memcmp( const void GENERIC *src1, const void GENERIC *src2,
                                 unsigned int len );

13.3.3 Подробности параметров

src1 - место сравнения памяти 1.
src2 - место сравнения памяти 2.
len - длина сравнения.

13.3.4 Возврат

TRUE - то же самое, FALSE - другое.

13.4 osal_memset ()

13.4.1 Описание

Устанавливает для буфера определенное значение.

13.4.2 Прототип

void *osal_memset( void *dest, uint8 value, int len );

13.4.3 Подробности параметров

dest - буфер памяти для установки «значения» в.
value - что устанавливать каждый байт «dest».
len - длина, чтобы установить «значение» в «dest».

13.4.4 Возврат

Указатель на то, где в буфере эта функция остановлена.

13.5 osal_memcpy ()

13.5.1 Описание

Копирует один буфер в другой буфер.

13.5.2 Прототип

void *osal_memcpy( void *dst, const void GENERIC *src, unsigned int len);

13.5.3 Подробности параметров

dst - целевой буфер.
src - исходный буфер.
len - длина копии.

13.5.4 Возврат

Указатель на конец буфера назначения.

 

Ваша оценка: None Средняя: 10 (8 votes)