Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

GCC NewLib
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=16661
Страница 1 от 1

Автор:  TheWizard [ Чет Юли 18, 2019 9:10 pm ]
Заглавие:  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

Автор:  TheWizard [ Пет Юли 19, 2019 12:06 pm ]
Заглавие:  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

Автор:  TheWizard [ Сря Юли 24, 2019 9:35 pm ]
Заглавие:  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()

Автор:  TheWizard [ Вто Юли 30, 2019 6:26 pm ]
Заглавие:  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-

Автор:  TheWizard [ Чет Авг 01, 2019 2:54 pm ]
Заглавие:  Re: GCC NewLib

за сега става така
https://www.youtube.com/watch?v=hLB4ZztEt6M

Автор:  TheWizard [ Пет Авг 09, 2019 11:35 pm ]
Заглавие:  Re: GCC NewLib

Linux питанка ... socket

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

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

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

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/