реклама на сайте
подробности

 
 
> printf(), putchar(), fopen(), fclose(), fprintf() и т.д., суть реализации все этого для embedded?
Student Pupkin
сообщение Aug 8 2009, 21:59
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 23-05-08
Пользователь №: 37 760



Запутался в конец ))).
1) Функции ввода-вывода, работающие со стандартными потоками ввода-вывода( printf, putchar и т.д.) - как они используются для embedded-приложений? Насколько понимаю, поток ввода, например, - это просто буфер, область памяти, обслуживаемая как FIFO? И в случае "Hello, World!" для Windows стандартные потоки ввода-вывода - это буферы, созданные операционной системой, а их размеры и указатели передаются приложению (моему "Helo, World!"). Значит в случае программы для микроконтроллера можно сделать свой поток - выделить область в ОЗУ (буфер), сделать указатели записи-чтения, определить размер буфера и тогда, скажем printf будет писать данные в этот буфер? И потом из этого буфера, скажем, передавать в UART? Я правильно понимаю? Или нет? Как все это правильно делается? У Т.Мартина в книге есть мелкий пример по использованию STDIO, где пишется своя функция putchar. После чего уже можно юзать printf(). Но у меня это вроде как сомнения вызывает... Без таких "доработок" нельзя?
2) Функции, работающие с файловыми потоками... Во-первых, что есть fopen для embedded? Во-вторых, структура FILE? В-третьих, функциями типа frintf, fwrite можно пользоваться для работы с собственными буферами? Если да, то как?
Вообщем, как правильно использовать библиотеку STDIO для embedded-приложений?
Собственно вот ))). Немного путано получилось... Если кто найдет время мне это все объяснить - буду очень признателен!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AHTOXA
сообщение Aug 8 2009, 22:38
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Student Pupkin @ Aug 9 2009, 03:59) *
Значит в случае программы для микроконтроллера можно сделать свой поток - выделить область в ОЗУ (буфер), сделать указатели записи-чтения, определить размер буфера и тогда, скажем printf будет писать данные в этот буфер?


Если в буфер, то ничего не надо определять, надо просто использовать sprintf() smile.gif Оно как раз для этого.

Цитата
Вообщем, как правильно использовать библиотеку STDIO для embedded-приложений?


Если речь о gcc, то надо написать заглушки (stubs).
Вот научно-популярное объяснение, что это такое,
вот документация.
А в аттаче Прикрепленный файл  stf_syscalls_minimal.rar ( 1.34 килобайт ) Кол-во скачиваний: 211
- пример заглушек из какого-то примера от FreeRtos.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Student Pupkin
сообщение Aug 8 2009, 23:53
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 23-05-08
Пользователь №: 37 760



Цитата(AHTOXA @ Aug 9 2009, 02:38) *
Если в буфер, то ничего не надо определять, надо просто использовать sprintf() smile.gif Оно как раз для этого.

Угумс )))). Да, есть такие sprintf(), sscanf. Про них понятно, суть их так сказать smile.gif. В них явно указывается указатель на строку, в которую пишем (вводим) или из которой читаем (выводим).
Цитата(AHTOXA @ Aug 9 2009, 02:38) *
Если речь о gcc, то надо написать заглушки (stubs).

А вот тут я никак )))). Получается, что часть функций библиотеки stdio нормально использовать нельзя? Я имею ввиду обычное программу для микроконтролера, без использования оси (это называется StandAlone- приложение вроде бы?). А зачем же они тогда реализованы? И как они реализованы? Я в смысле, что в соотвествующей lib-е они есть, раз в хэдере прописаны? Что для них есть stdin, stdout? Как функция fopen работает? Не понимаю... Есть конечно сомнительная мысль, что эта часть функций реализована исключительно как ввод-вывод на консоль ИАРа под отладчиком (да кстати smile.gif, я тут с иаром вожусь, пытаюсь в хэдерах что-то на эту тему откопать... но пока не очень), возможно и работа с файлами (fopen, fwrite, fread и т.д.) тоже предполагается по житагу через ИАР (ну, по крайней мере знаю от товарищей, которые с TMS320 под CodeComposerStudio, что у них есть такое - по житагу из файла на ПЭВМ в ОЗУ процессора загрузить).
А в целом картину я пока так и не понял smile.gif.
help.gif
Go to the top of the page
 
+Quote Post
ReAl
сообщение Aug 9 2009, 00:38
Сообщение #4


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(Student Pupkin @ Aug 9 2009, 02:53) *
Получается, что часть функций библиотеки stdio нормально использовать нельзя? Я имею ввиду обычное программу для микроконтролера, без использования оси (это называется StandAlone- приложение вроде бы?). А зачем же они тогда реализованы? И как они реализованы?
А как реализуете, так и будет :-)

Цитата(Student Pupkin @ Aug 9 2009, 02:53) *
Есть конечно сомнительная мысль, что эта часть функций реализована исключительно как ввод-вывод на консоль ИАРа под отладчиком (да кстати smile.gif
Как уже говорилось, в простейшем случае переопределяется единственная функция putchar() и тогда printf лупит через неё туда, куда захотел программист.
У avr-gcc функции fprintf/vfprintf принимают файловый объект, в котором записаны указатели на соответствующие этим объектам функции вывода и ввода символа, можно определить несколько совершенно разнородных "псевдофайлов" и работать с ними. Для сокращения кода имеются макросы, инициализирующие глобальные файловые переменные во время компиляции.
Как-то так:
http://electronix.ru/forum/index.php?showt...mp;#entry596833
http://electronix.ru/forum/index.php?showt...mp;#entry463352

Если очень хочется, можно написать свои fopen под свою систему, заполняющие структуру FILE, как в данных ранее линках в зависимости от переданного аргумента. Ну или как это сделано в NutOS (то, что там OS - несколько ортогонально к применённой системе "файлов", это и в "безосевом" приложении можно было бы сделать).


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 13:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.01391 секунд с 7
ELECTRONIX ©2004-2016