Моя проблема:
Я хочу передать параметры задаче FreeRTOS в классе. Я использую плату ESP32 с Arduino IDE. Я получаю 0,00 на выходе при попытке этого. Вот пример кода:
класс testClass { публика: testClass(/*параметры*/){ //Сделать что-нибудь... } частный: TaskHandle_t testTask; static void testTaskFunction (void * pvParameters) { float *number = (float *) pvParameters; Строка stringifiedNumber; stringifiedNumber = String(*number); Serial.println(stringifiedNumber); // Выход 2 Serial.println(*номер); // Вывод 3 vTaskDelete (NULL); // Должен быть там, иначе будет ошибка, потому что функция завершена, но задача все еще существует. Здесь задача удаляется и функция прерывается. } публика: void testFunction (число с плавающей запятой) { Serial.println(номер); // Выход 1 xTaskCreatePinnedToCore( testTaskFunction, // Функция реализации задачи "testTask", // Имя задачи 10000, // Размер стека прописью (void *) &number, // Входной параметр задачи 2, // Приоритет задачи &testTask, // Дескриптор задачи. 0); // Ядро, где должна выполняться задача } }; testClass testInstance1; testClass testInstance2; недействительная настройка() { // поместите сюда свой код установки для однократного запуска: Serial.begin(115200); } недействительный цикл() { // поместите сюда свой основной код для многократного запуска: for (float i = -20; i < 30; i += 0,1) { testInstance1.testFunction(i); задержка(1000); testInstance2.testFunction(я + 21); задержка(1000); } } Вывод (без комментариев):
ets 8 июня 2016 г. 00:22:57 первый: 0x1 (POWERON_RESET), загрузка: 0x13 (SPI_FAST_FLASH_BOOT) конфигурация: 0, SPIWP:0xee clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 режим: DIO, часы дел: 1 нагрузка: 0x3fff0030, длина: 1416 нагрузка: 0x40078000, длина: 14804 нагрузка: 0x40080400, длина: 4 нагрузка: 0x40080404, длина: 3356 запись 0x4008059c -20.00 // Выход 1 (testInstance1) 0,00 // Выход 2 (testInstance1) 0,00 // Выход 3 (testInstance1) 1.00 // Выход 1 (testInstance2) 0,00 // Выход 2 (testInstance2) 0,00 // Выход 3 (testInstance2) -19,90 // ... 0,00 0,00 1.10 0,00 0,00 -19,80 0,00 0,00 1.20 0,00 0,00 -19,70 0,00 0,00 1.30 0,00 0,00 -19,60 0,00 0,00 1.40 0,00 0,00 -19.50 0,00 0,00 1,50 0,00 0,00 -19.40 0,00 0,00 1,60 0,00 0,00 -19.30 0,00 0,00 1,70 0,00 0,00 Что я пробовал: Я удалил другой экземпляр класса и вуаля, все работает. Но для меня это невозможно. Я также пытался изменить продолжительность задержки, но это не сработало.
Можете ли вы сказать, что я делаю не так? Пожалуйста, помогите мне.
Почему я получаю неверный параметр из задачи FreeRTOS в классе? ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1697898666
Anonymous
Моя проблема:
Я хочу передать параметры задаче FreeRTOS в классе. Я использую плату ESP32 с Arduino IDE. Я получаю 0,00 на выходе при попытке этого. Вот пример кода:
класс testClass { публика: testClass(/*параметры*/){ //Сделать что-нибудь... } частный: TaskHandle_t testTask; static void testTaskFunction (void * pvParameters) { float *number = (float *) pvParameters; Строка stringifiedNumber; stringifiedNumber = String(*number); Serial.println(stringifiedNumber); // Выход 2 Serial.println(*номер); // Вывод 3 vTaskDelete (NULL); // Должен быть там, иначе будет ошибка, потому что функция завершена, но задача все еще существует. Здесь задача удаляется и функция прерывается. } публика: void testFunction (число с плавающей запятой) { Serial.println(номер); // Выход 1 xTaskCreatePinnedToCore( testTaskFunction, // Функция реализации задачи "testTask", // Имя задачи 10000, // Размер стека прописью (void *) &number, // Входной параметр задачи 2, // Приоритет задачи &testTask, // Дескриптор задачи. 0); // Ядро, где должна выполняться задача } }; testClass testInstance1; testClass testInstance2; недействительная настройка() { // поместите сюда свой код установки для однократного запуска: Serial.begin(115200); } недействительный цикл() { // поместите сюда свой основной код для многократного запуска: for (float i = -20; i < 30; i += 0,1) { testInstance1.testFunction(i); задержка(1000); testInstance2.testFunction(я + 21); задержка(1000); } } Вывод (без комментариев):
ets 8 июня 2016 г. 00:22:57 первый: 0x1 (POWERON_RESET), загрузка: 0x13 (SPI_FAST_FLASH_BOOT) конфигурация: 0, SPIWP:0xee clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 режим: DIO, часы дел: 1 нагрузка: 0x3fff0030, длина: 1416 нагрузка: 0x40078000, длина: 14804 нагрузка: 0x40080400, длина: 4 нагрузка: 0x40080404, длина: 3356 запись 0x4008059c -20.00 // Выход 1 (testInstance1) 0,00 // Выход 2 (testInstance1) 0,00 // Выход 3 (testInstance1) 1.00 // Выход 1 (testInstance2) 0,00 // Выход 2 (testInstance2) 0,00 // Выход 3 (testInstance2) -19,90 // ... 0,00 0,00 1.10 0,00 0,00 -19,80 0,00 0,00 1.20 0,00 0,00 -19,70 0,00 0,00 1.30 0,00 0,00 -19,60 0,00 0,00 1.40 0,00 0,00 -19.50 0,00 0,00 1,50 0,00 0,00 -19.40 0,00 0,00 1,60 0,00 0,00 -19.30 0,00 0,00 1,70 0,00 0,00 Что я пробовал: Я удалил другой экземпляр класса и вуаля, все работает. Но для меня это невозможно. Я также пытался изменить продолжительность задержки, но это не сработало.
Можете ли вы сказать, что я делаю не так? Пожалуйста, помогите мне.
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия