Примеры двухъядерных скетчей Rp2040
Итак, у меня есть плата rp2040, и я не смог найти двухъядерный пример кодов. Самое близкое, что я смог найти, - это пример библиотеки планировщика, предоставленный мне IDE
/*
Несколько Миганий
Демонстрирует использование библиотеки планировщика для плат:
- Arduino Nano 33 BLE, или
- Arduino Portenta H7, или
- Подключение Arduino Nano RP2040
Требуется оборудование :
* Нет (светодиоды уже подключены к светодиоду RGB)
ВНИМАНИЕ: полярность светодиодов изменена (поэтому loop3 выключит светодиод, написав 1)
создано 8 октября 2012
автор: Кристиан Малье
Изменено
Скоттом Фитцджеральдом 19 октября 2012 г.
Этот пример кода находится в открытом доступе
http://www.arduino.cc/en/Tutorial/MultipleBlinks
*/
// Включите планировщик, так как мы хотим управлять несколькими задачами.
#include <Scheduler.h>
// При подключении Nano RP2040 светодиоды RGB подключаются к модулю Wi-Fi
// Пользовательские API одинаковы, но мы не можем преобразовать их в int, поэтому используйте определения
#if defined(ARDUINO_NANO_RP2040_CONNECT)
#include "WiFiNINA.h"
#define led1 LEDR
#define led2 LEDG
#define led3 LEDB
// На Nicla Sense ME светодиоды RGB подключаются через модуль I2C
// Пользовательские API одинаковы, но мы не можем преобразовать их в int, поэтому используйте определения
#elif defined(ARDUINO_NICLA)
#include "Nicla_System.h"
#define led1 LEDR
#define led2 LEDG
#define led3 LEDB
#else
int led1 = LEDR;
int led2 = LEDG;
int led3 = LEDB;
#endif
void setup() {
Serial.begin(9600);
// Установите 3 вывода в качестве ВЫХОДНЫХ
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
// Добавьте "loop2" и "loop3" в планирование.
// "цикл" всегда запускается по умолчанию.
Scheduler.startLoop(loop2);
Scheduler.startLoop(loop3);
}
// Задача № 1: мигает светодиод с задержкой в 1 секунду.
void loop() {
digitalWrite(led1, HIGH);
// ВАЖНО:
// Когда выполняется несколько задач, "задержка" передает управление
// другие задачи во время ожидания и гарантии их выполнения.
delay(1000);
digitalWrite(led1, LOW);
delay(1000);
}
// Задача № 2: мигает светодиод с задержкой 0,1 секунды.
void loop2() {
digitalWrite(led2, HIGH);
delay(100);
digitalWrite(led2, LOW);
delay(100);
}
// Задача № 3: прием команд с последовательного порта
// '0' выключает светодиод
// "1" включает светодиод
void loop3() {
if (Serial.available()) {
char c = Serial.read();
if (c == '0') {
digitalWrite(led3, LOW);
Serial.println("Led turned off!");
}
if (c == '1') {
digitalWrite(led3, HIGH);
Serial.println("Led turned on!");
}
}
// ВАЖНО:
// Мы должны регулярно вызывать "выход", чтобы пройти
// управление другими задачами.
yield();
}
но я не думаю, что он использует второе ядро rp2040. У кого-нибудь есть примеры кодов? потому что я действительно потерял, как это сделать
@DrakeJest, 👍1
Обсуждение1 ответ
Лучший ответ:
Примечание: Эта информация касается чистого ядра "Arduino", а не ядра "MBED". Ядро MBED мешает использовать SDK RP2040, поэтому установите чистый металлический сердечник отсюда.
По умолчанию второе ядро ничего не делает.
Но вы можете запускать на нем все, что захотите, напрямую. Нет необходимости в каких-либо библиотеках. Вы используете функцию multicore_launch_core1(функция)
для запуска функции на этом ядре. Вы могли бы сделать его похожим на Arduino, написав функцию-оболочку, такую как этот код:
void setup2() {
pinMode(1, OUTPUT);
}
void loop2() {
digitalWrite(1, HIGH);
delay(750);
digitalWrite(1, LOW);
delay(750);
}
void main2() {
setup2();
while (1) {
loop2();
}
}
void setup() {
multicore_launch_core1(main2);
pinMode(0, OUTPUT);
}
void loop() {
digitalWrite(0, HIGH);
delay(1000);
digitalWrite(0, LOW);
delay(1000);
}
Код выдает ошибку в arduino IDE. `sketch_nov05a:21:5: ошибка: "multicore_launch_core1" не был объявлен в этой области", @DrakeJest
@DrakeJest Уверен, что у вас выбрана правильная плата и установлено правильное ядро? Я использую эту функцию все время, без необходимости что-либо делать., @Majenko
Я дважды проверил, и да . Я использую " Платы Arduino Mbed OS RP2040 - Raspberry pi pico`, @DrakeJest
@DrakeJest Ах, похоже, вы используете не ядро Raspberry Pi, а ядро MBED. Я никогда этим не пользовался. Придерживайтесь правильного Pi., @Majenko
@DrakeJest Это тот, который я использую: https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json, @Majenko
Как называется ядро pi? Единственный, кто появляется внутри менеджера платы, - это тот, он даже говорит, что он сделан arduino, так что я думаю, что это официальный, @DrakeJest
Нужно его скомпилировать прямо сейчас ! И ничего себе, в эту систему включено так много плат, которые могут даже менять основные часы и прочее. Что тогда с этой ОС Arduino Mbed?, @DrakeJest
@DrakeJest Проблема с MBED в том, что он запускает MBED. Это операционная система (например, FreeRTOS), которая находится между вашим кодом и оборудованием., @Majenko
О, это облом, поэтому я теряю доступ к библиотеке планировщика. существуют ли аналогичные альтернативы? Я думаю, что тогда мне придется кодировать свой проект самым сложным образом, @DrakeJest
Библиотека планировщика-это костыль. Тебе не нужны костыли., @Majenko
Вы правы, если мне нужна ОС, я мог бы с таким же успехом выбрать полноценную raspberry pi 4/zero. Спасибо вам за вашу помощь, Майенко, я приступаю к началу своего проекта. Хорошего дня, @DrakeJest
- Неустранимая ошибка Adafruit_SSD1306.cpp: pgmspace.h: нет такого файла или каталога с использованием SSD1306 на Arduino Nano RP2040
- Ардуино не может подключиться к порту (arduino nano rp2040)
- Rp2040: Как сообщить второму ядру от первого ядра в качестве индикатора, чтобы что-то сделать
- Примерный скетч RP2040 для двухъядерной очереди
- Сигнализация RP2040 RTC или аналогичная функция
- Датчик температуры DS18B20 дает сбой MbedOS на Arduino Nano RP2040?
- Для чего предполагается использовать SerialNina и SerialHCI? (Подключение Arduino Nano RP2040)
- Вход на Nano RP2040 не float
Просто запустите новый "main ()" с помощью " multicore_launch_core1()`., @Majenko
@Majenko Итак, теперь у меня есть 3 функции: "настройка ()", "цикл ()" и " главная ()",? куда мне поместить
multicore_launch_core1()
, @DrakeJestSDK RP2040 - ваш друг: https://raspberrypi.github.io/pico-sdk-doxygen/, @Majenko
И: https://raspberrypi.github.io/pico-sdk-doxygen/group__pico__multicore.html#multicore_example, @Majenko
@Majenko оооо... Вы можете использовать все функции sdk в arduino IDE?? Я не знал, что ты можешь это сделать., @DrakeJest
Ага. Ядро Arduino - это просто оболочка вокруг SDK., @Majenko