Переменные с плавающей точкой, определенные с помощью float
, похоже, не работают в µC-OS-III.Простой код, подобный следующему:
float f1;
f1 = 3.14f;
printf("\nFLOAT:%f", f1);
выдаст такой результат:
FLOAT:2681561605....
Когда я проверяю этот кусок кода в main () перединициализация µC-OS-III, она работает просто отлично.Однако после того, как начинается многозадачность, она не работает.Это не работает ни в задачах, ни в задачах запуска.
Я искал в Интернете похожую проблему, но ничего не смог найти.Однако есть статья, в которой говорится: «Компилятор IAR C / C ++ для ARM требует, чтобы указатель стека был выровнен на 8 байтов ...»
https://www.iar.com/support/tech-notes/general/problems-with-printf-floating-point-f-on-arm/
Я обнаружил стекив 8-байтовых выровненных местах.Тогда код работал в задаче, но ОС вылетала сразу после printf.
Моя цепочка инструментов компилятора - IAR EWARM версии 8.32.1, и я использую µC-OS-III V3.07.03 с STM32F103.
Я могу пропустить некоторые настройки ОС или компилятора.Я не знаю!У меня была такая же проблема несколько лет назад с µC-OS-II, но в конце концов я решил использовать математику с фиксированной точкой вместо плавающих.
Может ли кто-нибудь пролить свет на это ...