Обязательно! ![]()
PS: Если имелась ввиду shared memory, то “распределенная” - плохой перевод
да, криво выразился.
никто не спорит, что просто.
Я ж про то, что во взрослых ОС за этими всеми делами следит ядро, а в PICO чтоб сделать похожиме механизмы необходимо это все как то изобретать и/или делать какую то прокладку между железом и программой..
Пробежался глазами по stdatomic.h - это то, что нужно. На ESP32 поддерживается,наверняка и на пике поддерживается.Это стандарт C11.
#include <stdatomic.h>
_Atomic int cnt = 0;
Можно из разных потоков менять.
КАК!?!!?!как заставить работать st7735 с pi pico!?!!?! Просто белый экран и всё! С год назад подключался без проблем. Уже все форумы перерыл, мертвый и все тут. подключал по вашему примеру, результат нулевой. Скетч на тест из примеров адафрут грузиться но экран все ещё белый. Подключал так же как вы указывали выше. Памагити.
ну ты же знаешь что надо, скетч, схема подключения
@Ms69
Вот даже отвечать не хочется после твоего инфантильного захода.
Какой дисплей подключал? По какому протоколу? На какие пины? С какой библиотекой? Код, схема?
Народ, а мануал по Pico C++ SDK тоже закрыли от нас или я не по тому адресу лезу?
See Raspberry Pi Pico-Series C/C++ SDK to learn more about programming using the SDK, to explore more advanced features, and for complete PDF-based API documentation.
Вроде еще на той неделе заходил свободно.
Спасибо огромное
Сам разобрался =] теперь помню где то читал что rp2040 два ядра, и вот хочу чтоб экран обрабатывался на одном, а на втором модуль nrf24. Помню писали что работает через два лупа как то, ткните носом где почитать с примером кода? =]
Так в итоге что? - “сам разобрался” или “ткните носом”?
Ты там через слово читаешь? Новая проблема же… как задействовать два ядра
Ты правда думаешь, что вся конфа с замиранием следит за твоим творчеством?
Твой прошлый пост был 2 октября - 2 месяца назад! - я что, помнить должен?
Я тут второй раз) пока чёт не особо понял как тут ветка работает) короче подскажите как на rp2040 разделить через луп обработку экрана и радио модуля по ядрам?
// Core 0 (Main core)
void setup() {
Serial.begin(115200);
Serial.println("Core 0 setup");
}
void loop() {
Serial.println("Core 0 running");
delay(1000);
}
// Core 1 (Second core)
void setup1() {
Serial.println("Core 1 setup");
}
void loop1() {
Serial.println("Core 1 running");
delay(1500);
}
От души бро, красавчи)
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"
#define TFT_MOSI 3
#define TFT_SCLK 2
#define TFT_CS 5
#define TFT_DC 4
#define TFT_RST 6
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
RF24 radio(20, 17); //Arduino UNO
//
// Channel info
//
const uint8_t num_channels = 128;
uint8_t values[num_channels];
float p = 3.1415926;
void setup(void) {
Serial.begin(9600);
Serial.print(F("Hello! ST77xx TFT Test"));
// Use this initializer if using a 1.8" TFT screen:
tft.initR(INITR_BLACKTAB); // Init ST7735S chip, black tab
Serial.println(F("Initialized"));
uint16_t time = millis();
tft.fillScreen(ST77XX_BLACK);
time = millis() - time;
Serial.println(time, DEC);
delay(500);
// large block of text
tft.fillScreen(ST77XX_BLACK);
testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", ST77XX_WHITE);
delay(1000);
// tft print function!
tftPrintTest();
delay(4000);
// a single pixel
tft.drawPixel(tft.width()/2, tft.height()/2, ST77XX_GREEN);
delay(500);
// line draw test
testlines(ST77XX_YELLOW);
delay(500);
// optimized lines
testfastlines(ST77XX_RED, ST77XX_BLUE);
delay(500);
testdrawrects(ST77XX_GREEN);
delay(500);
testfillrects(ST77XX_YELLOW, ST77XX_MAGENTA);
delay(500);
tft.fillScreen(ST77XX_BLACK);
testfillcircles(10, ST77XX_BLUE);
testdrawcircles(10, ST77XX_WHITE);
delay(500);
testroundrects();
delay(500);
testtriangles();
delay(500);
mediabuttons();
delay(500);
Serial.println("done");
delay(1000);
}
void loop() {
tft.invertDisplay(true);
delay(500);
tft.invertDisplay(false);
delay(500);
}
void testlines(uint16_t color) {
tft.fillScreen(ST77XX_BLACK);
for (int16_t x=0; x < tft.width(); x+=6) {
tft.drawLine(0, 0, x, tft.height()-1, color);
delay(0);
}
for (int16_t y=0; y < tft.height(); y+=6) {
tft.drawLine(0, 0, tft.width()-1, y, color);
delay(0);
}
tft.fillScreen(ST77XX_BLACK);
for (int16_t x=0; x < tft.width(); x+=6) {
tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color);
delay(0);
}
for (int16_t y=0; y < tft.height(); y+=6) {
tft.drawLine(tft.width()-1, 0, 0, y, color);
delay(0);
}
tft.fillScreen(ST77XX_BLACK);
for (int16_t x=0; x < tft.width(); x+=6) {
tft.drawLine(0, tft.height()-1, x, 0, color);
delay(0);
}
for (int16_t y=0; y < tft.height(); y+=6) {
tft.drawLine(0, tft.height()-1, tft.width()-1, y, color);
delay(0);
}
tft.fillScreen(ST77XX_BLACK);
for (int16_t x=0; x < tft.width(); x+=6) {
tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color);
delay(0);
}
for (int16_t y=0; y < tft.height(); y+=6) {
tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color);
delay(0);
}
}
void testdrawtext(char *text, uint16_t color) {
tft.setCursor(0, 0);
tft.setTextColor(color);
tft.setTextWrap(true);
tft.print(text);
delay(0);
}
void testfastlines(uint16_t color1, uint16_t color2) {
tft.fillScreen(ST77XX_BLACK);
for (int16_t y=0; y < tft.height(); y+=5) {
tft.drawFastHLine(0, y, tft.width(), color1);
}
for (int16_t x=0; x < tft.width(); x+=5) {
tft.drawFastVLine(x, 0, tft.height(), color2);
delay(0);
}
}
void testdrawrects(uint16_t color) {
tft.fillScreen(ST77XX_BLACK);
for (int16_t x=0; x < tft.width(); x+=6) {
tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color);
delay(0);
}
}
void testfillrects(uint16_t color1, uint16_t color2) {
tft.fillScreen(ST77XX_BLACK);
for (int16_t x=tft.width()-1; x > 6; x-=6) {
tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1);
tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2);
delay(0);
}
}
void testfillcircles(uint8_t radius, uint16_t color) {
for (int16_t x=radius; x < tft.width(); x+=radius*2) {
for (int16_t y=radius; y < tft.height(); y+=radius*2) {
tft.fillCircle(x, y, radius, color);
delay(0);
}
}
}
void testdrawcircles(uint8_t radius, uint16_t color) {
for (int16_t x=0; x < tft.width()+radius; x+=radius*2) {
for (int16_t y=0; y < tft.height()+radius; y+=radius*2) {
tft.drawCircle(x, y, radius, color);
delay(0);
}
}
}
void testtriangles() {
tft.fillScreen(ST77XX_BLACK);
uint16_t color = 0xF800;
int t;
int w = tft.width()/2;
int x = tft.height()-1;
int y = 0;
int z = tft.width();
for(t = 0 ; t <= 15; t++) {
tft.drawTriangle(w, y, y, x, z, x, color);
x-=4;
y+=4;
z-=4;
color+=100;
delay(0);
}
}
void testroundrects() {
tft.fillScreen(ST77XX_BLACK);
uint16_t color = 100;
int i;
int t;
for(t = 0 ; t <= 4; t+=1) {
int x = 0;
int y = 0;
int w = tft.width()-2;
int h = tft.height()-2;
for(i = 0 ; i <= 16; i+=1) {
tft.drawRoundRect(x, y, w, h, 5, color);
x+=2;
y+=3;
w-=4;
h-=6;
color+=1100;
}
color+=100;
delay(0);
}
}
void tftPrintTest() {
tft.setTextWrap(false);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 30);
tft.setTextColor(ST77XX_RED);
tft.setTextSize(1);
tft.println("Hello World!");
tft.setTextColor(ST77XX_YELLOW);
tft.setTextSize(2);
tft.println("Hello World!");
tft.setTextColor(ST77XX_GREEN);
tft.setTextSize(3);
tft.println("Hello World!");
tft.setTextColor(ST77XX_BLUE);
tft.setTextSize(4);
tft.print(1234.567);
delay(1500);
tft.setCursor(0, 0);
tft.fillScreen(ST77XX_BLACK);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(0);
tft.println("Hello World!");
tft.setTextSize(1);
tft.setTextColor(ST77XX_GREEN);
tft.print(p, 6);
tft.println(" Want pi?");
tft.println(" ");
tft.print(8675309, HEX); // print 8,675,309 out in HEX!
tft.println(" Print HEX!");
tft.println(" ");
tft.setTextColor(ST77XX_WHITE);
tft.println("Sketch has been");
tft.println("running for: ");
tft.setTextColor(ST77XX_MAGENTA);
tft.print(millis() / 1000);
tft.setTextColor(ST77XX_WHITE);
tft.print(" seconds.");
delay(0);
}
void mediabuttons() {
// play
tft.fillScreen(ST77XX_BLACK);
tft.fillRoundRect(25, 10, 78, 60, 8, ST77XX_WHITE);
tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_RED);
delay(500);
// pause
tft.fillRoundRect(25, 90, 78, 60, 8, ST77XX_WHITE);
tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_GREEN);
tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_GREEN);
delay(500);
// play color
tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_BLUE);
delay(50);
// pause color
tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_RED);
tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_RED);
// play color
tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_GREEN);delay(0);
}
void setup1() {
Serial.begin(9600);
Serial.println("Scanner Air On");
printf_begin();
radio.begin();
radio.setAutoAck(false);
// Get into standby mode
radio.startListening();
radio.printDetails();
delay(1000);
// Print out header, high then low digit
int i = 0;
while ( i < num_channels )
{
printf("%x", i >> 4);
++i;
}
printf("\n\r");
i = 0;
while ( i < num_channels )
{
printf("%x", i & 0xf);
++i;
}
printf("\n\r");
delay(0);
}
//
// Loop
//
const int num_reps = 100;
void loop1() {
memset(values, 0, sizeof(values));
// Scan all channels num_reps times
int rep_counter = num_reps;
while (rep_counter--)
{
int i = num_channels;
while (i--)
{
// Select this channel
radio.setChannel(i);
// Listen for a little
radio.startListening();
delayMicroseconds(512);
radio.stopListening();
// Did we get a carrier?
if ( radio.testCarrier() )
++values[i];
delay(0);
}
}
// Print out channel measurements, clamped to a single hex digit
int i = 0;
while ( i < num_channels )
{
printf("%x", min(0xf, values[i] & 0xf));
++i;delay(0);
}
printf("\n\r");delay(0);
}
Короче перерыл че мог, поставил ядро это от Эрлиха, не работает эта хрень с двумя ядрами только с serialprint)) выполняется только первый сетап. Второй даже не начинается. Хотя возможно дело в SPI и SPI1, но примеры только на питоне находил
и там вроде как возможно разделить SPI по ядрам. хотя оба скетча по отдельности заводятся при том на разных пинах SPI0, объединяя пин 3 (MISO), или просто перетыкая с 17 на 3 - nrf24 не пашет.
хотя если я все правильно понял по распиновке, все висит на SPI0 >.< короче тыкните где посмотреть как там SPI0 SPI1 юзать? =)
А на йух их два то надо ???

