diff --git a/nuttx/Documentation/NXGraphicsSubsystem.html b/nuttx/Documentation/NXGraphicsSubsystem.html index ecace15d0c..38baf54ee1 100644 --- a/nuttx/Documentation/NXGraphicsSubsystem.html +++ b/nuttx/Documentation/NXGraphicsSubsystem.html @@ -3368,13 +3368,25 @@ int nxf_convert_32bpp(FAR uint32_t *dest, uint16_t height,
CONFIG_NXCONSOLE_FONTCACHE
:
- CONFIG_NXCONSOLE_CACHESIZE
.
- Default: No font caching.
CONFIG_NXCONSOLE_CACHESIZE
:
- CONFIG_NXCONSOLE_FONTCACHE
, then this setting will control the size of the font cache (in number of glyphs). Default: 16.
+ CONFIG_NXCONSOLE_CACHESIZE
setting will control the size of the font cache (in number of glyphs).
+ Only that number of the most recently used glyphs will be retained.
+ Default: 16.
+ + NOTE: There can still be a race condition between the NxConsole driver and the + NX task. If you every see character corruption (especially when printing + a lot of data or scrolling), then increasing the value ofCONFIG_NXCONSOLE_CACHESIZE
+ is something that you should try. + Alternatively, you can reduce the size ofCONFIG_MQ_MAXMSGSIZE
which will force NxConsole task to pace the server task. +CONFIG_NXCONSOLE_CACHESIZE
should be larger thanCONFIG_MQ_MAXMSGSIZE
in any event. +
CONFIG_NXCONSOLE_LINESEPARATION
:
CONFIG_NXCONSOLE_NOWRAP
:
diff --git a/nuttx/configs/sim/nx/defconfig b/nuttx/configs/sim/nx/defconfig
index f8139b32ca..e34dadcd87 100644
--- a/nuttx/configs/sim/nx/defconfig
+++ b/nuttx/configs/sim/nx/defconfig
@@ -438,15 +438,16 @@ CONFIG_NX_MXCLIENTMSGS=16
# NxConsole needs to remember every character written to the console so
# that it can redraw the window. This setting determines the size of some
# internal memory allocations used to hold the character data. Default: 128.
-# CONFIG_NXCONSOLE_FONTCACHE
-# If this setting is defined, then caching of fonts will be supported by
-# NxConsole. Each font must be rendered from the tiny font storage format
-# to the full display size and pixel depth. If this setting is defined, then
-# the more recently used font glyphs will be retained in a cache of size
-# CONFIG_NXCONSOLE_CACHESIZE. Default: No font caching.
# CONFIG_NXCONSOLE_CACHESIZE
-# If CONFIG_NXCONSOLE_FONTCACHE, then this setting will control the size
-# of the font cache (in number of glyphs). Default: 16.
+# NxConsole supports caching of rendered fonts. This font caching is required
+# for two reasons: (1) First, it improves text performance, but more
+# importantly (2) it preserves the font memory. Since the NX server runs on
+# a separate server thread, it requires that the rendered font memory persist
+# until the server has a chance to render the font. (NOTE: There is still
+# inherently a race condition in this!). Unfortunately, the font cache would
+# be quite large if all fonts were saved. The CONFIG_NXCONSOLE_CACHESIZE setting
+# will control the size of the font cache (in number of glyphs). Only that
+# number of the most recently used glyphs will be retained. Default: 16.
# CONFIG_NXCONSOLE_LINESEPARATION
# This the space (in rows) between each row of test. Default: 2
# CONFIG_NXCONSOLE_NOWRAP
@@ -458,7 +459,6 @@ CONFIG_NXCONSOLE=n
CONFIG_NXCONSOLE_BPP=8
# CONFIG_NXCONSOLE_NOGETRUN
CONFIG_NXCONSOLE_MXCHARS=256
-# CONFIG_NXCONSOLE_FONTCACHE
# CONFIG_NXCONSOLE_CACHESIZE
# CONFIG_NXCONSOLE_LINESEPARATION
# CONFIG_NXCONSOLE_NOWRAP
diff --git a/nuttx/configs/sim/nx11/defconfig b/nuttx/configs/sim/nx11/defconfig
index d8b1d6019e..7866cc1b2a 100644
--- a/nuttx/configs/sim/nx11/defconfig
+++ b/nuttx/configs/sim/nx11/defconfig
@@ -439,15 +439,16 @@ CONFIG_NX_MXCLIENTMSGS=16
# NxConsole needs to remember every character written to the console so
# that it can redraw the window. This setting determines the size of some
# internal memory allocations used to hold the character data. Default: 128.
-# CONFIG_NXCONSOLE_FONTCACHE
-# If this setting is defined, then caching of fonts will be supported by
-# NxConsole. Each font must be rendered from the tiny font storage format
-# to the full display size and pixel depth. If this setting is defined, then
-# the more recently used font glyphs will be retained in a cache of size
-# CONFIG_NXCONSOLE_CACHESIZE. Default: No font caching.
# CONFIG_NXCONSOLE_CACHESIZE
-# If CONFIG_NXCONSOLE_FONTCACHE, then this setting will control the size
-# of the font cache (in number of glyphs). Default: 16.
+# NxConsole supports caching of rendered fonts. This font caching is required
+# for two reasons: (1) First, it improves text performance, but more
+# importantly (2) it preserves the font memory. Since the NX server runs on
+# a separate server thread, it requires that the rendered font memory persist
+# until the server has a chance to render the font. (NOTE: There is still
+# inherently a race condition in this!). Unfortunately, the font cache would
+# be quite large if all fonts were saved. The CONFIG_NXCONSOLE_CACHESIZE setting
+# will control the size of the font cache (in number of glyphs). Only that
+# number of the most recently used glyphs will be retained. Default: 16.
# CONFIG_NXCONSOLE_LINESEPARATION
# This the space (in rows) between each row of test. Default: 2
# CONFIG_NXCONSOLE_NOWRAP
@@ -459,7 +460,6 @@ CONFIG_NXCONSOLE=n
CONFIG_NXCONSOLE_BPP=32
# CONFIG_NXCONSOLE_NOGETRUN
CONFIG_NXCONSOLE_MXCHARS=256
-# CONFIG_NXCONSOLE_FONTCACHE
# CONFIG_NXCONSOLE_CACHESIZE
# CONFIG_NXCONSOLE_LINESEPARATION
# CONFIG_NXCONSOLE_NOWRAP
diff --git a/nuttx/configs/stm3210e-eval/nsh2/defconfig b/nuttx/configs/stm3210e-eval/nsh2/defconfig
index 228abf2309..9fbbcce88c 100644
--- a/nuttx/configs/stm3210e-eval/nsh2/defconfig
+++ b/nuttx/configs/stm3210e-eval/nsh2/defconfig
@@ -1057,15 +1057,16 @@ CONFIG_NX_MXCLIENTMSGS=16
# NxConsole needs to remember every character written to the console so
# that it can redraw the window. This setting determines the size of some
# internal memory allocations used to hold the character data. Default: 128.
-# CONFIG_NXCONSOLE_FONTCACHE
-# If this setting is defined, then caching of fonts will be supported by
-# NxConsole. Each font must be rendered from the tiny font storage format
-# to the full display size and pixel depth. If this setting is defined, then
-# the more recently used font glyphs will be retained in a cache of size
-# CONFIG_NXCONSOLE_CACHESIZE. Default: No font caching.
# CONFIG_NXCONSOLE_CACHESIZE
-# If CONFIG_NXCONSOLE_FONTCACHE, then this setting will control the size
-# of the font cache (in number of glyphs). Default: 16.
+# NxConsole supports caching of rendered fonts. This font caching is required
+# for two reasons: (1) First, it improves text performance, but more
+# importantly (2) it preserves the font memory. Since the NX server runs on
+# a separate server thread, it requires that the rendered font memory persist
+# until the server has a chance to render the font. (NOTE: There is still
+# inherently a race condition in this!). Unfortunately, the font cache would
+# be quite large if all fonts were saved. The CONFIG_NXCONSOLE_CACHESIZE setting
+# will control the size of the font cache (in number of glyphs). Only that
+# number of the most recently used glyphs will be retained. Default: 16.
# CONFIG_NXCONSOLE_LINESEPARATION
# This the space (in rows) between each row of test. Default: 2
# CONFIG_NXCONSOLE_NOWRAP
@@ -1075,10 +1076,9 @@ CONFIG_NX_MXCLIENTMSGS=16
#
CONFIG_NXCONSOLE=n
CONFIG_NXCONSOLE_BPP=16
-# CONFIG_NXCONSOLE_NOGETRUN
+CONFIG_NXCONSOLE_NOGETRUN=y
CONFIG_NXCONSOLE_MXCHARS=256
-# CONFIG_NXCONSOLE_FONTCACHE
-# CONFIG_NXCONSOLE_CACHESIZE
+CONFIG_NXCONSOLE_CACHESIZE=32
# CONFIG_NXCONSOLE_LINESEPARATION
# CONFIG_NXCONSOLE_NOWRAP
diff --git a/nuttx/configs/stm3210e-eval/nx/defconfig b/nuttx/configs/stm3210e-eval/nx/defconfig
index 02cafd33d7..1df6b454d5 100644
--- a/nuttx/configs/stm3210e-eval/nx/defconfig
+++ b/nuttx/configs/stm3210e-eval/nx/defconfig
@@ -907,15 +907,16 @@ CONFIG_NX_MXCLIENTMSGS=16
# NxConsole needs to remember every character written to the console so
# that it can redraw the window. This setting determines the size of some
# internal memory allocations used to hold the character data. Default: 128.
-# CONFIG_NXCONSOLE_FONTCACHE
-# If this setting is defined, then caching of fonts will be supported by
-# NxConsole. Each font must be rendered from the tiny font storage format
-# to the full display size and pixel depth. If this setting is defined, then
-# the more recently used font glyphs will be retained in a cache of size
-# CONFIG_NXCONSOLE_CACHESIZE. Default: No font caching.
# CONFIG_NXCONSOLE_CACHESIZE
-# If CONFIG_NXCONSOLE_FONTCACHE, then this setting will control the size
-# of the font cache (in number of glyphs). Default: 16.
+# NxConsole supports caching of rendered fonts. This font caching is required
+# for two reasons: (1) First, it improves text performance, but more
+# importantly (2) it preserves the font memory. Since the NX server runs on
+# a separate server thread, it requires that the rendered font memory persist
+# until the server has a chance to render the font. (NOTE: There is still
+# inherently a race condition in this!). Unfortunately, the font cache would
+# be quite large if all fonts were saved. The CONFIG_NXCONSOLE_CACHESIZE setting
+# will control the size of the font cache (in number of glyphs). Only that
+# number of the most recently used glyphs will be retained. Default: 16.
# CONFIG_NXCONSOLE_LINESEPARATION
# This the space (in rows) between each row of test. Default: 2
# CONFIG_NXCONSOLE_NOWRAP
@@ -925,10 +926,9 @@ CONFIG_NX_MXCLIENTMSGS=16
#
CONFIG_NXCONSOLE=n
CONFIG_NXCONSOLE_BPP=16
-# CONFIG_NXCONSOLE_NOGETRUN
+CONFIG_NXCONSOLE_NOGETRUN=y
CONFIG_NXCONSOLE_MXCHARS=256
-# CONFIG_NXCONSOLE_FONTCACHE
-# CONFIG_NXCONSOLE_CACHESIZE
+CONFIG_NXCONSOLE_CACHESIZE=32
# CONFIG_NXCONSOLE_LINESEPARATION
# CONFIG_NXCONSOLE_NOWRAP
diff --git a/nuttx/configs/stm3210e-eval/nxconsole/defconfig b/nuttx/configs/stm3210e-eval/nxconsole/defconfig
index 5945bb6426..b3bc9e3cc9 100644
--- a/nuttx/configs/stm3210e-eval/nxconsole/defconfig
+++ b/nuttx/configs/stm3210e-eval/nxconsole/defconfig
@@ -915,15 +915,16 @@ CONFIG_NX_MXCLIENTMSGS=16
# NxConsole needs to remember every character written to the console so
# that it can redraw the window. This setting determines the size of some
# internal memory allocations used to hold the character data. Default: 128.
-# CONFIG_NXCONSOLE_FONTCACHE
-# If this setting is defined, then caching of fonts will be supported by
-# NxConsole. Each font must be rendered from the tiny font storage format
-# to the full display size and pixel depth. If this setting is defined, then
-# the more recently used font glyphs will be retained in a cache of size
-# CONFIG_NXCONSOLE_CACHESIZE. Default: No font caching.
# CONFIG_NXCONSOLE_CACHESIZE
-# If CONFIG_NXCONSOLE_FONTCACHE, then this setting will control the size
-# of the font cache (in number of glyphs). Default: 16.
+# NxConsole supports caching of rendered fonts. This font caching is required
+# for two reasons: (1) First, it improves text performance, but more
+# importantly (2) it preserves the font memory. Since the NX server runs on
+# a separate server thread, it requires that the rendered font memory persist
+# until the server has a chance to render the font. (NOTE: There is still
+# inherently a race condition in this!). Unfortunately, the font cache would
+# be quite large if all fonts were saved. The CONFIG_NXCONSOLE_CACHESIZE setting
+# will control the size of the font cache (in number of glyphs). Only that
+# number of the most recently used glyphs will be retained. Default: 16.
# CONFIG_NXCONSOLE_LINESEPARATION
# This the space (in rows) between each row of test. Default: 2
# CONFIG_NXCONSOLE_NOWRAP
@@ -933,10 +934,9 @@ CONFIG_NX_MXCLIENTMSGS=16
#
CONFIG_NXCONSOLE=y
CONFIG_NXCONSOLE_BPP=16
-# CONFIG_NXCONSOLE_NOGETRUN
+CONFIG_NXCONSOLE_NOGETRUN=y
CONFIG_NXCONSOLE_MXCHARS=256
-# CONFIG_NXCONSOLE_FONTCACHE
-# CONFIG_NXCONSOLE_CACHESIZE
+CONFIG_NXCONSOLE_CACHESIZE=32
# CONFIG_NXCONSOLE_LINESEPARATION
# CONFIG_NXCONSOLE_NOWRAP
diff --git a/nuttx/configs/stm3210e-eval/nxlines/defconfig b/nuttx/configs/stm3210e-eval/nxlines/defconfig
index fa067ae41c..76dc411c96 100644
--- a/nuttx/configs/stm3210e-eval/nxlines/defconfig
+++ b/nuttx/configs/stm3210e-eval/nxlines/defconfig
@@ -906,15 +906,16 @@ CONFIG_NX_MXCLIENTMSGS=16
# NxConsole needs to remember every character written to the console so
# that it can redraw the window. This setting determines the size of some
# internal memory allocations used to hold the character data. Default: 128.
-# CONFIG_NXCONSOLE_FONTCACHE
-# If this setting is defined, then caching of fonts will be supported by
-# NxConsole. Each font must be rendered from the tiny font storage format
-# to the full display size and pixel depth. If this setting is defined, then
-# the more recently used font glyphs will be retained in a cache of size
-# CONFIG_NXCONSOLE_CACHESIZE. Default: No font caching.
# CONFIG_NXCONSOLE_CACHESIZE
-# If CONFIG_NXCONSOLE_FONTCACHE, then this setting will control the size
-# of the font cache (in number of glyphs). Default: 16.
+# NxConsole supports caching of rendered fonts. This font caching is required
+# for two reasons: (1) First, it improves text performance, but more
+# importantly (2) it preserves the font memory. Since the NX server runs on
+# a separate server thread, it requires that the rendered font memory persist
+# until the server has a chance to render the font. (NOTE: There is still
+# inherently a race condition in this!). Unfortunately, the font cache would
+# be quite large if all fonts were saved. The CONFIG_NXCONSOLE_CACHESIZE setting
+# will control the size of the font cache (in number of glyphs). Only that
+# number of the most recently used glyphs will be retained. Default: 16.
# CONFIG_NXCONSOLE_LINESEPARATION
# This the space (in rows) between each row of test. Default: 2
# CONFIG_NXCONSOLE_NOWRAP
@@ -924,10 +925,9 @@ CONFIG_NX_MXCLIENTMSGS=16
#
CONFIG_NXCONSOLE=n
CONFIG_NXCONSOLE_BPP=16
-# CONFIG_NXCONSOLE_NOGETRUN
+CONFIG_NXCONSOLE_NOGETRUN=y
CONFIG_NXCONSOLE_MXCHARS=256
-# CONFIG_NXCONSOLE_FONTCACHE
-# CONFIG_NXCONSOLE_CACHESIZE
+CONFIG_NXCONSOLE_CACHESIZE=32
# CONFIG_NXCONSOLE_LINESEPARATION
# CONFIG_NXCONSOLE_NOWRAP
diff --git a/nuttx/configs/stm3210e-eval/nxtext/defconfig b/nuttx/configs/stm3210e-eval/nxtext/defconfig
index 753b69190d..434635faec 100644
--- a/nuttx/configs/stm3210e-eval/nxtext/defconfig
+++ b/nuttx/configs/stm3210e-eval/nxtext/defconfig
@@ -906,15 +906,16 @@ CONFIG_NX_MXCLIENTMSGS=16
# NxConsole needs to remember every character written to the console so
# that it can redraw the window. This setting determines the size of some
# internal memory allocations used to hold the character data. Default: 128.
-# CONFIG_NXCONSOLE_FONTCACHE
-# If this setting is defined, then caching of fonts will be supported by
-# NxConsole. Each font must be rendered from the tiny font storage format
-# to the full display size and pixel depth. If this setting is defined, then
-# the more recently used font glyphs will be retained in a cache of size
-# CONFIG_NXCONSOLE_CACHESIZE. Default: No font caching.
# CONFIG_NXCONSOLE_CACHESIZE
-# If CONFIG_NXCONSOLE_FONTCACHE, then this setting will control the size
-# of the font cache (in number of glyphs). Default: 16.
+# NxConsole supports caching of rendered fonts. This font caching is required
+# for two reasons: (1) First, it improves text performance, but more
+# importantly (2) it preserves the font memory. Since the NX server runs on
+# a separate server thread, it requires that the rendered font memory persist
+# until the server has a chance to render the font. (NOTE: There is still
+# inherently a race condition in this!). Unfortunately, the font cache would
+# be quite large if all fonts were saved. The CONFIG_NXCONSOLE_CACHESIZE setting
+# will control the size of the font cache (in number of glyphs). Only that
+# number of the most recently used glyphs will be retained. Default: 16.
# CONFIG_NXCONSOLE_LINESEPARATION
# This the space (in rows) between each row of test. Default: 2
# CONFIG_NXCONSOLE_NOWRAP
@@ -924,10 +925,9 @@ CONFIG_NX_MXCLIENTMSGS=16
#
CONFIG_NXCONSOLE=n
CONFIG_NXCONSOLE_BPP=16
-# CONFIG_NXCONSOLE_NOGETRUN
+CONFIG_NXCONSOLE_NOGETRUN=y
CONFIG_NXCONSOLE_MXCHARS=256
-# CONFIG_NXCONSOLE_FONTCACHE
-# CONFIG_NXCONSOLE_CACHESIZE
+CONFIG_NXCONSOLE_CACHESIZE=32
# CONFIG_NXCONSOLE_LINESEPARATION
# CONFIG_NXCONSOLE_NOWRAP
diff --git a/nuttx/graphics/README.txt b/nuttx/graphics/README.txt
index 935df9140c..a816cdb584 100644
--- a/nuttx/graphics/README.txt
+++ b/nuttx/graphics/README.txt
@@ -336,15 +336,21 @@ CONFIG_NXCONSOLE_MXCHARS
NxConsole needs to remember every character written to the console so
that it can redraw the window. This setting determines the size of some
internal memory allocations used to hold the character data. Default: 128.
-CONFIG_NXCONSOLE_FONTCACHE
- If this setting is defined, then caching of fonts will be supported by
- NxConsole. Each font must be rendered from the tiny font storage format
- to the full display size and pixel depth. If this setting is defined, then
- the more recently used font glyphs will be retained in a cache of size
- CONFIG_NXCONSOLE_CACHESIZE. Default: No font caching.
CONFIG_NXCONSOLE_CACHESIZE
- If CONFIG_NXCONSOLE_FONTCACHE, then this setting will control the size
- of the font cache (in number of glyphs). Default: 16.
+ NxConsole supports caching of rendered fonts. This font caching is required
+ for two reasons: (1) First, it improves text performance, but more
+ importantly (2) it preserves the font memory. Since the NX server runs on
+ a separate server thread, it requires that the rendered font memory persist
+ until the server has a chance to render the font. Unfortunately, the font
+ cache would be quite large if all fonts were saved. The CONFIG_NXCONSOLE_CACHESIZE
+ setting will control the size of the font cache (in number of glyphs). Only that
+ number of the most recently used glyphs will be retained. Default: 16.
+ NOTE: There can still be a race condition between the NxConsole driver and the
+ NX task. If you every see character corruption (especially when printing
+ a lot of data or scrolling), then increasing the value of CONFIG_NXCONSOLE_CACHESIZE
+ is something that you should try. Alternatively, you can reduce the size of
+ CONFIG_MQ_MAXMSGSIZE which will force NxConsole task to pace the server task.
+ CONFIG_NXCONSOLE_CACHESIZE should be larger than ONFIG_MQ_MAXMSGSIZE in any event.
CONFIG_NXCONSOLE_LINESEPARATION
This the space (in rows) between each row of test. Default: 0
CONFIG_NXCONSOLE_NOWRAP
diff --git a/nuttx/graphics/nxconsole/nxcon_font.c b/nuttx/graphics/nxconsole/nxcon_font.c
index cb5320d257..2677b9c158 100644
--- a/nuttx/graphics/nxconsole/nxcon_font.c
+++ b/nuttx/graphics/nxconsole/nxcon_font.c
@@ -39,9 +39,12 @@
#include