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


前言

前面我们在介绍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需要手动注册开启。

  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LinfineEdu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值