Raspberry Pi Pico~pico multicore example

在开发pico的过程中,对比着pico官方提供的pico examples开始写多核例程。在一个小坑上兜兜转转好久,姑且把这归结于经验不足吧,先做个简单分享。

开发环境是RTThread Studio,使用生成的模板工程。RTThread不支持pico的多核,使用多核应用可能有内存管理等风险,如何开启先按下不表。作者构思了一个例程,主要流程为:

在main函数中启动core1,构造俩线程开始调度。thread 1内容是按键1开启流水灯1号,thread 2内容是按键2向FIFO发信号,检测FIFO区有无信号,有则开启流水灯2号。

main函数外部有按键检测、FFT、core1_entry函数,core1_entry函数内容为检测FIFO区有无信号,有则开启流水灯3号,并向FIFO发信号。

在实际下载验证时,出现奇奇怪怪的问题,最后认认真真看代码解决了。我主要的问题代码部分在于:

static void num2_thread_entry(void* parameter)
{
    while(1)
    {
        /* */
        static uint8_t key2 = 0;
        key2 = Key_Scan();
        if(key2 == 2)
        {
            multicore_fifo_push_blocking(EVT1_VAL);
            sleep_ms(1000);//这个
        }
        if(multicore_fifo_rvalid())//还有这个
        {
            g = multicore_fifo_pop_blocking();

            if(g == FLAG_VAL)
            {
                /* */
            }
        }
    }
}

①在写按键检测的时候,没有加消抖,所以按一次往FIFO加了好多个EVT1_VAL。假如你的multicore_fifo_push_blocking不是在按键检测里的话,就不需要消抖。总而言之是按键检测没做好才会出现的问题。

②设了软件标志位,在读FIFO区数据的时候,首先要multicore_fifo_rvalid一下,这个函数是看FIFO区有无数据,不用这个函数直接multicore_fifo_pop_blocking的话,函数所在的线程会阻塞在这里,一直等待FIFO的数据出现。

/*! \brief Check the read FIFO to see if there is data waiting
 *  \ingroup multicore_fifo
 * 检测FIFO是否有数据。
 *
 * \return true if the FIFO has data in it, false otherwise
 */
static inline bool multicore_fifo_rvalid() {
    return !!(sio_hw->fifo_st & SIO_FIFO_ST_VLD_BITS);
}

 multicore_fifo_rvalid函数说明

/*! \brief Push data on to the FIFO.
 *  \ingroup multicore_fifo
 *
 * This function will block until there is space for the data to be sent.
 * Use multicore_fifo_wready() to check if it is possible to write to the
 * FIFO if you don't want to block.
 * 函数会阻塞,直到有数据被发送。
 *
 * \param data A 32 bit value to push on to the FIFO
 */
void multicore_fifo_push_blocking(uint32_t data);

multicore_fifo_pop_blocking函数说明

pico官方文档的建议是不使用FIFO函数,毕竟pico examples中还有quene的例子。核间通信要熟悉原理才能得心应手。之后有空研究下quene的例程,把pico双核用用好。最后着重说明,pico核之间共享内存,而RTThread目前没有适配pico多核,amp、smp都没有,使用需谨慎!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值