Помогите разобраться с printf, a точнее с printf_P. На колько я понял из документации разница между ними только в области хранения строки формата вывода: в первом случае это DATA MEMORY, во втором CODE.
Пример простейшей программки в IARAVR5.20
Код
#include <pgmspace.h>
__flash char const __flash * test[]={
"Hellow World!",
"With fucking printf_P"
};
void main(void)
{
printf_P("%s %s",test[0],test[1]);
for(;;);
}
__flash char const __flash * test[]={
"Hellow World!",
"With fucking printf_P"
};
void main(void)
{
printf_P("%s %s",test[0],test[1]);
for(;;);
}
компилирую с опцией --string_literals_in_flash.
проц мега 164, Normal Dlib, изменение prinf_formatter не могают.
в результате выводится только пробел.
при копании в исходниках библиотек обнаружил, что после того как распарсится первых два символа строки формата вывода(%s), правильно определяется адресс первого символа строки "Hellow World!"(в CODE MEMORY), но на вывод идёт то, что по тому же адресу в DATA памяти.
Помогите пожалуйста кто сталкивался, как красиво выводить строки лежащие во флеше, в моём случае это уарт, про переопределение __write знаю, и к этой проблеме оно отношения не имеет, помоему.