我正在尝试让多核在我的 pico 上工作,
#include <stdio.h>
#include "pico/stdlib.h"
#include "pico/multicore.h"
void core1_main()
{
stdio_init_all();
while (1)
{
uint32_t t = multicore_fifo_pop_blocking();
printf("hellow world %d \n", t);
}
}
int main()
{
multicore_launch_core1(&core1_main);
uint32_t i = 0;
while (1)
{
sleep_ms(250);
multicore_fifo_push_blocking(i++);
}
}
这是我要开始工作的一项非常基本的任务。我正在尝试了解更多关于这种多核魔法的信息。基本上我开始在 core1 上等待一些数据通过。然后我就干脆打印出来等待下一条数据。
在核心 0 上,我每 250 毫秒将一个数字推送到 FIFO。
我在编译中没有收到任何错误,但运行代码不会产生任何输出。
我在这里做错了什么?有什么需要注意的吗?
我已经尝试了很多东西来获得多核的东西,但没有用。
更新 这给了我一些输出。 我添加了等待 USB 连接和初始化的时间。现在我从核心 2 那里得到了一些信息。
#include <stdio.h>
#include "pico/stdlib.h"
#include "pico/multicore.h"
// const uint led = PICO_DEFAULT_LED_PIN;
void core1_main()
{
printf("hellow world from second core");
printf("hellow world from second core");
printf("hellow world from second core");
}
int main()
{
stdio_init_all();
while (!stdio_usb_connected())
;
while (!stdio_usb_init())
;
multicore_launch_core1(core1_main);
printf("hellow wow \n");
uint32_t i = 0;
while (1)
{
printf("hellow nice %d\n", i++);
sleep_ms(1000);
}
}
这是我得到的输出。注意来自第二个核心的消息只通过一次。我很困惑,为什么?
同时改变
stdio_init_all()
的位置破坏了一些东西并且没有更多的输出。
我无法重现这个问题。我从你的代码的一个稍微修改的版本开始(我想要一个循环
core1_main
这样我就不会在连接到串行端口之前错过输出):
#include <stdio.h>
#include "pico/stdlib.h"
#include "pico/multicore.h"
void core1_main()
{
while (1) {
printf("hello world from second core\n");
sleep_ms(1000);
}
}
int main()
{
stdio_init_all();
multicore_launch_core1(core1_main);
printf("hello wow\n");
uint32_t i = 0;
while (1)
{
printf("hello nice %u\n", i++);
sleep_ms(1000);
}
}
我有以下
CMakeLists.txt
,遵循pico sdk文档:
cmake_minimum_required(VERSION 3.13)
# initialize the SDK based on PICO_SDK_PATH
# note: this must happen before project()
include(pico_sdk_import.cmake)
project(my_project)
# initialize the Raspberry Pi Pico SDK
pico_sdk_init()
add_executable(multicore_test
multicore_test.c
)
target_link_libraries(multicore_test pico_stdlib pico_multicore)
pico_enable_stdio_usb(multicore_test 1)
pico_enable_stdio_uart(multicore_test 0)
pico_add_extra_outputs(multicore_test)
如果我构建代码:
mkdir build
cd build
cmake ..
make
然后将生成的
multicore_test.uf2
安装到 Pico 上,当我连接到串行端口(/dev/ttyACM0
在我的系统上)时,我看到:
hello world from second core
hello nice 3
hello world from second core
hello nice 4
hello world from second core
hello nice 5
hello world from second core
hello nice 6
...
我遇到与原始帖子相同的问题:如果 stdio_init_all() 在核心 1 上运行,则两个核心都挂起并且连接的 PC(运行 Windows 10)报告“无法识别 USB 设备”。