This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 61cdd105ef160633b92e863d1dcc7ae829fe8e1c Author: raiden00pl <[email protected]> AuthorDate: Wed Oct 25 15:21:50 2023 +0200 Documentation: migrate /libs --- Documentation/components/index.rst | 1 + Documentation/components/libs/index.rst | 46 ++++ Documentation/components/libs/libc/index.rst | 152 +++++++++++++ Documentation/components/libs/libc/zoneinfo.rst | 179 ++++++++++++++++ Documentation/components/libs/libdsp.rst | 7 + Documentation/components/libs/libm.rst | 3 + Documentation/components/libs/libnx/index.rst | 19 ++ Documentation/components/libs/libnx/nxfonts.rst | 271 ++++++++++++++++++++++++ Documentation/components/libs/libxx.rst | 43 ++++ 9 files changed, 721 insertions(+) diff --git a/Documentation/components/index.rst b/Documentation/components/index.rst index 205bf364a2..765f50abe5 100644 --- a/Documentation/components/index.rst +++ b/Documentation/components/index.rst @@ -16,3 +16,4 @@ NuttX is very feature-rich RTOS and is thus composed of various different subsys paging.rst audio/index.rst filesystem/index.rst + libs/index.rst diff --git a/Documentation/components/libs/index.rst b/Documentation/components/libs/index.rst new file mode 100644 index 0000000000..7873b83052 --- /dev/null +++ b/Documentation/components/libs/index.rst @@ -0,0 +1,46 @@ +=============== +NuttX libraries +=============== + +This page discusses the NuttX libraries that can be found in ``libs/`` + +Libraries in NuttX are very special creatures. They have these properties: + +1. They can be shared by both application logic and logic within the OS when + using the FLAT build. + +2. But in PROTECTED and KERNEL modes, they must be built differently: The + copies used by applications and the OS cannot be the same. Rather, + separate versions of libraries must be built for the kernel and for + applications. + +3. When used by the OS, some special care must be taken to assure that the + OS logic does not disrupt the user's errno value and that the OS does + not create inappropriate cancellation points. + + For example, ``sem_wait()`` is both a cancellation point and modifies the + errno value. So within the FLAT build and without kernel version for + the PROTECTED and KERNEL builds, the special internal OS interface + ``nxsem_wait()`` must be used. Within libraries, the macro ``_SEM_WAIT()`` + (as defined in ``include/nuttx/semaphore.h``) is used instead. The + definition of this macro accounts for the different usage environments. + +NOTE: The libraries under ``libs/`` build differently from other NuttX +components: There are no build-related files in the ``libs/`` directory; it +is simply a container for other well-known, individual library directories. +The upper level Makefile logic is aware of the libraries within the ``libs/`` +container. + +The only real function of the ``libs/`` directory is to prevent the top-level +directory from becoming cluttered with individual libraries. + + +.. toctree:: + :maxdepth: 1 + :caption: Contents: + + libc/index.rst + libdsp.rst + libm.rst + libxx.rst + libnx/index.rst diff --git a/Documentation/components/libs/libc/index.rst b/Documentation/components/libs/libc/index.rst new file mode 100644 index 0000000000..8bd5359b9b --- /dev/null +++ b/Documentation/components/libs/libc/index.rst @@ -0,0 +1,152 @@ +==== +libc +==== + +This directory contains numerous, small functions typically associated with +what you would expect to find in a standard C library. The sub-directories +in this directory contain standard interface that can be executed by user- +mode programs. + +Normally, NuttX is built with no protection and all threads running in kerne- +mode. In that model, there is no real architectural distinction between +what is a kernel-mode program and what is a user-mode program; the system is +more like on multi-threaded program that all runs in kernel-mode. + +But if the CONFIG_BUILD_PROTECTED option is selected, NuttX will be built +into distinct user-mode and kernel-mode sections. In that case, most of the +code in the ``nuttx/`` directory will run in kernel-mode with exceptions +of (1) the user-mode "proxies" found in syscall/proxies, and (2) the +standard C library functions found in this directory. In this build model, +it is critical to separate the user-mode OS interfaces in this way. + +If ``CONFIG_BUILD_KERNEL`` is selected, then only a NuttX kernel will be built +with no applications. + +Sub-Directories +=============== + +The files in the ``libs/libc/`` directory are organized (mostly) according which file +in the include/ directory provides the prototype for library functions. So +we have:: + + audio - This part of the audio system: nuttx/audio/audio.h + builtin - Support for builtin applications. Used by nuttx/binfmt and NSH. + dlfcn - dlfcn.h + endian - endian.h + errno - errno.h + hex2bin - hex2bin.h + libgen - libgen.h + locale - locale.h + lzf - lzf.h + fixedmath - fixedmath.h + grp - grp.h + inttypes - inttypes.h + machine - Various architecture-specific implementations. + math - math.h + modlib - Part of module and shared library logic: nuttx/lib/modlib.h + net - Various network-related header files: netinet/ether.h, arpa/inet.h + pthread - pthread.h + pwd - pwd.h + queue - queue.h + sched - sched.h + semaphore - semaphore.h + stdio - stdio.h + stdlib - stdlib.h + string - string.h (and legacy strings.h and non-standard nuttx/b2c.h) + time - time.h + uio - sys/uio.h + unistd - unistd.h + wchar - wchar.h + wctype - wctype.h + +Most of these are "standard" header files; some are not: ``hex2bin.h`` and +``fixemath.h`` are non-standard. + +There is also a ``misc/`` subdirectory that contains various internal functions +and interfaces from header files that are too few to warrant their own sub- +directory:: + + misc - Nonstandard "glue" logic, debug.h, crc32.h, dirent.h + +Library Database +================ + +Information about functions available in the NuttX C library information is +maintained in a database. That "database" is implemented as a simple comma- +separated-value file, libc.csv. Most spreadsheets programs will accept this +format and can be used to maintain the library database. + +This library database will (eventually) be used to generate symbol library +symbol table information that can be exported to external applications. + +The format of the CSV file for each line is:: + + Field 1: Function name + Field 2: The header file that contains the function prototype + Field 3: Condition for compilation + Field 4: The type of function return value. + Field 5 - N+5: The type of each of the N formal parameters of the function + +Each type field has a format as follows:: + + type name: + For all simpler types + formal type | actual type: + For array types where the form of the formal (eg. int parm[2]) + differs from the type of actual passed parameter (eg. int*). This + is necessary because you cannot do simple casts to array types. + formal type | union member actual type | union member fieldname: + A similar situation exists for unions. For example, the formal + parameter type union sigval -- You cannot cast a uintptr_t to + a union sigval, but you can cast to the type of one of the union + member types when passing the actual parameter. Similarly, we + cannot cast a union sigval to a uinptr_t either. Rather, we need + to cast a specific union member fieldname to uintptr_t. + +NOTE: The tool mksymtab can be used to generate a symbol table from this CSV +file. See ``Documentation/components/tools`` for further details about the use of mksymtab. + +symtab +====== + +Symbol Tables and Build Modes +----------------------------- + +This directory provide support for a symbol table which provides all/most of +system and C library services/functions to the application and NSH. + +Symbol tables have differing usefulness in different NuttX build modes: + +1. In the FLAT build (``CONFIG_BUILD_FLAT``), symbol tables are used to bind + addresses in loaded ELF or NxFLAT modules to base code that usually + resides in FLASH memory. Both OS interfaces and user/application + libraries are made available to the loaded module via symbol tables. + +2. Symbol tables may be of value in a protected build + (``CONFIG_BUILD_PROTECTED``) where the newly started user task must + share resources with other user code (but should use system calls to + interact with the OS). + +3. But in the kernel build mode (``CONFIG_BUILD_LOADABLE``), only fully linked + executables loadable via ``execl()``, ``execv()``, or ``posix_spawan()`` can used. + There is no use for a symbol table with the kernel build since all + memory resources are separate; nothing is share-able with the newly + started process. + +Code/Text Size Implications +--------------------------- +The option can have substantial effect on system image size, mainly +code/text. That is because the instructions to generate symtab.inc +above will cause EVERY interface in the NuttX RTOS and the C library to be +included into build. Add to that the size of a huge symbol table. + +In order to reduce the code/text size, you may want to manually prune the +auto-generated symtab.inc file to remove all interfaces that you do +not wish to include into the base FLASH image. + + +.. toctree:: + :maxdepth: 1 + :caption: Contents: + + zoneinfo.rst diff --git a/Documentation/components/libs/libc/zoneinfo.rst b/Documentation/components/libs/libc/zoneinfo.rst new file mode 100644 index 0000000000..f87f7a2c8d --- /dev/null +++ b/Documentation/components/libs/libc/zoneinfo.rst @@ -0,0 +1,179 @@ +================== +libs/libc/zoneinfo +================== + +Author: Gregory Nutt <[email protected]> + +Directory Contents +================== + +This directory contains logic to create a version of the TZ/Olson database. +This database is required if localtime() support is selected via +CONFIG_LIBC_LOCALTIME. This logic in this directory does the following: + +- It downloads the current TZ database from the IANA website +- It downloads the current timezone tools from the same location +- It builds the tools and constructs the binary TZ database +- It will then, optionally, build a ROMFS filesystem image containing + the data base. + +Creating and Mounting a ROMFS TZ Database +========================================= + +The ROMFS filesystem image can that be mounted during the boot-up sequence +so that it is available for the localtime() logic. There are two steps to +doing this: + +- First, a ROM disk device must be created. This is done by calling + the function romdisk_register() as described in + nuttx/include/nuttx/drivers/ramdisk.h. This is an OS level operation + and must be done in the board-level logic before your application + starts. + + romdisk_register() will create a block driver at /dev/ramN where N + is the device minor number that was provided to romdisk_register. + +- The second step is to mount the file system. This step can be + performed either in your board configuration logic or by your + application using the mount() interface described in + nuttx/include/sys/mount.h. + + These steps, however, must be done very early in initialization, + before there is any need for time-related services. + +Both of these steps are shown together in the following code sample at the +end of this README file. + +Example Configuration +===================== + +I have tested this using the sim/nsh configuration. Here are the +modifications to the configuration that I used for testing:: + + CONFIG_BOARD_LATE_INITIALIZE=y + + CONFIG_LIBC_LOCALTIME=y + CONFIG_LIBC_TZDIR="/share/zoneinfo" + CONFIG_LIBC_TZ_MAX_TIMES=370 + CONFIG_LIBC_TZ_MAX_TYPES=20 + + CONFIG_LIBC_ZONEINFO=y + CONFIG_LIBC_ZONEINFO_ROMFS=y + +NOTE: The full TZ database is quite large. To create a reasonable sized +ROMFS image, I had to trim some of the files like this:: + + cd nuttx + tools/configure.sh sim:nsh + make menuconfig + +Select the above localtime() and nuttx/zoneinfo configuration settings. +Then:: + + make context + cd ../nuttx/libs/libc/zoneinfo/tzbin/usr/share/zoneinfo + +Remove as many timezone files as you can. Do not remove the GMT, localtime, +or posixrules files. Those might be needed in any event. Then you can +force rebuilding of the ROMFS filesystem be removing some files:: + + cd ../../.. + rm romfs_zoneinfo.* + rm *.o + cd ../../nuttx + make + +If you have problems building the simulator on your platform, check out +nuttx/boards/sim/sim/sim/README.txt. You might find some help there. + +Here is a sample run. I have not seen any errors in single stepping through +the logic but neither am I certain that everything is working properly:: + + NuttShell (NSH) + nsh> date + Jul 01 00:00:02 2008 + nsh> set TZ US/Mountain + nsh> date -s "Apr 11 11:53:00 2015" + nsh> date + Apr 11 17:53:00 2015 + +NOTE: Because of daylight savings time, US/Mountain is GMT-6 on Apr 11. The +above suggests that perhaps the NSH data command may be setting local time, +but printing GMT time? + +Sample Code to Mount the ROMFS Filesystem +========================================= + +.. code-block:: C + + /**************************************************************************** + * Included Files + ****************************************************************************/ + + #include <nuttx/config.h> + + #include <sys/mount.h> + #include <stdio.h> + #include <stdlib.h> + #include <errno.h> + + #include <nuttx/drivers/ramdisk.h> + #include <nuttx/zoneinfo.h> + + /**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + + #ifndef CONFIG_LIBC_TZDIR + # error CONFIG_LIBC_TZDIR is not defined + #endif + + #ifdef CONFIG_DISABLE_MOUNTPOINT + # error "Mountpoint support is disabled" + #endif + + #ifndef CONFIG_FS_ROMFS + # error "ROMFS support not enabled" + #endif + + #define SECTORSIZE 64 + #define NSECTORS(b) (((b)+SECTORSIZE-1)/SECTORSIZE) + + /**************************************************************************** + * Public Functions + ****************************************************************************/ + + int mount_zoneinfo(int minor) + { + char devname[32]; + int ret; + + /* Create a RAM disk for the test */ + + ret = romdisk_register(minor, romfs_zoneinfo_img, + NSECTORS(romfs_zoneinfo_img_len), SECTORSIZE); + if (ret < 0) + { + printf("ERROR: Failed to create RAM disk\n"); + return ret; + } + + /* Use the minor number to create a name for the ROM disk block device */ + + snprintf(devname, 32, "/dev/ram%d", minor); + + /* Mount the ROMFS file system */ + + printf("Mounting ROMFS filesystem at target=%s with source=%s\n", + CONFIG_LIBC_TZDIR, devname); + + ret = mount(devname, CONFIG_LIBC_TZDIR, "romfs", MS_RDONLY, NULL); + if (ret < 0) + { + printf("ERROR: Mount failed: %d\n", errno); + return ret; + } + + printf("TZ database mounted at %s\n", CONFIG_LIBC_TZDIR); + return OK; + } diff --git a/Documentation/components/libs/libdsp.rst b/Documentation/components/libs/libdsp.rst new file mode 100644 index 0000000000..6115ad3e11 --- /dev/null +++ b/Documentation/components/libs/libdsp.rst @@ -0,0 +1,7 @@ +====== +libdsp +====== + +This directory contains various DSP functions. + +At the moment you will find here mainly functions related to BLDC/PMSM control. diff --git a/Documentation/components/libs/libm.rst b/Documentation/components/libs/libm.rst new file mode 100644 index 0000000000..058c9f55fe --- /dev/null +++ b/Documentation/components/libs/libm.rst @@ -0,0 +1,3 @@ +==== +libm +==== diff --git a/Documentation/components/libs/libnx/index.rst b/Documentation/components/libs/libnx/index.rst new file mode 100644 index 0000000000..6bcd24312e --- /dev/null +++ b/Documentation/components/libs/libnx/index.rst @@ -0,0 +1,19 @@ +===== +libnx +===== + +The graphics capability consist both of components internal to the RTOS +and of user-callable interfaces. In the NuttX kernel mode build there are +some components of the graphics subsystem are callable in user mode and +other components that are internal to the RTOS. This directory, libs/libnx/, +contains only those user-callable components. + +The RTOS internal functions are contained in the ``graphics/`` directory. +Please refer to ``Documentation/components/graphics`` for more detailed information. + + +.. toctree:: + :maxdepth: 1 + :caption: Contents: + + nxfonts.rst diff --git a/Documentation/components/libs/libnx/nxfonts.rst b/Documentation/components/libs/libnx/nxfonts.rst new file mode 100644 index 0000000000..8d7a735903 --- /dev/null +++ b/Documentation/components/libs/libnx/nxfonts.rst @@ -0,0 +1,271 @@ +====== +nxfont +====== + +This directory contains font support for NuttX. The contents of this directory +are only build if CONFIG_NXFONTS is defined in the NuttX configuration file. + +Installing New Fonts +==================== + +There is a tool called bdf-converter in the directory tools/. The bdf-converter +program be used to convert fonts in Bitmap Distribution Format (BDF) +into fonts that can be used in the NX graphics system. + +Below are general instructions for creating and installing a new font +in the NX graphic system: + +1. Locate a font in BDF format, +2. Use the bdf-converter program to convert the BDF font to the NuttX + font format. This will result in a C header file containing + definitions. That header file should be installed at, for example, + graphics/nxfonts/nxfonts_myfont.h. + +Create a new NuttX configuration variable. For example, suppose +you define the following variable: CONFIG_NXFONT_MYFONT. Then +you would need to: + +3. Define CONFIG_NXFONT_MYFONT=y in your NuttX configuration file. + +A font ID number has to be assigned for each new font. The font ID +is defined in the file include/nuttx/nx/nxfonts.h. Those definitions +have to be extended to support your new font. Look at how the font ID +enabled by CONFIG_NXFONT_SANS23X27 is defined and add an ID for your +new font in a similar fashion: + +4. include/nuttx/nx/nxfonts.h. Add you new font as a possible system + default font: + + .. code-block:: C + + #if defined(CONFIG_NXFONT_SANS23X27) + # define NXFONT_DEFAULT FONTID_SANS23X27 + #elif defined(CONFIG_NXFONT_MYFONT) + # define NXFONT_DEFAULT FONTID_MYFONT + #endif + + Then define the actual font ID. Make sure that the font ID value + is unique: + + enum nx_fontid_e + { + FONTID_DEFAULT = 0 /* The default font */ + #ifdef CONFIG_NXFONT_SANS23X27 + , FONTID_SANS23X27 = 1 /* The 23x27 sans serif font */ + #endif + #ifdef CONFIG_NXFONT_MYFONT + , FONTID_MYFONT = 2 /* My shiny, new font */ + #endif + ... + +New Add the font to the NX build system. There are several files that +you have to modify to do this. Look how the build system uses the +font CONFIG_NXFONT_SANS23X27 for examaples: + +5. nuttx/graphics/Makefile. This file needs logic to auto-generate + a C source file from the header file that you generated with the + the bdf-converter program. Notice NXFONTS_FONTID=2; this must be + set to the same font ID value that you defined in the + include/nuttx/nx/nxfonts.h file. + + .. code-block:: make + + genfontsources: + ifeq ($(CONFIG_NXFONT_SANS23X27),y) + @$(MAKE) -C nxfonts -f Makefile.sources NXFONTS_FONTID=1 EXTRAFLAGS=$(EXTRAFLAGS) + endif + ifeq ($(CONFIG_NXFONT_MYFONT),y) + @$(MAKE) -C nxfonts -f Makefile.sources NXFONTS_FONTID=2 EXTRAFLAGS=$(EXTRAFLAGS) + endif + +6. nuttx/graphics/nxfonts/Make.defs. Set the make variable NXFSET_CSRCS. + NXFSET_CSRCS determines the name of the font C file to build when + NXFONTS_FONTID=2: + + .. code-block:: make + + ifeq ($(CONFIG_NXFONT_SANS23X27),y) + NXFSET_CSRCS += nxfonts_bitmaps_sans23x27.c + endif + ifeq ($(CONFIG_NXFONT_MYFONT),y) + NXFSET_CSRCS += nxfonts_bitmaps_myfont.c + endif + +7. nuttx/graphics/nxfonts/Makefile.sources. This is the Makefile used + in step 5 that will actually generate the font C file. So, given + your NXFONTS_FONTID=2, it needs to determine a prefix to use for + auto-generated variable and function names and (again) the name of + the autogenerated file to create (this must be the same name that + was used in nuttx/graphics/nxfonts/Make.defs): + + .. code-block:: C + + ifeq ($(NXFONTS_FONTID),1) + NXFONTS_PREFIX := g_sans23x27_ + GEN_CSRC = nxfonts_bitmaps_sans23x27.c + endif + ifeq ($(NXFONTS_FONTID),2) + NXFONTS_PREFIX := g_myfont_ + GEN_CSRC = nxfonts_bitmaps_myfont.c + endif + +8. graphics/nxfonts/nxfonts_bitmaps.c. This is the file that contains + the generic font structures. It is used as a "template" file by + nuttx/graphics/nxfonts/Makefile.sources to create your customized + font data set. + + .. code-block:: C + + #if NXFONTS_FONTID == 1 + # include "nxfonts_sans23x27.h" + #elif NXFONTS_FONTID == 2 + # include "nxfonts_myfont.h" + #else + # error "No font ID specified" + #endif + + Where nxfonts_myfont.h is the NuttX font file that we generated in + step 2 using the bdf-converter tool. + +9. graphics/nxfonts/nxfonts_getfont.c. Finally, we need to extend the + logic that does the run-time font lookups so that can find our new + font. The lookup function is NXHANDLE nxf_getfonthandle(enum nx_fontid_e fontid). + The new font information needs to be added to data structures used by + that function + + .. code-block:: C + + #ifdef CONFIG_NXFONT_SANS23X27 + extern const struct nx_fontpackage_s g_sans23x27_package; + #endif + #ifdef CONFIG_NXFONT_MYFONT + extern const struct nx_fontpackage_s g_myfont_package; + #endif + + static FAR const struct nx_fontpackage_s *g_fontpackages[] = + { + #ifdef CONFIG_NXFONT_SANS23X27 + &g_sans23x27_package, + #endif + #ifdef CONFIG_NXFONT_MYFONT + &g_myfont_package, + #endif + NULL + }; + +Configuration Settings +====================== + +NxFonts +------- + +* ``CONFIG_NXFONTS`` + + Enables font support +* ``CONFIG_NXFONTS_CHARBITS`` + + The number of bits in the character set. Current options are only 7 and 8. + The default is 7. + +* ``CONFIG_NXFONTS_DISABLE_1BPP``, ``CONFIG_NXFONTS_DISABLE_2BPP``, + ``CONFIG_NXFONTS_DISABLE_4BPP``, ``CONFIG_NXFONTS_DISABLE_8BPP``, + ``CONFIG_NXFONTS_DISABLE_16BPP``, ``CONFIG_NXFONTS_DISABLE_24BPP``, and + ``CONFIG_NXFONTS_DISABLE_32BPP`` + + NX supports a variety of pixel depths. You can save some memory by disabling + support for unused color depths. + +* ``CONFIG_NXFONTS_PACKEDMSFIRST`` + + If a pixel depth of less than 8-bits is used, then NX needs to know if the + pixels pack from the MS to LS or from LS to MS + +Font Selections +--------------- + +* ``CONFIG_NXFONT_SANS17X22`` + + This option enables support for a tiny, 17x22 san serif font + (font ID FONTID_SANS17X22 == 14). + +* ``CONFIG_NXFONT_SANS20X26`` + + This option enables support for a tiny, 20x26 san serif font + (font ID FONTID_SANS20X26 == 15). + +* ``CONFIG_NXFONT_SANS23X27`` + + This option enables support for a tiny, 23x27 san serif font + (font ID FONTID_SANS23X27 == 1). + +* ``CONFIG_NXFONT_SANS22X29`` + + This option enables support for a small, 22x29 san serif font + (font ID FONTID_SANS22X29 == 2). + +* ``CONFIG_NXFONT_SANS28X37`` + + This option enables support for a medium, 28x37 san serif font + (font ID FONTID_SANS28X37 == 3). + +* ``CONFIG_NXFONT_SANS39X48`` + + This option enables support for a large, 39x48 san serif font + (font ID FONTID_SANS39X48 == 4). + +* ``CONFIG_NXFONT_SANS17X23B`` + + This option enables support for a tiny, 17x23 san serif bold font + (font ID FONTID_SANS17X23B == 16). + +* ``CONFIG_NXFONT_SANS20X27B`` + + This option enables support for a tiny, 20x27 san serif bold font + (font ID FONTID_SANS20X27B == 17). + +* ``CONFIG_NXFONT_SANS22X29B`` + + This option enables support for a small, 22x29 san serif bold font + (font ID FONTID_SANS22X29B == 5). + +* ``CONFIG_NXFONT_SANS28X37B`` + + This option enables support for a medium, 28x37 san serif bold font + (font ID FONTID_SANS28X37B == 6). + +* ``CONFIG_NXFONT_SANS40X49B`` + + This option enables support for a large, 40x49 san serif bold font + (font ID FONTID_SANS40X49B == 7). + +* ``CONFIG_NXFONT_SERIF22X29`` + + This option enables support for a small, 22x29 font (with serifs) + (font ID FONTID_SERIF22X29 == 8). + +* ``CONFIG_NXFONT_SERIF29X37`` + + This option enables support for a medium, 29x37 font (with serifs) + (font ID FONTID_SERIF29X37 == 9). + +* ``CONFIG_NXFONT_SERIF38X48`` + + This option enables support for a large, 38x48 font (with serifs) + (font ID FONTID_SERIF38X48 == 10). + +* ``CONFIG_NXFONT_SERIF22X28B`` + + This option enables support for a small, 27x38 bold font (with serifs) + (font ID FONTID_SERIF22X28B == 11). + +* ``CONFIG_NXFONT_SERIF27X38B`` + + This option enables support for a medium, 27x38 bold font (with serifs) + (font ID FONTID_SERIF27X38B == 12). + p +* ``CONFIG_NXFONT_SERIF38X49B`` + + This option enables support for a large, 38x49 bold font (with serifs) + (font ID FONTID_SERIF38X49B == 13). + +[REVISIT... this list is not complete] diff --git a/Documentation/components/libs/libxx.rst b/Documentation/components/libs/libxx.rst new file mode 100644 index 0000000000..23f74fd621 --- /dev/null +++ b/Documentation/components/libs/libxx.rst @@ -0,0 +1,43 @@ +===== +libxx +===== + +This directory contains three C++ library: + +- A fragmentary C++ library that will allow to build only the simplest of + C++ applications. In the deeply embedded world, that is probably all + that is necessary. + + At present, only the following are supported here: + + - ``void *operator new(std::size_t nbytes)`` + - ``void operator delete(void* ptr)`` + - ``void operator delete[](void *ptr)`` + - ``void __cxa_pure_virtual(void)`` + - ``int __aeabi_atexit(void* object, void (*destroyer)(void*), void *dso_handle)`` + - ``int __cxa_atexit(__cxa_exitfunc_t func, FAR void *arg, FAR void *dso_handle)`` + + This implementation is selected when neither of the following + two options are enabled. + +- LLVM "libc++" C++ library (http://libcxx.llvm.org/) + This implementation is selected with CONFIG_LIBCXX=y. + +- uClibc++ C++ library (http://cxx.uclibc.org/) + This implementation is selected with CONFIG_UCLIBCXX=y. + +operator new +------------ + +This operator should take a type of size_t. But size_t has an unknown underlying +type. In the nuttx sys/types.h header file, size_t is typed as uint32_t +(which is determined by architecture-specific logic). But the C++ +compiler may believe that size_t is of a different type resulting in +compilation errors in the operator. Using the underlying integer type +instead of size_t seems to resolve the compilation issues. Need to +REVISIT this. + +Once some C++ compilers, this will cause an error:: + + Problem: "'operator new' takes size_t ('...') as first parameter" + Workaround: Add -fpermissive to the compilation flags
