Отговори на тема  [ 6 мнения ] 
GCC NewLib 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение GCC NewLib
някой играл ли си е на "ниско" ниво с newlib,
по специално - да се превърже към съществуваща LIB / stdio - файлова система, конзола(уарт), драйвери...

проблема е че нямам истински файлови дескриптори ( FD ), плюса е че имам thread-safe API към кернела
начи базата stdio е fopen, fclose, fread, fwrite, fseek, и с няколко подскока сочат syscall - open, close, read, write, seek,

първите манипулират FILE, преминават през file->cookie и стигат до syscall FD, да ама аз нямам FD индекси... индексирах ги към -1 демек stream
"докопах" се до __swrite_r __sread_r ... които се занимават с куките и са чудя как да процедирам най-добре (cookie съдържа повече инфо)
одеве ме споходи музата да сложа в куката "обект-struct" в началото, който сочи API-то с неговите опен, клосе по подобие на FILE структурата

начи като подмених fopen, fclose, fread, fwrite, fseek с мои тръгна 80% "добре", включително printf, fprintf екстри ... та реших да "оптимизирам"

демек опитвам се да транслирам ThreadX API към stdio да стане по по най user-friendly
същото става и с FreeRtos - ама тук може да се "стъкмисат" дескриптори ... без да се прекомпилира newlib

_________________
main[-1u]={1};


Чет Юли 18, 2019 8:10 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: GCC NewLib
мдам... откривам топлата вода :)
за да запазя 100% stdio ще правя виртуална FS за syscall

тест:
Код:
[DBG] try open: /uart/1
[UART] OPEN( /1 )
[DBG] FD = 0
[UART] READ( 0 )
[UART] WRITE( 0 )
[UART] SEEK( 0 )
[UART] CLOSE( 0 )

[DBG] try open: /file/not/exist
[DBG] FD = -1

_________________
main[-1u]={1};


Пет Юли 19, 2019 11:06 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: GCC NewLib
питанка:

Код:
FILE * fopen ( const char * filename, const char * mode );

създава буфериран "файл" by default 1024 байта (mode няма опция за _IONBF не буфериран)
след него ако ползвам
Код:
setvbuf(fp, NULL, _IONBF, 0);

няма проблем....
обаче тъй като няма да ползвам истинска файлова система, всичките ми FILE ще са не буферирани ( имам API )
та питанката е има ли начин ( без да прекомпилирам newlib ) __SNBF да е активен by default

утре мисля да реплейсна функцията __sflags( ... ) <---- обработва mode стринга, връща int flags
където дето __SNBF е нула - ще го сетна да видя какво ще стане

ако не намеря "лесен хак" ще си остане със setvbuf

ЕДИТ:
остава си така както си е
файловете ще са повече от стримовете, а стрим или периферия ще се сетва със setvbuf()

_________________
main[-1u]={1};


Сря Юли 24, 2019 8:35 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: GCC NewLib
нящо такова се получава с "виртуална" файлова система ( EFS ) покриваща почти цялото STDIO ( в моя случай е много орязана, колкото да покрива embedded - грубо казано 20к либ, 20 printf, 20k екзампъл )
работи с UART и FILE-s към stdio, сокети и периферия

Пример за TCP-HTTP
https://github.com/Wiz-IO/platform-quec ... n-process-

_________________
main[-1u]={1};


Вто Юли 30, 2019 5:26 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: GCC NewLib
за сега става така
https://www.youtube.com/watch?v=hLB4ZztEt6M

_________________
main[-1u]={1};


Чет Авг 01, 2019 1:54 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: GCC NewLib
Linux питанка ... socket

int rc = ioctl(_sock, FIONREAD, &count);

липсва ми ioctl ... Azure Sphere API ... хидъра е празен, в библиотеката липсва функцията
търся алтернативно решене за проверка колко байта има във rx fifo-то
за реализация на int wifiClient::available() { ... }

в краен случай чета 1 байт и го пазя за read() първи върнат

_________________
main[-1u]={1};


Пет Авг 09, 2019 10:35 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 6 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни