当前位置: 首页 > 文档资料 > YoC 编程基础 >

RNG

优质
小牛编辑
116浏览
2023-12-01

对于不同底层驱动的rng操作实现,统一封装成本文所述hal rng接口。 hal相关头文件位于目录:include/aos/hal hal相关实现位于具体的mcu目录下,如:platform/mcu/stm32f1xx/hal/

函数名称功能描述
hal_random_num_read获取随机数

请参考include/aos/hal/rng.h

相关结数据结构

random_dev_t

typedef struct {
    uint8_t port; /* random device port */
    void   *priv; /* priv data */
} random_dev_t;

hal_random_num_read

获取随机数

函数原型

int32_t hal_random_num_read(random_dev_t random, void *buf, int32_t bytes);

参数

参数名称出入参参数描述参数示例
random_dev_t random入参RNG设备描述用户自定义一个random_dev_t结构体
void *buf出参返回的数据指针char buf[4]; 传入buf
int32_t bytes入参数据字节数4

返回值

返回成功或失败, 返回0表示获取随机数成功,非0表示失败

调用示例

#define RNG1_PORT_NUM 1
/* define dev */
random_dev_t rng1;
int value = 0;
rng1.port = RNG1_PORT_NUM;
ret = hal_random_num_read(rng1, &value, sizeof(int));

使用

添加该组件

在相应的platform/mcu的mk内,添加对应hal文件的编译包含。

包含头文件

#include "aos/hal/rng.h"

使用示例

#include <aos/hal/rng.h>

#define RNG1_PORT_NUM 1

/* define dev */
random_dev_t rng1;

int application_start(int argc, char *argv[])
{
    int ret   = -1;
    int value = 0;

    rng1.port = RNG1_PORT_NUM;

    ret = hal_random_num_read(rng1, &value, sizeof(int));
    if (ret != 0) {
        printf("rng read error !\n");
    }

    while(1) {

        /* sleep 500ms */
        aos_msleep(500);
    };
}

注:port为逻辑端口号,其与物理端口号的对应关系见具体的对接实现

移植说明
   新建hal_rng_xxmcu.c和hal_rng_xxmcu.h的文件,并将这两个文件放到platform/mcu/xxmcu/hal目录下。在hal_rng_xxmcu.c中实现所需要的hal函数,hal_rng_xxmcu.h中放置相关宏定义