Ikki vazifaga ega bo'lgan freeRTOS dan foydalanilganda kutilmagan xatti-harakatlar

Men Arduino Uno bilan MPU9250-breakout kartasidan foydalanaman Foydalanadigan kutubxona bu yerdan . Quyida mening kodim.

#include 

#include "mpu9250.h"

MPU9250 IMU(Wire,0x68);
int status;

void task_1(void *pvParameters)
{
  (void) pvParameters;

  for (;;)
  {
  }
}

void task_2(void *pvParameters)
{
  (void) pvParameters;

  for (;;)
  {
  }
}

void setup() {
  Serial.begin(115200);
  while(!Serial) {}

  status = IMU.begin();
  if (status < 0) {
    Serial.println("IMU initialization unsuccessful");
    Serial.println("Check IMU wiring or try cycling power");
    Serial.print("Status: ");
    Serial.println(status);
    while(1) {}
  }

  xTaskCreate(
  task_2,
  (const portCHAR *)"task2",//A name just for humans
  128,//Stack size
  NULL,
  1,//priority
  NULL);

  xTaskCreate(
  task_1,
  (const portCHAR *)"task1",//A name just for humans
  128,//Stack size
  NULL,
  1,//priority
  NULL);

}

void loop()
{

}

Muammo shundaki, belgilangan ikkita vazifa mavjud bo'lsa, dastur avtomatik ravishda qayta ishga tushiriladi. Lekin task_1 ga izoh berganimda, dastur yaxshi ishlaydi. xTaskCreate natijasi qiymati to'g'ri.

O'ylaymanki, bu muammoni stack yoki biriktirma hajmi juda kichik bo'lishi mumkin, lekin men suyakka va yig'im kattaligini oshirdim va hali ham ishlamayapti.

Muammoni qayerdan qaerdan kelishi mumkinligini kimdir aytib berishi mumkinmi?

2
Birgalikda yoki oldindan rejalashtiruvchi rejalashtiruvchidan foydalanasizmi? Etarli xotira yo'qmi? 4bytes bo'lishi mumkin bo'lgan 512B ni samarali tarzda taqsimlash uchun StackType_t 128 suyakka Men sizning rejangizning qaerdaligini ham ko'rmayapman.
qo'shib qo'ydi muallif tilz0R, manba
Birgalikda yoki oldindan rejalashtiruvchi rejalashtiruvchidan foydalanasizmi? Etarli xotira yo'qmi? 4bytes bo'lishi mumkin bo'lgan 512B ni samarali tarzda taqsimlash uchun StackType_t 128 suyakka Men sizning rejangizning qaerdaligini ham ko'rmayapman.
qo'shib qo'ydi muallif tilz0R, manba
Qanday bo'lmasin, arduino freeRTOS misolida, bunday narsalar deyilmadi. Men buni misolimda chaqirishim kerakmi?
qo'shib qo'ydi muallif Lion Lai, manba
Qanday bo'lmasin, arduino freeRTOS misolida, bunday narsalar deyilmadi. Men buni misolimda chaqirishim kerakmi?
qo'shib qo'ydi muallif Lion Lai, manba

7 javoblar

Vazifalarini yaratganingizdan so'ng, vaqtni boshlashingiz kerak.

setup funksiyasidan chiqishdan va vazifalaringizni yaratganingizdan oldin vTaskStartScheduler() ga qo'ng'iroq qiling.

https://www.freertos.org/a00132.html

Faqat ma'lumot uchun Arduino-UNO (ATMega-328P bilan) juda cheklangan RAMga ega va ba'zi vazifalar yaratilmasligi mumkin. xTaskCreate funksiyasining qaytish qiymatini tekshiring.

0
qo'shib qo'ydi
Tugatdi. Lekin hali ham ishlamaydi. Men bu masalani kutubxona deb hisoblayman, chunki bir marta MPU9250 IMU (Wire, 0x68); ni odatiy ishlating.
qo'shib qo'ydi muallif Lion Lai, manba

Vazifalarini yaratganingizdan so'ng, vaqtni boshlashingiz kerak.

setup funksiyasidan chiqishdan va vazifalaringizni yaratganingizdan oldin vTaskStartScheduler() ga qo'ng'iroq qiling.

