AI嵌入式K210项目(6)-开启双核模式

发布时间:2024年01月16日


前言

前面我们在介绍K210时提及到,K210芯片中有两个RISC-V核心,一般情况下,只有一个核心在运行,本章将介绍如何开启双核模式。

一、K210双核心和BSP介绍

K210系统架构如下,可以看到其包含两个64位RISC-V核心,两个核心分别带有FPU处理单元,FPU(浮点运算单元)是集成于CPU中的专用于浮点运算的处理器。K210核心0和核心1都具备独立的FPU,满足IEEE754-2008标准,计算流程以流水线方式进行,具备很强的运算能力,每个FPU都具备除法器和平方根运算器,支持单精度和双精度浮点硬件加速运算。
在这里插入图片描述
K210提供了丰富的BSP调用

板级对应的头文件 bsp.h

bsp.h头文件是与平台相关的通用函数,核之间锁的相关操作。

提供获取当前运行程序的CPU核编号的接口以及启动第二个核的入口。

为用户提供以下接口:

? register_core1:向核心1注册函数,并启动核心1

? current_coreid:获取当前CPU的核心编号(0/1)

? read_cycle:获取CPU开机至今的时钟数。可以用使用这个函数精准的确定程序运行时钟。可以配合sysctl_clock_get_freq(SYSCTL_CLOCK_CPU)计算运行的时间。

? spinlock_lock:自旋锁,不可嵌套,不建议在中断使用,中断中可以使用spinlock_trylock。

? spinlock_unlock:自旋锁解锁。

? spinlock_trylock:获取自旋锁,成功获取锁会返回0,失败返回-1。

? corelock_lock:获取核间锁,核之间互斥的锁,同核内该锁会嵌套,只有异核之间会阻塞。不建议在中断使用该函数,中断中可以使用corelock_trylock。

? corelock_trylock:获取核间锁,同核时锁会嵌套,异核时非阻塞。成功获取锁会返回0,失败返回-1。

? corelock_unlock:核间锁解锁。

? sys_register_putchar:注册系统输出回调函数,printf时会调用该函数。系统默认使用UART3,如果需要修改UART则调用uart_debug_init函数。

? sys_register_getchar:注册系统输入回调函数,scanf时会调用该函数。系统默认使用UART3,如果需要修改UART则调用uart_debug_init函数。

? sys_stdin_flush:清理stdin缓存。

? get_free_heap_size:获取空闲内存大小。

? printk:打印核心调试信息。

二、实验过程

新建一个hello_world的文件夹,在里面新建main.c,这次打印我们直接调用printf了哦
在这里插入图片描述

代码实现

#include <bsp.h>
#include <sysctl.h>

int core1_function(void *ctx)
{
    uint64_t core = current_coreid();
    printf("Core %ld Hello world\n", core);
    while(1);
}

int main(void)
{
    sysctl_pll_set_freq(SYSCTL_PLL0, 800000000);
    uint64_t core = current_coreid();
    int data;
    printf("Core %ld Hello world\n", core);
    register_core1(core1_function, NULL);

    /* Clear stdin buffer before scanf */
    sys_stdin_flush();

    scanf("%d", &data);
    printf("\nData is %d\n", data);
    while(1)
        continue;
    return 0;
}

代码写好后,我们开始编译,注意:如果你编译过程中出现错误,可以先make clean掉之前生成的过程文件,重新生成

cd build
//注意这里的目标文件目录改成gpio,和刚才新建的文件夹名称一致
cmake .. -DPROJ=hello_world -G "MinGW Makefiles"
make

烧录
在这里插入图片描述
然后来看看结果吧
在这里插入图片描述


总结

本章介绍了K210是双核心CPU和系统调用,两个核心都可以单独运行,K210的SDK默认是运行核心0,核心1需要手动注册开启。

文章来源:https://blog.csdn.net/bin_zhang1/article/details/135622821
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。