https://www.freertos.org/a00132.html

Faqat ma'lumot uchun Arduino-UNO (ATMega-328P bilan) juda cheklangan RAMga ega va ba'zi vazifalar yaratilmasligi mumkin. xTaskCreate funksiyasining qaytish qiymatini tekshiring.

0
qo'shib qo'ydi
Tugatdi. Lekin hali ham ishlamaydi. Men bu masalani kutubxona deb hisoblayman, chunki bir marta MPU9250 IMU (Wire, 0x68); ni odatiy ishlating.
qo'shib qo'ydi muallif Lion Lai, manba

Vazifalarini yaratganingizdan so'ng, vaqtni boshlashingiz kerak.

setup funksiyasidan chiqishdan va vazifalaringizni yaratganingizdan oldin vTaskStartScheduler() ga qo'ng'iroq qiling.

https://www.freertos.org/a00132.html

Faqat ma'lumot uchun Arduino-UNO (ATMega-328P bilan) juda cheklangan RAMga ega va ba'zi vazifalar yaratilmasligi mumkin. xTaskCreate funksiyasining qaytish qiymatini tekshiring.

0
qo'shib qo'ydi
Tugatdi. Lekin hali ham ishlamaydi. Men bu masalani kutubxona deb hisoblayman, chunki bir marta MPU9250 IMU (Wire, 0x68); ni odatiy ishlating.
qo'shib qo'ydi muallif Lion Lai, manba

Men bu muammoga tushganimda, odatda, chiqib ketish vektorlari tegishli ishlovchilarga ishora qilmagan. Shunday qilib, RTOS kontekstni almashtirishni talab qilganda, masalan, la-la erga sakrab chiqdi. Siz bu vazifalarni bajarish uni kutubxona chaqiruviga ishga tushirishga imkon beradi deb aytishingiz bilan bir qatorda, xuddi shu tarzda bajarilmasa ham ishlovchilaringizning hech biri to'g'ri o'rnatilmasligi mumkin.

The FreeRTOS website has an FAQ about getting new projects to run that I would suggest reading through to help troubleshoot this kind of problem: https://www.freertos.org/FAQHelp.html#faq

You might also look at some of the other AVR examples included with FreeRTOS to see how they have interrupts setup: https://www.freertos.org/a00090.html#ATMEL

0
qo'shib qo'ydi

Men bu muammoga tushganimda, odatda, chiqib ketish vektorlari tegishli ishlovchilarga ishora qilmagan. Shunday qilib, RTOS kontekstni almashtirishni talab qilganda, masalan, la-la erga sakrab chiqdi. Siz bu vazifalarni bajarish uni kutubxona chaqiruviga ishga tushirishga imkon beradi deb aytishingiz bilan bir qatorda, xuddi shu tarzda bajarilmasa ham ishlovchilaringizning hech biri to'g'ri o'rnatilmasligi mumkin.

The FreeRTOS website has an FAQ about getting new projects to run that I would suggest reading through to help troubleshoot this kind of problem: https://www.freertos.org/FAQHelp.html#faq

You might also look at some of the other AVR examples included with FreeRTOS to see how they have interrupts setup: https://www.freertos.org/a00090.html#ATMEL

0
qo'shib qo'ydi

O'rnatishingizning oxirida() rejani boshlashingiz kerak:

// Endi alohida vazifalarni rejalashtirishni nazorat qilishni o'z zimmasiga olgan vazifa rejalashtiruvchisi//avtomatik ravishda ishga tushiriladi.

vTaskStartScheduler ();

Bu men va sizning ishingiz bo'lgan loyihamning orasidagi farqlarning barchasi.

0
qo'shib qo'ydi

O'rnatishingizning oxirida() rejani boshlashingiz kerak:

// Endi alohida vazifalarni rejalashtirishni nazorat qilishni o'z zimmasiga olgan vazifa rejalashtiruvchisi//avtomatik ravishda ishga tushiriladi.

vTaskStartScheduler ();

Bu men va sizning ishingiz bo'lgan loyihamning orasidagi farqlarning barchasi.

0
qo'shib qo'ydi