Got some time to test, didn't do all of my targets quite yet since I hit some big issues. -1 from me unfortunately.
Here is the summary of my tested configurations:
- raspberrypi-pico-w:telnet - FAIL
- raspberrypi-pico-w:usbnsh - FAIL
- raspberrypi-pico-w:nsh-flash - PASS
- raspberrypi-pico-w:smp - PASS
- raspberrypi-pico:usbnsh - FAIL
- raspberrypi-pico:smp - PASS
- seeed-xiao-rp2040:userleds - FAIL
- seeed-xiao-rp2040:usbnsh - FAIL
- xiao-seeduino:nsh - PASS
Comments:
XIAO Seeduino board does not have an OSTest configuration.
raspberrypi-pico-w fails OSTest by hanging at waitpid test.
The telnet configuration fails to connect to my network and a scan causes a
panic.
elegoo-mega2560r3 does not have an OSTest configuration.
xiao-nrf52840 supports BLE and WiFi but doesn't have any configuration to
demonstrate it (this is not blocking for release but I will open an issue for
this).
esp32s3-xiao supports BLE and WiFi but has not configuration to demonstrate it
either. There is also no OSTest configuration. (Again, I don't think missing
configs are blocking for release but a TODO note for later). Also, the
documentation refers to the board identifier as xiao-esp32s3 incorrectly.
The seeed-xiao-rp2040 configurations I tested have the shell hang periodically.
The userled blinks properly but the shell hung after a few seconds. usbnsh fails
OSTest. There are also two undocumented configurations for this board which
should be remedied:
- seeed-xiao-rp2040:ws2812
- seeed-xiao-rp2040:gpio
esp32c3-xiao configuration still fails with the following error as I reported in
my issue a while ago. This issue occurs in the 3rd party HAL:
Espressif HAL for 3rd Party Platforms: cleaning current repository...
Espressif HAL for 3rd Party Platforms: e8d8638febf5310bf5b8f9bd04cf7fab9e9a4cb0
Espressif HAL for 3rd Party Platforms: initializing submodules...
Applying patches...
CC:
chip/esp-hal-3rdparty/components/log/src/log_level/tag_log_level/linked_list/log_lCC:
chip/esp-hal-3rdparty/components/efuse/src/efuse_controller/keys/with_key_purposesCC:
udp/udp_callback.c
chip/esp-hal-3rdparty/components/esp_hw_support/esp_gpio_reserve.c:13:47:
error: implicit declaration of function 'ATOMIC_VAR_INIT'; did you mean
'ATOMIC_FLAG_INIT'? [-Wimplicit-function-declaration]
13 | static _Atomic uint64_t s_reserved_pin_mask =
ATOMIC_VAR_INIT(~(SOC_GPIO_VALID_GPIO_MASK));
| ^~~~~~~~~~~~~~~
| ATOMIC_FLAG_INIT
chip/esp-hal-3rdparty/components/esp_hw_support/esp_gpio_reserve.c:13:47:
error: initializer element is not constant
CC:
chip/esp-hal-3rdparty/components/esp_hal_ana_conv/esp32c3/temperature_sensor_peripmake[1]:
*** [Makefile:144:
chip/esp-hal-3rdparty/components/esp_hw_support/esp_gpio_reserve.o] Error 1
make[1]: *** Waiting for unfinished jobs....
CC: stdio/lib_tmpnam.c make: *** [tools/LibTargets.mk:170:
arch/risc-v/src/libarch.a] Error 2
make: *** Waiting for unfinished jobs....
Below are my tested configurations and their full logs:
raspberrypi-pico-w:telnet
ABCE
telnetd [6:100]
NuttShell (NSH) NuttX-13.0.0
nsh> ls
/:
dev/
proc/
nsh> ls /dev
/dev:
console
null
telnet
ttyS0
zero
nsh> ifup wlan0
ifup wlan0...OK
nsh> ifconfig
lo Link encap:Local Loopback at RUNNING mtu 1518
inet addr:127.0.0.1 DRaddr:127.0.0.1 Mask:255.0.0.0
wlan0 Link encap:Ethernet HWaddr d8:3a:dd:fe:2f:c6 at UP mtu 576
inet addr:0.0.0.0 DRaddr:10.0.0.1 Mask:255.255.255.0
nsh> wapi essid wlan0 myssid 1
nsh> wapi psk wlan0 mypasswd 3
nsh> ifup wlan0
ifup wlan0...OK
nsh> renew wlan0
ERROR: netlib_obtain_ipv4addr() failed
nsh> help
help usage: help [-v] [<cmd>]
. cp expr mkdir rm true
[ cmp false mkrd rmdir truncate
? dirname fdinfo mount set uname
alias date free mv kill umount
unalias df help nslookup pkill unset
arp dmesg hexdump pidof sleep uptime
basename echo ifconfig printf usleep watch
break env ifdown ps source xd
cat exec ifup pwd test wait
cd exit ls reboot time
Builtin Apps:
dd getprime nsh ping sh telnetd
dumpstack hello ostest renew telnet wapi
nsh> renew wlan0
ERROR: netlib_obtain_ipv4addr() failed
nsh> wapi escan
Usage:
wapi show <ifname>
wapi scan <ifname>
wapi pscan <ifname>
wapi scan_results <ifname>
wapi ip <ifname> <IP address>
wapi mask <ifname> <mask>
wapi freq <ifname> <frequency> <index/flag>
wapi essid <ifname> <essid> <index/flag>
wapi psk <ifname> <passphrase> <index/flag> [wpa]
wapi disconnect <ifname>
wapi mode <ifname> <index/mode>
wapi ap <ifname> <MAC address>
wapi bitrate <ifname> <bitrate> <index/flag>
wapi txpower <ifname> <txpower> <index/flag>
wapi country <ifname> <country code>
wapi sense <ifname>
wapi pta_prio <ifname> <index/flag>
wapi power_save <ifname> <on|off>
wapi help
Frequency Flags:
[0] WAPI_FREQ_AUTO
[1] WAPI_FREQ_FIXED
ESSID Flags:
[0] WAPI_ESSID_OFF
[1] WAPI_ESSID_ON
[2] WAPI_ESSID_DELAY_ON
Passphrase algorithm Flags:
[0] WPA_ALG_NONE
[1] WPA_ALG_WEP
[2] WPA_ALG_TKIP
[3] WPA_ALG_CCMP
Passphrase WPA version:
[0] WPA_VER_NONE
[1] WPA_VER_1
[2] WPA_VER_2
[3] WPA_VER_3
Operating Modes:
[0] WAPI_MODE_AUTO
[1] WAPI_MODE_ADHOC
[2] WAPI_MODE_MANAGED
[3] WAPI_MODE_MASTER
[4] WAPI_MODE_REPEAT
[5] WAPI_MODE_SECOND
[6] WAPI_MODE_MONITOR
[7] WAPI_MODE_MESH
Bitrate Flags:
[0] WAPI_BITRATE_AUTO
[1] WAPI_BITRATE_FIXED
TX power Flags:
[0] WAPI_TXPOWER_DBM
[1] WAPI_TXPOWER_MWATT
[2] WAPI_TXPOWER_RELATIVE
pta prio Flags:
[0] WAPI_PTA_PRIORITY_COEX_MAXIMIZED
[1] WAPI_PTA_PRIORITY_COEX_HIGH
[2] WAPI_PTA_PRIORITY_BALANCED
[3] WAPI_PTA_PRIORITY_WLAN_HIGHD
[4] WAPI_PTA_PRIORITY_WLAN_MAXIMIZED
nsh> wapi scan wlan0
[ 5] dump_assert_info: Current Version: NuttX 13.0.0 2c18ee90cd Jun 30 2026
11:03:25 arm
[ 5] dump_assert_info: Assertion failed panic: at file: :0 task:
bcmf-gspi-thread process: Kernel 0x10021db5
[ 5] up_dump_register: R0: 00000178 R1: 2000e07a R2: 2000e07a R3: 00000178
[ 5] up_dump_register: R4: 000001aa R5: 00000000 R6: 2000e020 FP: 2001f228
[ 5] up_dump_register: R8: 00000000 SB: 00000000 SL: 00000000 R11: 00000000
[ 5] up_dump_register: IP: 00000000 SP: 2001f228 LR: 10022bf3 PC: 10022c08
[ 5] up_dump_register: xPSR: 21000000 PRIMASK: 00000000 CONTROL: 00000000
[ 5] up_dump_register: EXC_RETURN: fffffffd
[ 5] dump_stackinfo: User Stack:
[ 5] dump_stackinfo: base: 0x2001eb48
[ 5] dump_stackinfo: size: 00001984
[ 5] dump_stackinfo: sp: 0x2001f228
[ 5] stack_dump: 0x2001f208: 00000178 2000e07a 2000e07a 00000178 00000000
10022bf3 10022c08 21000000
[ 5] stack_dump: 0x2001f228: 2001dad0 00000008 00000000 00000001 00000000
00000000 00000000 10007200
[ 5] stack_dump: 0x2001f248: 00220809 50200020 2000e07a 2001db30 00620829
2000e062 00000000 2000e020
[ 5] stack_dump: 0x2001f268: 2001f270 10023e39 2001db30 000001c6 00000001
00000000 2000e020 2001dea8
[ 5] stack_dump: 0x2001f288: 2001f298 10022333 000001d8 2000e04c 2001f2a8
2000e04d 2001db30 2000e04c
[ 5] stack_dump: 0x2001f2a8: 4001610c 2001dad0 1000a2e1 2001dea8 2001f2c8
10021e4d 00000002 2001f2dc
[ 5] stack_dump: 0x2001f2c8: 00000000 0003b128 2001db30 00000000 00000000
00202020 00000002 00000002
[ 5] stack_dump: 0x2001f2e8: 10021db5 00000000 2001f2f8 1000328b 00000000
00000000 00000000 00000000
[ 5] stack_dump: 0x2001f308: 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000
[ 5] sched_dumpstack: backtrace| 5: 0x10029e46 0x10020622 0x10006f18 0x100026ee
0x10000e88 0x10002228 0x10000a86 0x10022c06
[ 5] sched_dumpstack: backtrace| 5: 0x10022bf0 0x10023e36 0x10022330 0x10021e4a
0x10003288
[ 5] dump_tasks: PID GROUP PRI POLICY TYPE NPX STATE EVENT
SIGMASK STACKBASE STACKSIZE USED FILLED COMMAND
[ 5] dump_tasks: ---- --- --- -------- ------- --- ------- ----------
---------------- 0x20000fd8 2048 984 48.0% irq
[ 5] dump_task: 0 0 0 FIFO Kthread - Ready
0000000000000000 0x2001b6b8 1000 512 51.2% Idle_Task
[ 5] dump_task: 1 0 224 RR Kthread - Waiting Semaphore
0000000000000000 0x2001c030 1976 264 13.3% hpwork 0x200001e0
0x20000230
[ 5] dump_task: 2 0 100 RR Kthread - Waiting Semaphore
0000000000000000 0x2001c918 1976 264 13.3% lpwork 0x20000170
0x200001c0
[ 5] dump_task: 4 4 100 RR Task - Waiting Semaphore
0000000000000000 0x2001e328 2000 1376 68.8% nsh_main
[ 5] dump_task: 5 0 224 RR Kthread - Running
0000000000000000 0x2001eb48 1984 592 29.8% bcmf-gspi-thread
0x2001db30
[ 5] dump_task: 6 6 100 RR Task - Waiting Semaphore
0000000000000000 0x2001f5f8 2008 592 29.4% telnetd
[ 5] dump_task: 12 12 100 RR Task - Waiting Signal
0000000000000000 0x200200f0 1992 1232 61.8% wapi scan wlan0
[ 5] sched_dumpstack: backtrace| 0: 0x10009acc 0x100020a0 0x10000224 0x17fffffe
[ 5] sched_dumpstack: backtrace| 1: 0x10020794 0x10004f56 0x1000710a 0x10007164
0x100034fa 0x10003288
[ 5] sched_dumpstack: backtrace| 2: 0x10020794 0x10004f56 0x1000710a 0x10007164
0x100034fa 0x10003288
[ 5] sched_dumpstack: backtrace| 4: 0x10020794 0x10004f56 0x1000710a 0x10020594
0x100205a2 0x1000eb64 0x1000c61e 0x1000d3aa
[ 5] sched_dumpstack: backtrace| 4: 0x1000d462 0x1000b4de 0x1000b3bc 0x1000b380
0x10006fac 0x10003294
[ 5] sched_dumpstack: backtrace| 5: 0x10029e46 0x10020622 0x10006f18 0x100023a8
0x100029d0 0x1000276c 0x10000e88 0x10002228
[ 5] sched_dumpstack: backtrace| 5: 0x10000a86 0x10022c06 0x10022bf0 0x10023e36
0x10022330 0x10021e4a 0x10003288
[ 5] sched_dumpstack: backtrace| 6: 0x10020794 0x10004f56 0x1000710a 0x10016dd0
0x1003439e 0x1003321a 0x10036164 0x100365e8
[ 5] sched_dumpstack: backtrace| 6: 0x10032c54 0x1003055e 0x10006fac 0x10003294
[ 5] sched_dumpstack: backtrace|12: 0x1006e4ce 0x10004f56 0x1006e356 0x100274a0
0x100301a6 0x1003024a 0x100304e4 0x10006fac
[ 5] sched_dumpstack: backtrace|12: 0x10003294
raspberrypi-pico-w:usbnsh
NuttShell (NSH) NuttX-13.0.0
nsh>
nsh> ls
/:
dev/
proc/
nsh> help
help usage: help [-v] [<cmd>]
. cp exit mkrd rmdir truncate
kill uname
alias date fdinfo pidof pkill umount
unalias df free printf sleep unset
basename dmesg help ps usleep uptime
break echo hexdump pwd source watch
cat env ls reboot test xd
cd exec mkdir rm time wait
Builtin Apps:
dd getprime hello nsh ostest sh
nsh> ostest
stdio_test: write fd=1
stdio_test: Standard I/O Check: printf
fd=2
stdio_test: Standard I/O Check: fprintf to stderr
ostest_main: putenv(Variable1=BadValue3)
ostest_main: setenv(Variable1, GoodValue1, TRUE)
ostest_main: setenv(Variable2, BadValue1, FALSE)
ostest_main: setenv(Variable2, GoodValue2, TRUE)
ostest_main: setenv(Variable3, GoodValue3, FALSE)
ostest_main: setenv(Variable3, BadValue2, FALSE)
show_variable: Variable=Variable1 has value=GoodValue1
show_variable: Variable=Variable2 has value=GoodValue2
show_variable: Variable=Variable3 has value=GoodValue3
ostest_main: Started user_main at PID=4
user_main: Begin argument test
user_main: Started with argc=5
user_main: argv[0]="ostest"
user_main: argv[1]="Arg1"
user_main: argv[2]="Arg2"
user_main: argv[3]="Arg3"
user_main: argv[4]="Arg4"
age:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3f960 3f960
ordblks 1 1
mxordblk 3a988 3a988
uordblks 4fd8 4fd8
fordblks 3a988 3a988
user_main: getopt() test
getopt(): Simple test
getopt(): Invalid argument
getopt(): Missing optional argument
getopt_long(): Simple test
getopt_long(): No short options
getopt_long(): Argument for --option=argument
getopt_long(): Invalid long option
getopt_long(): Mixed long and short options
getopt_long(): Invalid short option
getopt_long(): Missing optional arguments
getopt_long_only(): Mixed long and short options
getopt_long_only(): Single hyphen long options
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3f960 3f960
ordblks 1 1
mxordblk 3a988 3a988
uordblks 4fd8 4fd8
fordblks 3a988 3a988
user_main: libc tests
test memory usage:
LE BEFORE======== ======== ========
arena 3f960 3f960
ordblks 1 1
mxordblk 3a988 3a988
uordblks 4fd8 4fd8
fordblks 3a988 3a988
show_variable: Variable=Variable1 has value=GoodValue1
show_variable: Variable=Variable2 has value=GoodValue2
show_variable: Variable=Variable3 has value=GoodValue3
show_variable: Variable=Variable1 has no value
show_variable: Variable=Variable2 has value=GoodValue2
show_variable: Variable=Variable3 has value=GoodValue3
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3f960 3f960
ordblks 1 2
mxordblk 3a988 3a988
uordblks 4fd8 4fb8
fordblks 3a988 3a9a8
show_variable: Variable=Variable1 has no value
show_variable: Variable=Variable2 has no value
show_variable: Variable=Variable3 has no value
End of test memory usage:
VARIABLE BEFORE AFTER
arena 3f960 3f960
ordblks 2 2
mxordblk 3a988 3a988
uordblks 4fb8 4f40
fordblks 3a9a8 3aa20
user_main: setvbuf test
setvbuf_test: Test NO buffering
setvbuf_test: Using NO buffering
setvbuf_test: Test default FULL buffering
setvbuf_test: Using default FULL buffering
setvbuf_test: Test FULL buffering, buffer size 64
setvbuf_test: Using FULL buffering, buffer size 64
setvbuf_test: Test FULL buffering, pre-allocated buffer
setvbuf_test: Using FULL buffering, pre-allocated buffer
setvbuf_test: Test LINE buffering, buffer size 64
setvbuf_test: Using LINE buffering, buffer size 64
setvbuf_test: Test FULL buffering, pre-allocated buffer
setvbuf_test: Using FULL buffering, pre-allocated buffer
End of test memory usage:
VARIABLE BEFORE AFTER
====
arena 3f960 3f960
ordblks 2 2
mxordblk 3a988 3a988
uordblks 4f40 4f40
fordblks 3aa20 3aa20
user_main: /dev/null test
dev_null: Read 0 bytes from /dev/null
dev_null: Wrote 1024 bytes to /dev/null
End of test memory usage:
VARIABLE BEFORE AFTER
== ======== ========
arena 3f960 3f960
ordblks 2 2
mxordblk 3a988 3a988
uordblks 4f40 4f40
fordblks 3aa20 3aa20
user_main: task_restart test
Test task_restart()
restart_main: setenv(VarName, VarValue, TRUE)
restart_main: Started restart_main at PID=5
restart_main: Started with argc=4
restart_main: argv[0]="ostest"
restart_main: argv[1]="This is argument 1"
restart_main: argv[2]="Argument 2 here"
restart_main: argv[3]="Lastly, the 3rd argument"
restart_main: Variable=VarName has value=VarValue
restart_main: I am still here
restart_main: I am still here
restart_main: Started restart_main at PID=5
restart_main: Started with argc=4
restart_main: argv[0]="ostest"
restart_main: argv[1]="This is argument 1"
restart_main: argv[2]="Argument 2 here"
restart_main: argv[3]="Lastly, the 3rd argument"
restart_main: Variable=VarName has value=VarValue
restart_main: Started with argc=4
restart_main: argv[0]="ostest"
restart_main: argv[1]="This is argument 1"
restart_main: argv[2]="Argument 2 here"
restart_main: argv[3]="Lastly, the 3rd argument"
restart_main: Variable=VarName has value=VarValue
restart_main: Exiting
End of test memory usage:
VARIABLE BEFORE AFTER
=
arena 3f960 3f960
ordblks 2 2
mxordblk 3a988 3a988
uordblks 4f40 4f78
fordblks 3aa20 3a9e8
ser_main: waitpid test
raspberrypi-pico-w:nsh-flash
NuttShell (NSH) NuttX-13.0.0
nsh> ls
/:
dev/
flash/
proc/
nsh> ls flash
/flash:
test
nsh> cat flash/test
Hello, world!
nsh> help
help usage: help [-v] [<cmd>]
. cmp false mv pkill unset
[ dirname fdinfo pidof sleep uptime
? date free printf usleep watch
alias df help ps source xd
unalias dmesg hexdump pwd test wait
basename echo ls reboot time
break env mkdir rm true
cat exec mkrd rmdir truncate
cd exit mksmartfs set uname
cp expr mount kill umount
Builtin Apps:
dd hello ostest smart_test
getprime nsh sh
nsh> smart_test
usage: smart_test [-c COUNT] [-s SEEKCOUNT] [-w WRITECOUNT]
smart_mounted_filename
DESCRIPTION
Conducts various stress tests to validate SMARTFS operation.
Please choose one or more of -c, -s, or -w to conduct tests.
OPTIONS
-c COUNT
Performs a circular log style test where a fixed number of fixed
length records are written and then overwritten with new data.
Uses the -r, -e and -t options to specify the parameters of the
record geometry and update operation. The COUNT parameter sets
the number of record updates to perform.
-s SEEKCOUNT
Performs a simple seek test where to validate the SMARTFS seek
operation. Uses the -l option to specify the number of test
lines to write to the test file. The SEEKCOUNT parameter sets
the number of seek/read operations to perform.
-w WRITECOUNT
Performs a seek/write/seek/read test where to validate the SMARTFS
seek/write operation. Uses the -l option to specify the number of
test lines to write to the test file. The WRITECOUNT parameter sets
the number of seek/write operations to perform.
-l LINECOUNT
Sets the number of lines of test data to write to the test file
during seek and seek/write tests.
-r RECORDLEN
Sets the length of each log record during circular log tests.
-e ERASECOUNT
Sets the erase granularity for overwriting old circular log entries.
Setting this value to 16, for instance, would cause every 16th record
update to write a single record followed by 15 records with all 0xFF
content. This helps SMARTFS perform better wear leveling and reduces
the number of FLASH block erases significantly.
-t TOTALRECORDS
Sets the total number of records in the circular log test file.
nsh> smart_test flash/flash
usage: smart_test [-c COUNT] [-s SEEKCOUNT] [-w WRITECOUNT]
smart_mounted_filename
DESCRIPTION
Conducts various stress tests to validate SMARTFS operation.
Please choose one or more of -c, -s, or -w to conduct tests.
OPTIONS
-c COUNT
Performs a circular log style test where a fixed number of fixed
length records are written and then overwritten with new data.
Uses the -r, -e and -t options to specify the parameters of the
record geometry and update operation. The COUNT parameter sets
the number of record updates to perform.
-s SEEKCOUNT
Performs a simple seek test where to validate the SMARTFS seek
operation. Uses the -l option to specify the number of test
lines to write to the test file. The SEEKCOUNT parameter sets
the number of seek/read operations to perform.
-w WRITECOUNT
Performs a seek/write/seek/read test where to validate the SMARTFS
seek/write operation. Uses the -l option to specify the number of
test lines to write to the test file. The WRITECOUNT parameter sets
the number of seek/write operations to perform.
-l LINECOUNT
Sets the number of lines of test data to write to the test file
during seek and seek/write tests.
-r RECORDLEN
Sets the length of each log record during circular log tests.
-e ERASECOUNT
Sets the erase granularity for overwriting old circular log entries.
Setting this value to 16, for instance, would cause every 16th record
update to write a single record followed by 15 records with all 0xFF
content. This helps SMARTFS perform better wear leveling and reduces
the number of FLASH block erases significantly.
-t TOTALRECORDS
Sets the total number of records in the circular log test file.
nsh> smart_test /flash./flash
usage: smart_test [-c COUNT] [-s SEEKCOUNT] [-w WRITECOUNT]
smart_mounted_filename
DESCRIPTION
Conducts various stress tests to validate SMARTFS operation.
Please choose one or more of -c, -s, or -w to conduct tests.
OPTIONS
-c COUNT
Performs a circular log style test where a fixed number of fixed
length records are written and then overwritten with new data.
Uses the -r, -e and -t options to specify the parameters of the
record geometry and update operation. The COUNT parameter sets
the number of record updates to perform.
-s SEEKCOUNT
Performs a simple seek test where to validate the SMARTFS seek
operation. Uses the -l option to specify the number of test
lines to write to the test file. The SEEKCOUNT parameter sets
the number of seek/read operations to perform.
-w WRITECOUNT
Performs a seek/write/seek/read test where to validate the SMARTFS
seek/write operation. Uses the -l option to specify the number of
test lines to write to the test file. The WRITECOUNT parameter sets
the number of seek/write operations to perform.
-l LINECOUNT
Sets the number of lines of test data to write to the test file
during seek and seek/write tests.
-r RECORDLEN
Sets the length of each log record during circular log tests.
-e ERASECOUNT
Sets the erase granularity for overwriting old circular log entries.
Setting this value to 16, for instance, would cause every 16th record
update to write a single record followed by 15 records with all 0xFF
content. This helps SMARTFS perform better wear leveling and reduces
the number of FLASH block erases significantly.
-t TOTALRECORDS
Sets the total number of records in the circular log test file.
nsh> smart_test ./flashsmart_test ./flash;5D-c 10
./flash
Unable to create file ./flash
nsh> smart_test -c 10 ./flash/flash
Unable to create file /flash
nsh> smart_test -c 10 /flashsh/test
Creating circular log with 40000 records
Performing 10 circular log record update tests
0123456789
Pass
nsh>
raspberrypi-pico-w:smp
NuttShell (NSH) NuttX-13.0.0
nsh> help
help usage: help [-v] [<cmd>]
. cp exit mkrd rmdir true
[ cmp expr mount set truncate
? dirname false mv kill uname
alias date fdinfo pidof pkill umount
unalias df free printf sleep unset
basename dmesg help ps usleep uptime
break echo hexdump pwd source watch
cat env ls reboot test xd
cd exec mkdir rm time wait
Builtin Apps:
dd hello ostest smp
getprime nsh sh taskset
nsh> getprime 4
Set thread priority to 10
Set thread policy to SCHED_RR
Start thread #0
Start thread #1
thread #0 started, looking for primes < 10000, doing 10 run(s)
Start thread #2
thread #1 started, looking for primes < 10000, doing 10 run(s)
Start thread #3
thread #2 started, looking for primes < 10000, doing 10 run(s)
thread #3 started, looking for primes < 10000, doing 10 run(s)
thread #2 finished, found 1230 primes, last one was 9973
thread #0 finished, found 1230 primes, last one was 9973
thread #1 finished, found 1230 primes, last one was 9973
thread #3 finished, found 1230 primes, last one was 9973
Done
getprime took 68970 msec
nsh> smp
Main[0]: Running on CPU1
Main[0]: Initializing barrier
Main[0]: Thread 1 created
Thread[1]: Started
Main[0]: Thread 2 created
Thread[2]: Started
Thread[1]: Running on CPU0
Main[0]: Thread 3 created
Thread[3]: Started
Thread[2]: Running on CPU0
Main[0]: Now running on CPU0
Thread[3]: Running on CPU0
Main[0]: Thread 4 created
Thread[2]: Now running on CPU1
Thread[4]: Started
Main[0]: Thread 5 created
Thread[5]: Started
Thread[4]: Running on CPU1
Main[0]: Now running on CPU1
Thread[3]: Now running on CPU1
Thread[5]: Running on CPU0
Thread[2]: Now running on CPU0
Main[0]: Thread 6 created
Thread[6]: Started
Thread[1]: Now running on CPU1
Thread[4]: Now running on CPU0
Thread[5]: Now running on CPU1
Main[0]: Now running on CPU0
Thread[6]: Running on CPU1
Thread[2]: Now running on CPU1
Thread[3]: Now running on CPU0
Thread[1]: Now running on CPU0
Main[0]: Thread 7 created
Thread[7]: Started
Thread[4]: Now running on CPU1
Thread[2]: Now running on CPU0
Thread[5]: Now running on CPU0
Thread[3]: Now running on CPU1
Main[0]: Thread 8 created
Thread[7]: Running on CPU0
Thread[8]: Started
Thread[6]: Now running on CPU0
Thread[1]: Now running on CPU1
Main[0]: Now running on CPU1
Thread[5]: Now running on CPU1
Thread[8]: Running on CPU1
Thread[7]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[3]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[1]: Now running on CPU0
Thread[5]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[6]: Now running on CPU1
Thread[7]: Now running on CPU0
Thread[3]: Now running on CPU1
Thread[1]: Now running on CPU1
Thread[2]: Now running on CPU0
Thread[4]: Now running on CPU1
Thread[5]: Now running on CPU1
Thread[2]: Calling pthread_barrier_wait()
Thread[3]: Now running on CPU0
Thread[7]: Now running on CPU1
Thread[1]: Calling pthread_barrier_wait()
Thread[8]: Now running on CPU1
Thread[6]: Now running on CPU0
Thread[3]: Calling pthread_barrier_wait()
Thread[4]: Now running on CPU0
Thread[7]: Now running on CPU0
Thread[5]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Calling pthread_barrier_wait()
Thread[1]: Now running on CPU0
Thread[3]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[7]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[5]: Now running on CPU1
Thread[6]: Now running on CPU0
Thread[7]: Now running on CPU0
Thread[5]: Calling pthread_barrier_wait()
Thread[6]: Calling pthread_barrier_wait()
Thread[5]: Now running on CPU0
Thread[6]: Now running on CPU1
Thread[7]: Calling pthread_barrier_wait()
Thread[8]: Calling pthread_barrier_wait()
Thread[2]: Back with ret=0 (I am not special)
Thread[8]: Back with ret=PTHREAD_BARRIER_SERIAL_THREAD (I AM SPECIAL)
Thread[1]: Back with ret=0 (I am not special)
Thread[3]: Back with ret=0 (I am not special)
Thread[4]: Back with ret=0 (I am not special)
Thread[5]: Back with ret=0 (I am not special)
Thread[6]: Back with ret=0 (I am not special)
Thread[7]: Back with ret=0 (I am not special)
Thread[2]: Now running on CPU1
Thread[8]: Now running on CPU0
Thread[1]: Now running on CPU1
Thread[3]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[5]: Now running on CPU1
Thread[7]: Now running on CPU1
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU1
Thread[3]: Now running on CPU1
Thread[1]: Now running on CPU0
Thread[7]: Now running on CPU0
Thread[4]: Now running on CPU1
Thread[5]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU1
Thread[1]: Now running on CPU1
Thread[3]: Now running on CPU0
Thread[7]: Now running on CPU1
Thread[4]: Now running on CPU0
Thread[5]: Now running on CPU1
Thread[1]: Now running on CPU0
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU0
Thread[7]: Now running on CPU0
Thread[4]: Now running on CPU1
Thread[3]: Now running on CPU1
Thread[8]: Now running on CPU0
Thread[1]: Now running on CPU1
Thread[5]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[7]: Now running on CPU1
Thread[4]: Now running on CPU0
Thread[1]: Now running on CPU0
Thread[3]: Now running on CPU0
Thread[8]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[5]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[3]: Now running on CPU1
Thread[6]: Done
Thread[4]: Now running on CPU1
Thread[8]: Done
Thread[7]: Now running on CPU0
Thread[5]: Now running on CPU0
Thread[2]: Done
Thread[3]: Now running on CPU0
Thread[1]: Now running on CPU1
Thread[6]: Now running on CPU0
Thread[4]: Done
Thread[7]: Now running on CPU1
Thread[1]: Done
Thread[5]: Done
Thread[2]: Now running on CPU0
Thread[7]: Done
Thread[4]: Now running on CPU0
Thread[1]: Now running on CPU0
Thread[7]: Now running on CPU0
Main[0]: Now running on CPU0
Main[0]: Thread 1 completed with result=0
Main[0]: Thread 2 completed with result=0
Thread[3]: Now running on CPU1
Thread[3]: Done
Main[0]: Thread 3 completed with result=0
Main[0]: Thread 4 completed with result=0
Main[0]: Thread 5 completed with result=0
Main[0]: Thread 6 completed with result=0
Main[0]: Thread 7 completed with result=0
Main[0]: Thread 8 completed with result=0
nsh> ostest
stdio_test: write fd=1
stdio_test: Standard I/O Check: printf
stdio_test: write fd=2
stdio_test: Standard I/O Check: fprintf to stderr
ostest_main: putenv(Variable1=BadValue3)
ostest_main: setenv(Variable1, GoodValue1, TRUE)
ostest_main: setenv(Variable2, BadValue1, FALSE)
ostest_main: setenv(Variable2, GoodValue2, TRUE)
ostest_main: setenv(Variable3, GoodValue3, FALSE)
ostest_main: setenv(Variable3, BadValue2, FALSE)
show_variable: Variable=Variable1 has value=GoodValue1
show_variable: Variable=Variable2 has value=GoodValue2
show_variable: Variable=Variable3 has value=GoodValue3
ostest_main: Started user_main at PID=22
user_main: Begin argument test
user_main: Started with argc=5
user_main: argv[0]="ostest"
user_main: argv[1]="Arg1"
user_main: argv[2]="Arg2"
user_main: argv[3]="Arg3"
user_main: argv[4]="Arg4"
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 1 1
mxordblk 3a000 3a000
uordblks 4964 4964
fordblks 3a000 3a000
user_main: getopt() test
getopt(): Simple test
getopt(): Invalid argument
getopt(): Missing optional argument
getopt_long(): Simple test
getopt_long(): No short options
getopt_long(): Argument for --option=argument
getopt_long(): Invalid long option
getopt_long(): Mixed long and short options
getopt_long(): Invalid short option
getopt_long(): Missing optional arguments
getopt_long_only(): Mixed long and short options
getopt_long_only(): Single hyphen long options
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 1 1
mxordblk 3a000 3a000
uordblks 4964 4964
fordblks 3a000 3a000
user_main: libc tests
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 1 1
mxordblk 3a000 3a000
uordblks 4964 4964
fordblks 3a000 3a000
show_variable: Variable=Variable1 has value=GoodValue1
show_variable: Variable=Variable2 has value=GoodValue2
show_variable: Variable=Variable3 has value=GoodValue3
show_variable: Variable=Variable1 has no value
show_variable: Variable=Variable2 has value=GoodValue2
show_variable: Variable=Variable3 has value=GoodValue3
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 1 2
mxordblk 3a000 3a000
uordblks 4964 4944
fordblks 3a000 3a020
show_variable: Variable=Variable1 has no value
show_variable: Variable=Variable2 has no value
show_variable: Variable=Variable3 has no value
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 2 2
mxordblk 3a000 3a000
uordblks 4944 48cc
fordblks 3a020 3a098
user_main: setvbuf test
setvbuf_test: Test NO buffering
setvbuf_test: Using NO buffering
setvbuf_test: Test default FULL buffering
setvbuf_test: Using default FULL buffering
setvbuf_test: Test FULL buffering, buffer size 64
setvbuf_test: Using FULL buffering, buffer size 64
setvbuf_test: Test FULL buffering, pre-allocated buffer
setvbuf_test: Using FULL buffering, pre-allocated buffer
setvbuf_test: Test LINE buffering, buffer size 64
setvbuf_test: Using LINE buffering, buffer size 64
setvbuf_test: Test FULL buffering, pre-allocated buffer
setvbuf_test: Using FULL buffering, pre-allocated buffer
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 2 2
mxordblk 3a000 3a000
uordblks 48cc 48cc
fordblks 3a098 3a098
user_main: /dev/null test
dev_null: Read 0 bytes from /dev/null
dev_null: Wrote 1024 bytes to /dev/null
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 2 2
mxordblk 3a000 3a000
uordblks 48cc 48cc
fordblks 3a098 3a098
user_main: task_restart test
Test task_restart()
restart_main: setenv(VarName, VarValue, TRUE)
restart_main: Started with argc=4
restart_main: Started restart_main at PID=23
restart_main: argv[0]="ostest"
restart_main: argv[1]="This is argument 1"
restart_main: argv[2]="Argument 2 here"
restart_main: argv[3]="Lastly, the 3rd argument"
restart_main: Variable=VarName has value=VarValue
restart_main: I am still here
restart_main: I am still here
restart_main: Started with argc=4
restart_main: Started restart_main at PID=23
restart_main: argv[0]="ostest"
restart_main: argv[1]="This is argument 1"
restart_main: argv[2]="Argument 2 here"
restart_main: argv[3]="Lastly, the 3rd argument"
restart_main: Variable=VarName has value=VarValue
restart_main: Started with argc=4
restart_main: argv[0]="ostest"
restart_main: argv[1]="This is argument 1"
restart_main: argv[2]="Argument 2 here"
restart_main: argv[3]="Lastly, the 3rd argument"
restart_main: Variable=VarName has value=VarValue
restart_main: Exiting
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 2 2
mxordblk 3a000 3a000
uordblks 48cc 4904
fordblks 3a098 3a060
user_main: waitpid test
Test waitpid()
waitpid_main: PID 24 Started
waitpid_start_child: Started waitpid_main at PID=24
waitpid_main: PID 25 Started
waitpid_start_child: Started waitpid_main at PID=25
waitpid_main: PID 26 Started
waitpid_start_child: Started waitpid_main at PID=26
waitpid_test: Waiting for PID=24 with waitpid()
waitpid_main: PID 24 exitting with result=14
waitpid_main: PID 25 exitting with result=14
waitpid_test: PID 24 waitpid succeeded with stat_loc=0e00
waitpid_last: Waiting for PID=26 with waitpid()
waitpid_main: PID 26 exitting with result=14
waitpid_last: PASS: PID 26 waitpid succeeded with stat_loc=0e00
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 2 4
mxordblk 3a000 358e8
uordblks 4904 69e4
fordblks 3a060 37f80
user_main: mutex test
Initializing mutex
Starting thread 1
Starting thread 2
Thread1 Thread2
Loops 32 32
Errors 0 0
Testing moved mutex
Starting moved mutex thread 1
Starting moved mutex thread 2
Thread1 Thread2
Moved Loops 32 32
Moved Errors 0 0
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 4 4
mxordblk 358e8 37908
uordblks 69e4 5ad4
fordblks 37f80 38e90
user_main: timed mutex test
mutex_test: Initializing mutex
mutex_test: Starting thread
pthread: Started
pthread: Waiting for lock or timeout
mutex_test: Unlocking
pthread: Got the lock
pthread: Waiting for lock or timeout
pthread: Got the timeout. Terminating
mutex_test: PASSED
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 4 4
mxordblk 37908 37908
uordblks 5ad4 5ad4
fordblks 38e90 38e90
user_main: cancel test
cancel_test: Test 1a: Normal Cancellation
cancel_test: Starting thread
start_thread: Initializing mutex
start_thread: Initializing cond
start_thread: Starting thread
start_thread: Yielding
sem_waiter: Taking mutex
sem_waiter: Starting wait for condition
cancel_test: Canceling thread
cancel_test: Joining
cancel_test: waiter exited with result=0xffffffff
cancel_test: PASS thread terminated with PTHREAD_CANCELED
cancel_test: Test 2: Asynchronous Cancellation
... Skipped
cancel_test: Test 3: Cancellation of detached thread
cancel_test: Re-starting thread
restart_thread: Destroying cond
restart_thread: Destroying mutex
restart_thread: Re-starting thread
start_thread: Initializing mutex
start_thread: Initializing cond
start_thread: Starting thread
start_thread: Yielding
sem_waiter: Taking mutex
sem_waiter: Starting wait for condition
cancel_test: Canceling thread
cancel_test: Joining
cancel_test: PASS pthread_join failed with status=ESRCH
cancel_test: Test 5: Non-cancelable threads
cancel_test: Re-starting thread (non-cancelable)
restart_thread: Destroying cond
restart_thread: Destroying mutex
restart_thread: Re-starting thread
start_thread: Initializing mutex
start_thread: Initializing cond
start_thread: Starting thread
start_thread: Yielding
sem_waiter: Taking mutex
sem_waiter: Starting wait for condition
sem_waiter: Setting non-cancelable
cancel_test: Canceling thread
cancel_test: Joining
sem_waiter: Releasing mutex
sem_waiter: Setting cancelable
cancel_test: waiter exited with result=0xffffffff
cancel_test: PASS thread terminated with PTHREAD_CANCELED
cancel_test: Test 6: Cancel message queue wait
cancel_test: Starting thread (cancelable)
Skipped
cancel_test: Test 7: Cancel signal wait
cancel_test: Starting thread (cancelable)
Skipped
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 4 4
mxordblk 37908 35900
uordblks 5ad4 7bbc
fordblks 38e90 36da8
user_main: robust test
robust_test: Initializing mutex
robust_test: Starting thread
robust_waiter: Taking mutex
robust_waiter: Exiting with mutex
robust_test: Take the lock again
robust_test: Make the mutex consistent again.
robust_test: Take the lock again
robust_test: Joining
robust_test: waiter exited with result=0
robust_test: Test complete with nerrors=0
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 4 4
mxordblk 35900 35900
uordblks 7bbc 7bbc
fordblks 36da8 36da8
user_main: semaphore test
sem_test: Initializing semaphore to 0
sem_test: Starting waiter thread 1
sem_test: Set thread 1 priority to 191
sem_test: Starting waiter thread 2
waiter_func: Thread 1 Started
sem_test: Set thread 2 priority to 128
waiter_func: Thread 1 initial semaphore value = 0
waiter_func: Thread 2 Started
waiter_func: Thread 1 waiting on semaphore
waiter_func: Thread 2 initial semaphore value = 0
waiter_func: Thread 2 waiting on semaphore
sem_test: Starting poster thread 3
sem_test: Set thread 3 priority to 64
poster_func: Thread 3 started
poster_func: Thread 3 semaphore value = -2
poster_func: Thread 3 posting semaphore
waiter_func: Thread 1 awakened
poster_func: Thread 3 new semaphore value = -1
waiter_func: Thread 1 new semaphore value = -1
poster_func: Thread 3 semaphore value = -1
waiter_func: Thread 1 done
poster_func: Thread 3 posting semaphore
waiter_func: Thread 2 awakened
poster_func: Thread 3 new semaphore value = 0
waiter_func: Thread 2 new semaphore value = 0
poster_func: Thread 3 done
waiter_func: Thread 2 done
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 4 4
mxordblk 35900 35900
uordblks 7bbc 7bbc
fordblks 36da8 36da8
user_main: timed semaphore test
semtimed_test: Initializing semaphore to 0
semtimed_test: Waiting for two second timeout
semtimed_test: PASS: first test returned timeout
BEFORE: (1612829054 sec, 400000000 nsec)
AFTER: (1612829056 sec, 400000000 nsec)
semtimed_test: Starting poster thread
semtimed_test: Set thread 1 priority to 191
semtimed_test: Starting poster thread 3
semtimed_test: Set thread 3 priority to 64
poster_func: Waiting for 1 second
semtimed_test: Waiting for two second timeout
poster_func: Posting
semtimed_test: PASS: sem_timedwait succeeded
BEFORE: (1612829056 sec, 400000000 nsec)
AFTER: (1612829057 sec, 410000000 nsec)
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 4 4
mxordblk 35900 35900
uordblks 7bbc 7bbc
fordblks 36da8 36da8
user_main: condition variable test
cond_test: Initializing mutex
cond_test: Initializing cond
cond_test: Starting waiter
cond_test: Set thread 1 priority to 128
waiter_thread: Started
cond_test: Starting signaler
cond_test: Set thread 2 priority to 64
thread_signaler: Started
thread_signaler: Terminating
cond_test: signaler terminated, now cancel the waiter
cond_test: Waiter Signaler
cond_test: Loops 32 32
cond_test: Errors 0 0
cond_test:
cond_test: 0 times, waiter did not have to wait for data
cond_test: 0 times, data was already available when the signaler run
cond_test: 0 times, the waiter was in an unexpected state when the signaler rn
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 4 4
mxordblk 35900 35900
uordblks 7bbc 7bbc
fordblks 36da8 36da8
user_main: pthread_exit() test
pthread_exit_test: Started pthread_exit_main at PID=47
pthread_exit_main 47: Starting pthread_exit_thread
pthread_exit_main 47: Sleeping for 5 seconds
pthread_exit_thread 50: Sleeping for 10 second
pthread_exit_thread 50: Still running...
pthread_exit_main 47: Calling pthread_exit()
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 4 4
mxordblk 35900 338f8
uordblks 7bbc a58c
fordblks 36da8 343d8
user_main: pthread_rwlock test
pthread_rwlock: Initializing rwlock
pthread_exit_thread 50: Exiting
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 4 3
mxordblk 338f8 38708
uordblks a58c 51fc
fordblks 343d8 39768
user_main: pthread_rwlock_cancel test
pthread_rwlock_cancel: Starting test
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 3 3
mxordblk 38708 38708
uordblks 51fc 51fc
fordblks 39768 39768
user_main: timed wait test
thread_waiter: Initializing mutex
timedwait_test: Initializing cond
timedwait_test: Starting waiter
timedwait_test: Set thread 2 priority to 177
timedwait_test: Joining
thread_waiter: Taking mutex
thread_waiter: Starting 5 second wait for condition
thread_waiter: pthread_cond_timedwait timed out
thread_waiter: Releasing mutex
thread_waiter: Exit with status 0x12345678
timedwait_test: waiter exited with result=0x12345678
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 3 3
mxordblk 38708 38708
uordblks 51fc 51fc
fordblks 39768 39768
user_main: timed message queue test
timedmqueue_test: Starting sender
timedmqueue_test: Waiting for sender to complete
sender_thread: Starting
sender_thread: mq_timedsend succeeded on msg 0
sender_thread: mq_timedsend succeeded on msg 1
sender_thread: mq_timedsend succeeded on msg 2
sender_thread: mq_timedsend succeeded on msg 3
sender_thread: mq_timedsend succeeded on msg 4
sender_thread: mq_timedsend succeeded on msg 5
sender_thread: mq_timedsend succeeded on msg 6
sender_thread: mq_timedsend succeeded on msg 7
sender_thread: mq_timedsend succeeded on msg 8
sender_thread: mq_timedsend 9 timed out as expected
sender_thread: returning nerrors=0
timedmqueue_test: Starting receiver
timedmqueue_test: Waiting for receiver to complete
receiver_thread: Starting
receiver_thread: mq_timedreceive succeed on msg 0
receiver_thread: mq_timedreceive succeed on msg 1
receiver_thread: mq_timedreceive succeed on msg 2
receiver_thread: mq_timedreceive succeed on msg 3
receiver_thread: mq_timedreceive succeed on msg 4
receiver_thread: mq_timedreceive succeed on msg 5
receiver_thread: mq_timedreceive succeed on msg 6
receiver_thread: mq_timedreceive succeed on msg 7
receiver_thread: mq_timedreceive succeed on msg 8
receiver_thread: Receive 9 timed out as expected
receiver_thread: returning nerrors=0
timedmqueue_test: Test complete
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 3 3
mxordblk 38708 39ee8
uordblks 51fc 4984
fordblks 39768 39fe0
user_main: sigprocmask test
sigprocmask_test: SUCCESS
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 3 3
mxordblk 39ee8 39ee8
uordblks 4984 4984
fordblks 39fe0 39fe0
user_main: message queue test
mqueue_test: Starting receiver
mqueue_test: Set receiver priority to 128
mqueue_test: Starting sender
receiver_thread: Starting
mqueue_test: Set sender thread priority to 64
mqueue_test: Waiting for sender to complete
sender_thread: Starting
sender_thread: mq_send succeeded on msg 0
receiver_thread: mq_receive succeeded on msg 0
sender_thread: mq_send succeeded on msg 1
receiver_thread: mq_receive succeeded on msg 1
sender_thread: mq_send succeeded on msg 2
receiver_thread: mq_receive succeeded on msg 2
sender_thread: mq_send succeeded on msg 3
receiver_thread: mq_receive succeeded on msg 3
sender_thread: mq_send succeeded on msg 4
receiver_thread: mq_receive succeeded on msg 4
sender_thread: mq_send succeeded on msg 5
receiver_thread: mq_receive succeeded on msg 5
sender_thread: mq_send succeeded on msg 6
receiver_thread: mq_receive succeeded on msg 6
sender_thread: mq_send succeeded on msg 7
receiver_thread: mq_receive succeeded on msg 7
sender_thread: mq_send succeeded on msg 8
receiver_thread: mq_receive succeeded on msg 8
sender_thread: mq_send succeeded on msg 9
receiver_thread: mq_receive succeeded on msg 9
sender_thread: returning nerrors=0
mqueue_test: Killing receiver
receiver_thread: mq_receive interrupted!
receiver_thread: returning nerrors=0
mqueue_test: Canceling receiver
mqueue_test: receiver has already terminated
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 3 3
mxordblk 39ee8 39ee8
uordblks 4984 4984
fordblks 39fe0 39fe0
user_main: signal handler test
sighand_test: Initializing semaphore to 0
sighand_test: Starting waiter task
sighand_test: Started waiter_main pid=68
waiter_main: Waiter started
waiter_main: Unmasking signal 32
waiter_main: Registering signal handler
waiter_main: oact.sigaction=0 oact.sa_flags=0 oact.sa_mask=0000000000000000
waiter_main: Waiting on semaphore
sighand_test: Signaling pid=68 with signo=32 sigvalue=42
waiter_main: sem_wait() successfully interrupted by signal
waiter_main: done
sighand_test: done
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 3 1
mxordblk 39ee8 37ee0
uordblks 4984 6a84
fordblks 39fe0 37ee0
user_main: nested signal handler test
signest_test: Starting signal waiter task at priority 101
signest_test: Started waiter_main pid=71
waiter_main: Waiter started
signest_test: Starting interfering task at priority 102
waiter_main: Setting signal mask
interfere_main: Waiting on semaphore
waiter_main: Registering signal handler
signest_test: Started interfere_main pid=72
waiter_main: Waiting on semaphore
signest_test: Simple case:
Total signalled 1240 Odd=620 Even=620
Total handled 1240 Odd=620 Even=620
Total nested 0 Odd=0 Even=0
signest_test: With task locking
Total signalled 2480 Odd=1240 Even=1240
Total handled 2480 Odd=1240 Even=1240
Total nested 0 Odd=0 Even=0
signest_test: With interfering thread
Total signalled 3720 Odd=1860 Even=1860
Total handled 3720 Odd=1860 Even=1860
Total nested 0 Odd=0 Even=0
signest_test: done
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 1 6
mxordblk 37ee0 335a0
uordblks 6a84 6ae4
fordblks 37ee0 37e80
user_main: spinlock test
Start Lock test:
Thread num: 1, Loop times: 10000000
Test type: spinlock
spinlock: Test Results:
spinlock: Final counter: 10000000
spinlock: Average throughput : 2118644 op/s
spinlock: Total execution time: 4720000000 ns
Test type: rspinlock
rspinlock: Test Results:
rspinlock: Final counter: 10000000
rspinlock: Average throughput : 805801 op/s
rspinlock: Total execution time: 12410000000 ns
Test type: seqcount
seqcount: Test Results:
seqcount: Final counter: 10000000
seqcount: Average throughput : 946969 op/s
seqcount: Total execution time: 10560000000 ns
Start Lock test:
Thread num: 2, Loop times: 10000000
Test type: spinlock
spinlock: Test Results:
spinlock: Final counter: 20000000
spinlock: Average throughput : 1100715 op/s
spinlock: Total execution time: 9090000000 ns
Test type: rspinlock
rspinlock: Test Results:
rspinlock: Final counter: 20000000
rspinlock: Average throughput : 743494 op/s
rspinlock: Total execution time: 13450000000 ns
Test type: seqcount
seqcount: Test Results:
seqcount: Final counter: 20000000
seqcount: Average throughput : 1892147 op/s
seqcount: Total execution time: 10570000000 ns
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 6 6
mxordblk 335a0 335a0
uordblks 6ae4 52e4
fordblks 37e80 39680
user_main: wdog test
wdog_test start...
wdtest_once 0 ns
wdtest_once 0 ns
wdtest_once 0 ns
wdtest_once 0 ns
wdtest_once 0 ns
wdtest_once 0 ns
wdtest_once 0 ns
wdtest_once 0 ns
wdtest_once 1 ns
wdtest_once 1 ns
wdtest_once 1 ns
wdtest_once 1 ns
wdtest_once 1 ns
wdtest_once 1 ns
wdtest_once 1 ns
wdtest_once 1 ns
wdtest_once 10 ns
wdtest_once 10 ns
wdtest_once 10 ns
wdtest_once 10 ns
wdtest_once 10 ns
wdtest_once 10 ns
wdtest_once 10 ns
wdtest_once 10 ns
wdtest_once 100 ns
wdtest_once 100 ns
wdtest_once 100 ns
wdtest_once 100 ns
wdtest_once 100 ns
wdtest_once 100 ns
wdtest_once 100 ns
wdtest_once 100 ns
wdtest_once 1000 ns
wdtest_once 1000 ns
wdtest_once 1000 ns
wdtest_once 1000 ns
wdtest_once 1000 ns
wdtest_once 1000 ns
wdtest_once 1000 ns
wdtest_once 1000 ns
wdtest_once 10000 ns
wdtest_once 10000 ns
wdtest_once 10000 ns
wdtest_once 10000 ns
wdtest_once 10000 ns
wdtest_once 10000 ns
wdtest_once 10000 ns
wdtest_once 10000 ns
wdtest_once 100000 ns
wdtest_once 100000 ns
wdtest_once 100000 ns
wdtest_once 100000 ns
wdtest_once 100000 ns
wdtest_once 100000 ns
wdtest_once 100000 ns
wdtest_once 100000 ns
wdtest_once 1000000 ns
wdtest_once 1000000 ns
wdtest_once 1000000 ns
wdtest_once 1000000 ns
wdtest_once 1000000 ns
wdtest_once 1000000 ns
wdtest_once 1000000 ns
wdtest_once 1000000 ns
wd_start with maximum delay, cancel OK, rest 2305843009213693949
wdtest_recursive 1000000ns
wd_start with maximum delay, cancel OK, rest 2305843009213693949
wdtest_recursive 1000000ns
wd_start with maximum delay, cancel OK, rest 2305843009213693949
wdtest_recursive 1000000ns
wd_start with maximum delay, cancel OK, rest 2305843009213693949
wd_start with maximum delay, cancel OK, rest 2305843009213693949
wd_start with maximum delay, cancel OK, rest 2305843009213693949
wdtest_recursive 1000000ns
wd_start with maximum delay, cancel OK, rest 2305843009213693949
wd_start with maximum delay, cancel OK, rest 2305843009213693949
wdtest_recursive 1000000ns
wdtest_recursive 1000000ns
wdtest_recursive 1000000ns
wdtest_recursive 1000000ns
recursive wdog triggered 6 times, elapsed tick 12
wdtest_recursive 10000000ns
recursive wdog triggered 6 times, elapsed tick 12
wdtest_recursive 10000000ns
recursive wdog triggered 6 times, elapsed tick 12
wdtest_recursive 10000000ns
recursive wdog triggered 6 times, elapsed tick 12
wdtest_recursive 10000000ns
recursive wdog triggered 6 times, elapsed tick 12
wdtest_recursive 10000000ns
recursive wdog triggered 6 times, elapsed tick 12
wdtest_recursive 10000000ns
recursive wdog triggered 6 times, elapsed tick 12
wdtest_recursive 10000000ns
recursive wdog triggered 6 times, elapsed tick 12
wdtest_recursive 10000000ns
recursive wdog triggered 6 times, elapsed tick 12
recursive wdog triggered 6 times, elapsed tick 12
recursive wdog triggered 6 times, elapsed tick 12
recursive wdog triggered 6 times, elapsed tick 12
recursive wdog triggered 6 times, elapsed tick 12
recursive wdog triggered 6 times, elapsed tick 12
recursive wdog triggered 6 times, elapsed tick 12
recursive wdog triggered 6 times, elapsed tick 12
wdog_test end...
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 6 6
mxordblk 335a0 335a0
uordblks 52e4 52e4
fordblks 39680 39680
user_main: round-robin scheduler test
rr_test: Set thread priority to 1
rr_test: Set thread policy to SCHED_RR
rr_test: Starting first get_primes_thread
First get_primes_thread: 95
rr_test: Starting second get_primes_thread
Second get_primes_thread: 98
rr_test: Waiting for threads to complete -- this should take awhile
If RR scheduling is working, they should start and complete at
about the same time
get_primes_thread id=1 started, looking for primes < 30000, doing 10 run(s)
get_primes_thread id=2 started, looking for primes < 30000, doing 10 run(s)
get_primes_thread id=1 finished, found 3246 primes, last one was 29989
get_primes_thread id=2 finished, found 3246 primes, last one was 29989
rr_test: Done
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 6 6
mxordblk 335a0 335a0
uordblks 52e4 52e4
fordblks 39680 39680
user_main: barrier test
barrier_test: Initializing barrier
barrier_test: Thread 0 created
barrier_func: Thread 0 started
barrier_test: Thread 1 created
barrier_func: Thread 1 started
barrier_test: Thread 2 created
barrier_func: Thread 2 started
barrier_test: Thread 3 created
barrier_func: Thread 3 started
barrier_test: Thread 4 created
barrier_func: Thread 4 started
barrier_test: Thread 5 created
barrier_func: Thread 5 started
barrier_test: Thread 6 created
barrier_func: Thread 6 started
barrier_test: Thread 7 created
barrier_func: Thread 7 started
barrier_func: Thread 0 calling pthread_barrier_wait()
barrier_func: Thread 1 calling pthread_barrier_wait()
barrier_func: Thread 2 calling pthread_barrier_wait()
barrier_func: Thread 3 calling pthread_barrier_wait()
barrier_func: Thread 4 calling pthread_barrier_wait()
barrier_func: Thread 5 calling pthread_barrier_wait()
barrier_func: Thread 6 calling pthread_barrier_wait()
barrier_func: Thread 7 calling pthread_barrier_wait()
barrier_func: Thread 7, back with status=PTHREAD_BARRIER_SERIAL_THREAD (I AM )
barrier_func: Thread 0, back with status=0 (I am not special)
barrier_func: Thread 1, back with status=0 (I am not special)
barrier_func: Thread 2, back with status=0 (I am not special)
barrier_func: Thread 3, back with status=0 (I am not special)
barrier_func: Thread 4, back with status=0 (I am not special)
barrier_func: Thread 5, back with status=0 (I am not special)
barrier_func: Thread 6, back with status=0 (I am not special)
barrier_func: Thread 7 done
barrier_func: Thread 0 done
barrier_func: Thread 1 done
barrier_func: Thread 2 done
barrier_test: Thread 0 completed with result=0
barrier_test: Thread 1 completed with result=0
barrier_test: Thread 2 completed with result=0
barrier_func: Thread 3 done
barrier_test: Thread 3 completed with result=0
barrier_func: Thread 4 done
barrier_func: Thread 5 done
barrier_test: Thread 4 completed with result=0
barrier_test: Thread 5 completed with result=0
barrier_func: Thread 6 done
barrier_test: Thread 6 completed with result=0
barrier_test: Thread 7 completed with result=0
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 6 6
mxordblk 335a0 335a0
uordblks 52e4 52e4
fordblks 39680 39680
user_main: scheduler lock test
sched_lock: Starting lowpri_thread at 97
sched_lock: Set lowpri_thread priority to 97
sched_lock: Starting highpri_thread at 98
sched_lock: Set highpri_thread priority to 98
sched_lock: Waiting...
sched_lock: PASSED No pre-emption occurred while scheduler was locked.
sched_lock: Starting lowpri_thread at 97
sched_lock: Set lowpri_thread priority to 97
sched_lock: Starting highpri_thread at 98
sched_lock: Set highpri_thread priority to 98
sched_lock: Waiting...
sched_lock: PASSED No pre-emption occurred while scheduler was locked.
sched_lock: Finished
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 6 6
mxordblk 335a0 335a0
uordblks 52e4 52e4
fordblks 39680 39680
user_main: vfork() test
vfork_test: Child 119 ran successfully
user_main: smp call test
smp_call_test: Test start
smp_call_test: Call cpu 0, nowait
smp_call_test: Call cpu 0, wait
smp_call_test: Call cpu 1, nowait
smp_call_test: Call cpu 1, wait
smp_call_test: Call multi cpu, nowait
smp_call_test: Call in interrupt, wait
smp_call_test: Call multi cpu, wait
smp_call_test: Test success
Final memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e964 3e964
ordblks 1 6
mxordblk 3a000 335a0
uordblks 4964 52e4
fordblks 3a000 39680
user_main: Exiting
ostest_main: Exiting with status 0
raspberrypi-pico:nsh
ostest
stdio_test: write fd=1
stdio_test: Standard I/O Check: printf
stdio_test: write fd=2
stdio_test: Standard I/O Check: fprintf to stderr
ostest_main: putenv(Variable1=BadValue3)
ostest_main: setenv(Variable1, GoodValue1, TRUE)
ostest_main: setenv(Variable2, BadValue1, FALSE)
ostest_main: setenv(Variable2, GoodValue2, TRUE)
ostest_main: setenv(Variable3, GoodValue3, FALSE)
ostest_main: setenv(Variable3, BadValue2, FALSE)
show_variable: Variable=Variable1 has value=GoodValue1
show_variable: Variable=Variable2 has value=GoodValue2
show_variable: Variable=Variable3 has value=GoodValue3
ostest_main: Started user_main at PID=4
user_main: Begin argument test
user_main: Started with argc=5
user_main: argv[0]="ostest"
user_main: argv[1]="Arg1"
user_main: argv[2]="Arg2"
user_main: argv[3]="Arg3"
user_main: argv[4]="Arg4"
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 1 1
mxordblk 3b628 3b628
uordblks 4540 4540
fordblks 3b628 3b628
user_main: getopt() test
getopt(): Simple test
getopt(): Invalid argument
getopt(): Missing optional argument
getopt_long(): Simple test
getopt_long(): No short options
getopt_long(): Argument for --option=argument
getopt_long(): Invalid long option
getopt_long(): Mixed long and short options
getopt_long(): Invalid short option
getopt_long(): Missing optional arguments
getopt_long_only(): Mixed long and short options
getopt_long_only(): Single hyphen long options
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 1 1
mxordblk 3b628 3b628
uordblks 4540 4540
fordblks 3b628 3b628
user_main: libc tests
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 1 1
mxordblk 3b628 3b628
uordblks 4540 4540
fordblks 3b628 3b628
show_variable: Variable=Variable1 has value=GoodValue1
show_variable: Variable=Variable2 has value=GoodValue2
show_variable: Variable=Variable3 has value=GoodValue3
show_variable: Variable=Variable1 has no value
show_variable: Variable=Variable2 has value=GoodValue2
show_variable: Variable=Variable3 has value=GoodValue3
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 1 2
mxordblk 3b628 3b628
uordblks 4540 4520
fordblks 3b628 3b648
show_variable: Variable=Variable1 has no value
show_variable: Variable=Variable2 has no value
show_variable: Variable=Variable3 has no value
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 2 2
mxordblk 3b628 3b628
uordblks 4520 44a8
fordblks 3b648 3b6c0
user_main: setvbuf test
setvbuf_test: Test NO buffering
setvbuf_test: Using NO buffering
setvbuf_test: Test default FULL buffering
setvbuf_test: Using default FULL buffering
setvbuf_test: Test FULL buffering, buffer size 64
setvbuf_test: Using FULL buffering, buffer size 64
setvbuf_test: Test FULL buffering, pre-allocated buffer
setvbuf_test: Using FULL buffering, pre-allocated buffer
setvbuf_test: Test LINE buffering, buffer size 64
setvbuf_test: Using LINE buffering, buffer size 64
setvbuf_test: Test FULL buffering, pre-allocated buffer
setvbuf_test: Using FULL buffering, pre-allocated buffer
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 2 2
mxordblk 3b628 3b628
uordblks 44a8 44a8
fordblks 3b6c0 3b6c0
user_main: /dev/null test
dev_null: Read 0 bytes from /dev/null
dev_null: Wrote 1024 bytes to /dev/null
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 2 2
mxordblk 3b628 3b628
uordblks 44a8 44a8
fordblks 3b6c0 3b6c0
user_main: task_restart test
Test task_restart()
restart_main: setenv(VarName, VarValue, TRUE)
restart_main: Started restart_main at PID=5
restart_main: Started with argc=4
restart_main: argv[0]="ostest"
restart_main: argv[1]="This is argument 1"
restart_main: argv[2]="Argument 2 here"
restart_main: argv[3]="Lastly, the 3rd argument"
restart_main: Variable=VarName has value=VarValue
restart_main: I am still here
restart_main: I am still here
restart_main: Started restart_main at PID=5
restart_main: Started with argc=4
restart_main: argv[0]="ostest"
restart_main: argv[1]="This is argument 1"
restart_main: argv[2]="Argument 2 here"
restart_main: argv[3]="Lastly, the 3rd argument"
restart_main: Variable=VarName has value=VarValue
restart_main: Started with argc=4
restart_main: argv[0]="ostest"
restart_main: argv[1]="This is argument 1"
restart_main: argv[2]="Argument 2 here"
restart_main: argv[3]="Lastly, the 3rd argument"
restart_main: Variable=VarName has value=VarValue
restart_main: Exiting
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 2 2
mxordblk 3b628 3b628
uordblks 44a8 44e0
fordblks 3b6c0 3b688
user_main: waitpid test
Test waitpid()
waitpid_start_child: Started waitpid_main at PID=6
waitpid_main: PID 6 Started
waitpid_start_child: Started waitpid_main at PID=7
waitpid_main: PID 7 Started
waitpid_start_child: Started waitpid_main at PID=8
waitpid_main: PID 8 Started
waitpid_test: Waiting for PID=6 with waitpid()
waitpid_main: PID 6 exitting with result=14
waitpid_test: PID 6 waitpid succeeded with stat_loc=0e00
waitpid_last: Waiting for PID=8 with waitpid()
waitpid_main: PID 7 exitting with result=14
waitpid_main: PID 8 exitting with result=14
waitpid_last: PASS: PID 8 waitpid succeeded with stat_loc=0e00
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 2 2
mxordblk 3b628 3b628
uordblks 44e0 44e0
fordblks 3b688 3b688
user_main: mutex test
Initializing mutex
Starting thread 1
Starting thread 2
Thread1 Thread2
Loops 32 32
Errors 0 0
Testing moved mutex
Starting moved mutex thread 1
Starting moved mutex thread 2
Thread1 Thread2
Moved Loops 32 32
Moved Errors 0 0
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 2 2
mxordblk 3b628 3b628
uordblks 44e0 44e0
fordblks 3b688 3b688
user_main: timed mutex test
mutex_test: Initializing mutex
mutex_test: Starting thread
pthread: Started
pthread: Waiting for lock or timeout
mutex_test: Unlocking
pthread: Got the lock
pthread: Waiting for lock or timeout
pthread: Got the timeout. Terminating
mutex_test: PASSED
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 2 2
mxordblk 3b628 3b628
uordblks 44e0 44e0
fordblks 3b688 3b688
user_main: cancel test
cancel_test: Test 1a: Normal Cancellation
cancel_test: Starting thread
start_thread: Initializing mutex
start_thread: Initializing cond
start_thread: Starting thread
start_thread: Yielding
sem_waiter: Taking mutex
sem_waiter: Starting wait for condition
cancel_test: Canceling thread
cancel_test: Joining
cancel_test: waiter exited with result=0xffffffff
cancel_test: PASS thread terminated with PTHREAD_CANCELED
cancel_test: Test 2: Asynchronous Cancellation
... Skipped
cancel_test: Test 3: Cancellation of detached thread
cancel_test: Re-starting thread
restart_thread: Destroying cond
restart_thread: Destroying mutex
restart_thread: Re-starting thread
start_thread: Initializing mutex
start_thread: Initializing cond
start_thread: Starting thread
start_thread: Yielding
sem_waiter: Taking mutex
sem_waiter: Starting wait for condition
cancel_test: Canceling thread
cancel_test: Joining
cancel_test: PASS pthread_join failed with status=ESRCH
cancel_test: Test 5: Non-cancelable threads
cancel_test: Re-starting thread (non-cancelable)
restart_thread: Destroying cond
restart_thread: Destroying mutex
restart_thread: Re-starting thread
start_thread: Initializing mutex
start_thread: Initializing cond
start_thread: Starting thread
start_thread: Yielding
sem_waiter: Taking mutex
sem_waiter: Starting wait for condition
sem_waiter: Setting non-cancelable
cancel_test: Canceling thread
cancel_test: Joining
sem_waiter: Releasing mutex
sem_waiter: Setting cancelable
cancel_test: waiter exited with result=0xffffffff
cancel_test: PASS thread terminated with PTHREAD_CANCELED
cancel_test: Test 6: Cancel message queue wait
cancel_test: Starting thread (cancelable)
Skipped
cancel_test: Test 7: Cancel signal wait
cancel_test: Starting thread (cancelable)
Skipped
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 2 2
mxordblk 3b628 3b628
uordblks 44e0 44e0
fordblks 3b688 3b688
user_main: robust test
robust_test: Initializing mutex
robust_test: Starting thread
robust_waiter: Taking mutex
robust_waiter: Exiting with mutex
robust_test: Take the lock again
robust_test: Make the mutex consistent again.
robust_test: Take the lock again
robust_test: Joining
robust_test: waiter exited with result=0
robust_test: Test complete with nerrors=0
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 2 2
mxordblk 3b628 3b628
uordblks 44e0 44e0
fordblks 3b688 3b688
user_main: semaphore test
sem_test: Initializing semaphore to 0
sem_test: Starting waiter thread 1
sem_test: Set thread 1 priority to 191
waiter_func: Thread 1 Started
sem_test: Starting waiter thread 2
waiter_func: Thread 1 initial semaphore value = 0
sem_test: Set thread 2 priority to 128
waiter_func: Thread 1 waiting on semaphore
waiter_func: Thread 2 Started
waiter_func: Thread 2 initial semaphore value = -1
waiter_func: Thread 2 waiting on semaphore
sem_test: Starting poster thread 3
sem_test: Set thread 3 priority to 64
poster_func: Thread 3 started
poster_func: Thread 3 semaphore value = -2
poster_func: Thread 3 posting semaphore
waiter_func: Thread 1 awakened
waiter_func: Thread 1 new semaphore value = -1
waiter_func: Thread 1 done
poster_func: Thread 3 new semaphore value = -1
poster_func: Thread 3 semaphore value = -1
poster_func: Thread 3 posting semaphore
waiter_func: Thread 2 awakened
poster_func: Thread 3 new semaphore value = 0
waiter_func: Thread 2 new semaphore value = 0
poster_func: Thread 3 done
waiter_func: Thread 2 done
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 2 2
mxordblk 3b628 3b628
uordblks 44e0 44e0
fordblks 3b688 3b688
user_main: timed semaphore test
semtimed_test: Initializing semaphore to 0
semtimed_test: Waiting for two second timeout
semtimed_test: PASS: first test returned timeout
BEFORE: (1612828917 sec, 330000000 nsec)
AFTER: (1612828919 sec, 330000000 nsec)
semtimed_test: Starting poster thread
semtimed_test: Set thread 1 priority to 191
semtimed_test: Starting poster thread 3
semtimed_test: Set thread 3 priority to 64
semtimed_test: Waiting for two second timeout
poster_func: Waiting for 1 second
poster_func: Posting
semtimed_test: PASS: sem_timedwait succeeded
BEFORE: (1612828919 sec, 330000000 nsec)
AFTER: (1612828920 sec, 340000000 nsec)
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 2 2
mxordblk 3b628 3b628
uordblks 44e0 44e0
fordblks 3b688 3b688
user_main: condition variable test
cond_test: Initializing mutex
cond_test: Initializing cond
cond_test: Starting waiter
cond_test: Set thread 1 priority to 128
waiter_thread: Started
cond_test: Starting signaler
cond_test: Set thread 2 priority to 64
thread_signaler: Started
thread_signaler: Terminating
cond_test: signaler terminated, now cancel the waiter
cond_test: Waiter Signaler
cond_test: Loops 32 32
cond_test: Errors 0 0
cond_test:
cond_test: 0 times, waiter did not have to wait for data
cond_test: 0 times, data was already available when the signaler run
cond_test: 0 times, the waiter was in an unexpected state when the signaler ran
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 2 2
mxordblk 3b628 3b628
uordblks 44e0 44e0
fordblks 3b688 3b688
user_main: pthread_exit() test
pthread_exit_test: Started pthread_exit_main at PID=28
pthread_exit_main 28: Starting pthread_exit_thread
pthread_exit_main 28: Sleeping for 5 seconds
pthread_exit_thread 29: Sleeping for 10 second
pthread_exit_thread 29: Still running...
pthread_exit_main 28: Calling pthread_exit()
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 2 3
mxordblk 3b628 38c68
uordblks 44e0 4dc0
fordblks 3b688 3ada8
user_main: pthread_rwlock test
pthread_rwlock: Initializing rwlock
pthread_exit_thread 29: Exiting
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 3 2
mxordblk 38c68 3b628
uordblks 4dc0 44f0
fordblks 3ada8 3b678
user_main: pthread_rwlock_cancel test
pthread_rwlock_cancel: Starting test
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 2 2
mxordblk 3b628 3b628
uordblks 44f0 44f0
fordblks 3b678 3b678
user_main: timed wait test
thread_waiter: Initializing mutex
timedwait_test: Initializing cond
timedwait_test: Starting waiter
timedwait_test: Set thread 2 priority to 177
thread_waiter: Taking mutex
timedwait_test: Joining
thread_waiter: Starting 5 second wait for condition
thread_waiter: pthread_cond_timedwait timed out
thread_waiter: Releasing mutex
thread_waiter: Exit with status 0x12345678
timedwait_test: waiter exited with result=0x12345678
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 2 2
mxordblk 3b628 3b628
uordblks 44f0 44f0
fordblks 3b678 3b678
user_main: timed message queue test
timedmqueue_test: Starting sender
timedmqueue_test: Waiting for sender to complete
sender_thread: Starting
sender_thread: mq_timedsend succeeded on msg 0
sender_thread: mq_timedsend succeeded on msg 1
sender_thread: mq_timedsend succeeded on msg 2
sender_thread: mq_timedsend succeeded on msg 3
sender_thread: mq_timedsend succeeded on msg 4
sender_thread: mq_timedsend succeeded on msg 5
sender_thread: mq_timedsend succeeded on msg 6
sender_thread: mq_timedsend succeeded on msg 7
sender_thread: mq_timedsend succeeded on msg 8
sender_thread: mq_timedsend 9 timed out as expected
sender_thread: returning nerrors=0
timedmqueue_test: Starting receiver
timedmqueue_test: Waiting for receiver to complete
receiver_thread: Starting
receiver_thread: mq_timedreceive succeed on msg 0
receiver_thread: mq_timedreceive succeed on msg 1
receiver_thread: mq_timedreceive succeed on msg 2
receiver_thread: mq_timedreceive succeed on msg 3
receiver_thread: mq_timedreceive succeed on msg 4
receiver_thread: mq_timedreceive succeed on msg 5
receiver_thread: mq_timedreceive succeed on msg 6
receiver_thread: mq_timedreceive succeed on msg 7
receiver_thread: mq_timedreceive succeed on msg 8
receiver_thread: Receive 9 timed out as expected
receiver_thread: returning nerrors=0
timedmqueue_test: Test complete
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 2 3
mxordblk 3b628 39510
uordblks 44f0 4560
fordblks 3b678 3b608
user_main: sigprocmask test
sigprocmask_test: SUCCESS
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 3 3
mxordblk 39510 39510
uordblks 4560 4560
fordblks 3b608 3b608
user_main: message queue test
mqueue_test: Starting receiver
mqueue_test: Set receiver priority to 128
receiver_thread: Starting
mqueue_test: Starting sender
mqueue_test: Set sender thread priority to 64
mqueue_test: Waiting for sender to complete
sender_thread: Starting
receiver_thread: mq_receive succeeded on msg 0
sender_thread: mq_send succeeded on msg 0
receiver_thread: mq_receive succeeded on msg 1
sender_thread: mq_send succeeded on msg 1
receiver_thread: mq_receive succeeded on msg 2
sender_thread: mq_send succeeded on msg 2
receiver_thread: mq_receive succeeded on msg 3
sender_thread: mq_send succeeded on msg 3
receiver_thread: mq_receive succeeded on msg 4
sender_thread: mq_send succeeded on msg 4
receiver_thread: mq_receive succeeded on msg 5
sender_thread: mq_send succeeded on msg 5
receiver_thread: mq_receive succeeded on msg 6
sender_thread: mq_send succeeded on msg 6
receiver_thread: mq_receive succeeded on msg 7
sender_thread: mq_send succeeded on msg 7
receiver_thread: mq_receive succeeded on msg 8
sender_thread: mq_send succeeded on msg 8
receiver_thread: mq_receive succeeded on msg 9
sender_thread: mq_send succeeded on msg 9
sender_thread: returning nerrors=0
mqueue_test: Killing receiver
receiver_thread: mq_receive interrupted!
receiver_thread: returning nerrors=0
mqueue_test: Canceling receiver
mqueue_test: receiver has already terminated
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 3 3
mxordblk 39510 39510
uordblks 4560 4560
fordblks 3b608 3b608
user_main: signal handler test
sighand_test: Initializing semaphore to 0
sighand_test: Starting waiter task
sighand_test: Started waiter_main pid=45
waiter_main: Waiter started
waiter_main: Unmasking signal 32
waiter_main: Registering signal handler
waiter_main: oact.sigaction=0 oact.sa_flags=0 oact.sa_mask=0000000000000000
waiter_main: Waiting on semaphore
sighand_test: Signaling pid=45 with signo=32 sigvalue=42
waiter_main: sem_wait() successfully interrupted by signal
waiter_main: done
sighand_test: done
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 3 2
mxordblk 39510 39510
uordblks 4560 4578
fordblks 3b608 3b5f0
user_main: nested signal handler test
signest_test: Starting signal waiter task at priority 101
waiter_main: Waiter started
signest_test: Started waiter_main pid=46
waiter_main: Setting signal mask
signest_test: Starting interfering task at priority 102
waiter_main: Registering signal handler
interfere_main: Waiting on semaphore
waiter_main: Waiting on semaphore
signest_test: Started interfere_main pid=47
signest_test: Simple case:
Total signalled 1240 Odd=620 Even=620
Total handled 1240 Odd=620 Even=620
Total nested 0 Odd=0 Even=0
signest_test: With task locking
Total signalled 2480 Odd=1240 Even=1240
Total handled 2480 Odd=1240 Even=1240
Total nested 0 Odd=0 Even=0
signest_test: With interfering thread
Total signalled 3720 Odd=1860 Even=1860
Total handled 3720 Odd=1860 Even=1860
Total nested 0 Odd=0 Even=0
signest_test: done
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 2 5
mxordblk 39510 36cc0
uordblks 4578 45d8
fordblks 3b5f0 3b590
user_main: spinlock test
Start Lock test:
Thread num: 1, Loop times: 10000000
Test type: spinlock
spinlock: Test Results:
spinlock: Final counter: 10000000
spinlock: Average throughput : 7352941 op/s
spinlock: Total execution time: 1360000000 ns
Test type: rspinlock
rspinlock: Test Results:
rspinlock: Final counter: 10000000
rspinlock: Average throughput : 7352941 op/s
rspinlock: Total execution time: 1360000000 ns
Test type: seqcount
seqcount: Test Results:
seqcount: Final counter: 10000000
seqcount: Average throughput : 5681818 op/s
seqcount: Total execution time: 1760000000 ns
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 5 5
mxordblk 36cc0 36cc0
uordblks 45d8 45d8
fordblks 3b590 3b590
user_main: wdog test
wdog_test start...
wdtest_once 0 ns
wdtest_once 0 ns
wdtest_once 0 ns
wdtest_once 0 ns
wdtest_once 1 ns
wdtest_once 1 ns
wdtest_once 1 ns
wdtest_once 1 ns
wdtest_once 10 ns
wdtest_once 10 ns
wdtest_once 10 ns
wdtest_once 10 ns
wdtest_once 100 ns
wdtest_once 100 ns
wdtest_once 100 ns
wdtest_once 100 ns
wdtest_once 1000 ns
wdtest_once 1000 ns
wdtest_once 1000 ns
wdtest_once 1000 ns
wdtest_once 10000 ns
wdtest_once 10000 ns
wdtest_once 10000 ns
wdtest_once 10000 ns
wdtest_once 100000 ns
wdtest_once 100000 ns
wdtest_once 100000 ns
wdtest_once 100000 ns
wdtest_once 1000000 ns
wdtest_once 1000000 ns
wdtest_once 1000000 ns
wdtest_once 1000000 ns
wd_start with maximum delay, cancel OK, rest 2305843009213693949
wdtest_recursive 1000000ns
wd_start with maximum delay, cancel OK, rest 2305843009213693949
wdtest_recursive 1000000ns
wd_start with maximum delay, cancel OK, rest 2305843009213693949
wdtest_recursive 1000000ns
wd_start with maximum delay, cancel OK, rest 2305843009213693949
wdtest_recursive 1000000ns
recursive wdog triggered 6 times, elapsed tick 12
wdtest_recursive 10000000ns
recursive wdog triggered 6 times, elapsed tick 12
wdtest_recursive 10000000ns
recursive wdog triggered 6 times, elapsed tick 12
wdtest_recursive 10000000ns
recursive wdog triggered 6 times, elapsed tick 12
wdtest_recursive 10000000ns
recursive wdog triggered 6 times, elapsed tick 12
recursive wdog triggered 6 times, elapsed tick 12
recursive wdog triggered 6 times, elapsed tick 12
recursive wdog triggered 6 times, elapsed tick 12
wdog_test end...
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 5 5
mxordblk 36cc0 36cc0
uordblks 45d8 45d8
fordblks 3b590 3b590
user_main: round-robin scheduler test
rr_test: Set thread priority to 1
rr_test: Set thread policy to SCHED_RR
rr_test: Starting first get_primes_thread
First get_primes_thread: 59
rr_test: Starting second get_primes_thread
Second get_primes_thread: 60
rr_test: Waiting for threads to complete -- this should take awhile
If RR scheduling is working, they should start and complete at
about the same time
get_primes_thread id=1 started, looking for primes < 30000, doing 10 run(s)
get_primes_thread id=2 started, looking for primes < 30000, doing 10 run(s)
get_primes_thread id=1 finished, found 3246 primes, last one was 29989
get_primes_thread id=2 finished, found 3246 primes, last one was 29989
rr_test: Done
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 5 5
mxordblk 36cc0 36cc0
uordblks 45d8 45d8
fordblks 3b590 3b590
user_main: barrier test
barrier_test: Initializing barrier
barrier_test: Thread 0 created
barrier_func: Thread 0 started
barrier_test: Thread 1 created
barrier_func: Thread 1 started
barrier_test: Thread 2 created
barrier_func: Thread 2 started
barrier_test: Thread 3 created
barrier_func: Thread 3 started
barrier_test: Thread 4 created
barrier_func: Thread 4 started
barrier_test: Thread 5 created
barrier_func: Thread 5 started
barrier_test: Thread 6 created
barrier_func: Thread 6 started
barrier_test: Thread 7 created
barrier_func: Thread 7 started
barrier_func: Thread 0 calling pthread_barrier_wait()
barrier_func: Thread 1 calling pthread_barrier_wait()
barrier_func: Thread 2 calling pthread_barrier_wait()
barrier_func: Thread 3 calling pthread_barrier_wait()
barrier_func: Thread 4 calling pthread_barrier_wait()
barrier_func: Thread 5 calling pthread_barrier_wait()
barrier_func: Thread 6 calling pthread_barrier_wait()
barrier_func: Thread 7 calling pthread_barrier_wait()
barrier_func: Thread 7, back with status=PTHREAD_BARRIER_SERIAL_THREAD (I AM
SPECIAL)
barrier_func: Thread 0, back with status=0 (I am not special)
barrier_func: Thread 1, back with status=0 (I am not special)
barrier_func: Thread 2, back with status=0 (I am not special)
barrier_func: Thread 3, back with status=0 (I am not special)
barrier_func: Thread 4, back with status=0 (I am not special)
barrier_func: Thread 5, back with status=0 (I am not special)
barrier_func: Thread 6, back with status=0 (I am not special)
barrier_func: Thread 7 done
barrier_func: Thread 0 done
barrier_func: Thread 1 done
barrier_func: Thread 2 done
barrier_test: Thread 0 completed with result=0
barrier_test: Thread 1 completed with result=0
barrier_test: Thread 2 completed with result=0
barrier_func: Thread 3 done
barrier_test: Thread 3 completed with result=0
barrier_func: Thread 4 done
barrier_func: Thread 5 done
barrier_test: Thread 4 completed with result=0
barrier_test: Thread 5 completed with result=0
barrier_func: Thread 6 done
barrier_test: Thread 6 completed with result=0
barrier_test: Thread 7 completed with result=0
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 5 5
mxordblk 36cc0 36cc0
uordblks 45d8 45d8
fordblks 3b590 3b590
user_main: scheduler lock test
sched_lock: Starting lowpri_thread at 97
sched_lock: Set lowpri_thread priority to 97
sched_lock: Starting highpri_thread at 98
sched_lock: Set highpri_thread priority to 98
sched_lock: Waiting...
sched_lock: PASSED No pre-emption occurred while scheduler was locked.
sched_lock: Starting lowpri_thread at 97
sched_lock: Set lowpri_thread priority to 97
sched_lock: Starting highpri_thread at 98
sched_lock: Set highpri_thread priority to 98
sched_lock: Waiting...
sched_lock: PASSED No pre-emption occurred while scheduler was locked.
sched_lock: Finished
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 5 5
mxordblk 36cc0 36cc0
uordblks 45d8 45d8
fordblks 3b590 3b590
user_main: vfork() test
vfork_test: Child 77 ran successfully
Final memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3fb68 3fb68
ordblks 1 5
mxordblk 3b628 36cc0
uordblks 4540 45d8
fordblks 3b628 3b590
user_main: Exiting
ostest_main: Exiting with status 0
nsh>
raspberrypi-pico:usbnsh
NuttShell (NSH) NuttX-13.0.0
nsh> help
help usage: help [-v] [<cmd>]
. cp exit mkrd rmdir set
truncate
? dirname false mv kill uname
alias date fdinfo pidof pkill umount
basename dmesg help ps usleep uptime
break echo hexdump pwd source watch
cat env ls reboot test xd
cd exec mkdir rm time wait
Builtin Apps:
dd getprime hello nsh ostest sh
nsh> ostest
stdio_test: write fd=1
stdio_test: Standard I/O Check: printf
rite fdstdio_test: Standard I/O Check: fprintf to stderr
ostest_main: putenv(Variable1=BadValue3)
ostest_main: setenv(Variable1, GoodValue1, TRUE)
ostest_main: setenv(Variable2, BadValue1, FALSE)
ostest_main: setenv(Variable2, GoodValue2, TRUE)
ostest_main: setenv(Variable3, GoodValue3, FALSE)
ostest_main: setenv(Variable3, BadValue2, FALSE)
show_variable: Variable=Variable1 has value=GoodValue1
show_variable: Variable=Variable2 has value=GoodValue2
show_variable: Variable=Variable3 has value=GoodValue3
ostest_main: Started user_main at PID=4
user_main: Begin argument test
user_main: Started with argc=5
user_main: argv[0]="ostest"
user_main: argv[1]="Arg1"
user_main: argv[2]="Arg2"
user_main: argv[3]="Arg3"
user_main: argv[4]="Arg4"
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3f960 3f960
ordblks 1 1
mxordblk 3a988 3a988
uordblks 4fd8 4fd8
fordblks 3a988 3a988
raspberrypi-pico:smp
nsh> ls
/:
dev/
proc/
nsh> help
help usage: help [-v] [<cmd>]
. cp exit mkrd rmdir true
[ cmp expr mount set truncate
? dirname false mv kill uname
alias date fdinfo pidof pkill umount
unalias df free printf sleep unset
basename dmesg help ps usleep uptime
break echo hexdump pwd source watch
cat env ls reboot test xd
cd exec mkdir rm time wait
Builtin Apps:
dd hello ostest smp
getprime nsh sh taskset
nsh> smp
Main[0]: Running on CPU1
Main[0]: Initializing barrier
Main[0]: Thread 1 created
Thread[1]: Started
Main[0]: Thread 2 created
Thread[2]: Started
Thread[1]: Running on CPU0
Main[0]: Thread 3 created
Thread[3]: Started
Thread[2]: Running on CPU0
Main[0]: Now running on CPU0
Thread[3]: Running on CPU0
Main[0]: Thread 4 created
Thread[2]: Now running on CPU1
Thread[4]: Started
Main[0]: Thread 5 created
Thread[5]: Started
Thread[4]: Running on CPU1
Main[0]: Now running on CPU1
Thread[3]: Now running on CPU1
Thread[5]: Running on CPU0
Thread[2]: Now running on CPU0
Main[0]: Thread 6 created
Thread[6]: Started
Thread[1]: Now running on CPU1
Thread[4]: Now running on CPU0
Thread[5]: Now running on CPU1
Main[0]: Now running on CPU0
Thread[6]: Running on CPU1
Thread[2]: Now running on CPU1
Thread[3]: Now running on CPU0
Thread[1]: Now running on CPU0
Main[0]: Thread 7 created
Thread[7]: Started
Thread[4]: Now running on CPU1
Thread[2]: Now running on CPU0
Thread[5]: Now running on CPU0
Thread[3]: Now running on CPU1
Main[0]: Thread 8 created
Thread[7]: Running on CPU0
Thread[8]: Started
Thread[6]: Now running on CPU0
Thread[1]: Now running on CPU1
Main[0]: Now running on CPU1
Thread[5]: Now running on CPU1
Thread[8]: Running on CPU1
Thread[7]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[3]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[1]: Now running on CPU0
Thread[5]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[6]: Now running on CPU1
Thread[7]: Now running on CPU0
Thread[3]: Now running on CPU1
Thread[1]: Now running on CPU1
Thread[2]: Now running on CPU0
Thread[4]: Now running on CPU1
Thread[5]: Now running on CPU1
Thread[2]: Calling pthread_barrier_wait()
Thread[3]: Now running on CPU0
Thread[7]: Now running on CPU1
Thread[1]: Calling pthread_barrier_wait()
Thread[8]: Now running on CPU1
Thread[6]: Now running on CPU0
Thread[3]: Calling pthread_barrier_wait()
Thread[4]: Now running on CPU0
Thread[7]: Now running on CPU0
Thread[5]: Now running on CPU0
Thread[2]: Now running on CPU1
Thread[4]: Calling pthread_barrier_wait()
Thread[8]: Now running on CPU0
Thread[7]: Now running on CPU1
Thread[5]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[6]: Calling pthread_barrier_wait()
Thread[7]: Now running on CPU0
Thread[4]: Now running on CPU1
Thread[5]: Calling pthread_barrier_wait()
Thread[7]: Now running on CPU1
Thread[8]: Calling pthread_barrier_wait()
Thread[7]: Calling pthread_barrier_wait()
Thread[1]: Back with ret=0 (I am not special)
Thread[7]: Back with ret=PTHREAD_BARRIER_SERIAL_THREAD (I AM SPECIAL)
Thread[2]: Back with ret=0 (I am not special)
Thread[3]: Back with ret=0 (I am not special)
Thread[4]: Back with ret=0 (I am not special)
Thread[6]: Back with ret=0 (I am not special)
Thread[5]: Back with ret=0 (I am not special)
Thread[8]: Back with ret=0 (I am not special)
Thread[1]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[7]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[3]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[1]: Now running on CPU1
Thread[7]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[3]: Now running on CPU0
Thread[5]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[6]: Now running on CPU1
Thread[4]: Now running on CPU0
Thread[7]: Now running on CPU0
Thread[1]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[5]: Now running on CPU1
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[3]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[5]: Now running on CPU0
Thread[7]: Now running on CPU1
Thread[4]: Now running on CPU0
Thread[3]: Now running on CPU0
Thread[1]: Now running on CPU1
Thread[2]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[5]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[7]: Now running on CPU0
Thread[8]: Now running on CPU1
Thread[3]: Now running on CPU1
Thread[1]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[4]: Now running on CPU1
Thread[2]: Now running on CPU0
Thread[7]: Now running on CPU1
Thread[5]: Done
Thread[3]: Done
Thread[1]: Now running on CPU1
Thread[6]: Done
Thread[4]: Now running on CPU0
Thread[8]: Done
Thread[7]: Now running on CPU0
Thread[1]: Done
Thread[4]: Done
Thread[5]: Now running on CPU0
Thread[3]: Now running on CPU0
Thread[7]: Done
Thread[8]: Now running on CPU0
Thread[1]: Now running on CPU0
Main[0]: Now running on CPU0
Main[0]: Thread 1 completed with result=0
Thread[2]: Now running on CPU1
Thread[2]: Done
Main[0]: Thread 2 completed with result=0
Main[0]: Thread 3 completed with result=0
Main[0]: Thread 4 completed with result=0
Main[0]: Thread 5 completed with result=0
Main[0]: Thread 6 completed with result=0
Main[0]: Thread 7 completed with result=0
Main[0]: Thread 8 completed with result=0
nsh> ostest
stdio_test: write fd=1
stdio_test: Standard I/O Check: printf
stdio_test: write fd=2
stdio_test: Standard I/O Check: fprintf to stderr
ostest_main: putenv(Variable1=BadValue3)
ostest_main: setenv(Variable1, GoodValue1, TRUE)
ostest_main: setenv(Variable2, BadValue1, FALSE)
ostest_main: setenv(Variable2, GoodValue2, TRUE)
ostest_main: setenv(Variable3, GoodValue3, FALSE)
ostest_main: setenv(Variable3, BadValue2, FALSE)
show_variable: Variable=Variable1 has value=GoodValue1
show_variable: Variable=Variable2 has value=GoodValue2
show_variable: Variable=Variable3 has value=GoodValue3
ostest_main: Started user_main at PID=14
user_main: Begin argument test
user_main: Started with argc=5
user_main: argv[0]="ostest"
user_main: argv[1]="Arg1"
user_main: argv[2]="Arg2"
user_main: argv[3]="Arg3"
user_main: argv[4]="Arg4"
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 1 1
mxordblk 39f80 39f80
uordblks 4964 4964
fordblks 39f80 39f80
user_main: getopt() test
getopt(): Simple test
getopt(): Invalid argument
getopt(): Missing optional argument
getopt_long(): Simple test
getopt_long(): No short options
getopt_long(): Argument for --option=argument
getopt_long(): Invalid long option
getopt_long(): Mixed long and short options
getopt_long(): Invalid short option
getopt_long(): Missing optional arguments
getopt_long_only(): Mixed long and short options
getopt_long_only(): Single hyphen long options
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 1 1
mxordblk 39f80 39f80
uordblks 4964 4964
fordblks 39f80 39f80
user_main: libc tests
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 1 1
mxordblk 39f80 39f80
uordblks 4964 4964
fordblks 39f80 39f80
show_variable: Variable=Variable1 has value=GoodValue1
show_variable: Variable=Variable2 has value=GoodValue2
show_variable: Variable=Variable3 has value=GoodValue3
show_variable: Variable=Variable1 has no value
show_variable: Variable=Variable2 has value=GoodValue2
show_variable: Variable=Variable3 has value=GoodValue3
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 1 2
mxordblk 39f80 39f80
uordblks 4964 4944
fordblks 39f80 39fa0
show_variable: Variable=Variable1 has no value
show_variable: Variable=Variable2 has no value
show_variable: Variable=Variable3 has no value
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 2 2
mxordblk 39f80 39f80
uordblks 4944 48cc
fordblks 39fa0 3a018
user_main: setvbuf test
setvbuf_test: Test NO buffering
setvbuf_test: Using NO buffering
setvbuf_test: Test default FULL buffering
setvbuf_test: Using default FULL buffering
setvbuf_test: Test FULL buffering, buffer size 64
setvbuf_test: Using FULL buffering, buffer size 64
setvbuf_test: Test FULL buffering, pre-allocated buffer
setvbuf_test: Using FULL buffering, pre-allocated buffer
setvbuf_test: Test LINE buffering, buffer size 64
setvbuf_test: Using LINE buffering, buffer size 64
setvbuf_test: Test FULL buffering, pre-allocated buffer
setvbuf_test: Using FULL buffering, pre-allocated buffer
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 2 2
mxordblk 39f80 39f80
uordblks 48cc 48cc
fordblks 3a018 3a018
user_main: /dev/null test
dev_null: Read 0 bytes from /dev/null
dev_null: Wrote 1024 bytes to /dev/null
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 2 2
mxordblk 39f80 39f80
uordblks 48cc 48cc
fordblks 3a018 3a018
user_main: task_restart test
Test task_restart()
restart_main: setenv(VarName, VarValue, TRUE)
restart_main: Started with argc=4
restart_main: Started restart_main at PID=15
restart_main: argv[0]="ostest"
restart_main: argv[1]="This is argument 1"
restart_main: argv[2]="Argument 2 here"
restart_main: argv[3]="Lastly, the 3rd argument"
restart_main: Variable=VarName has value=VarValue
restart_main: I am still here
restart_main: I am still here
restart_main: Started with argc=4
restart_main: Started restart_main at PID=15
restart_main: argv[0]="ostest"
restart_main: argv[1]="This is argument 1"
restart_main: argv[2]="Argument 2 here"
restart_main: argv[3]="Lastly, the 3rd argument"
restart_main: Variable=VarName has value=VarValue
restart_main: Started with argc=4
restart_main: argv[0]="ostest"
restart_main: argv[1]="This is argument 1"
restart_main: argv[2]="Argument 2 here"
restart_main: argv[3]="Lastly, the 3rd argument"
restart_main: Variable=VarName has value=VarValue
restart_main: Exiting
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 2 2
mxordblk 39f80 39f80
uordblks 48cc 4904
fordblks 3a018 39fe0
user_main: waitpid test
Test waitpid()
waitpid_main: PID 18 Started
waitpid_start_child: Started waitpid_main at PID=18
waitpid_main: PID 20 Started
waitpid_start_child: Started waitpid_main at PID=20
waitpid_main: PID 21 Started
waitpid_start_child: Started waitpid_main at PID=21
waitpid_test: Waiting for PID=18 with waitpid()
waitpid_main: PID 18 exitting with result=14
waitpid_main: PID 20 exitting with result=14
waitpid_main: PID 21 exitting with result=14
waitpid_test: PID 18 waitpid succeeded with stat_loc=0e00
waitpid_last: Waiting for PID=21 with waitpid()
waitpid_last: PASS: PID 21 waitpid failed with ECHILD. That may be
acceptable because child status is disabled on this thread.
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 2 2
mxordblk 39f80 39f80
uordblks 4904 4904
fordblks 39fe0 39fe0
user_main: mutex test
Initializing mutex
Starting thread 1
Starting thread 2
Thread1 Thread2
Loops 32 32
Errors 0 0
Testing moved mutex
Starting moved mutex thread 1
Starting moved mutex thread 2
Thread1 Thread2
Moved Loops 32 32
Moved Errors 0 0
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 2 2
mxordblk 39f80 37be0
uordblks 4904 6ca4
fordblks 39fe0 37c40
user_main: timed mutex test
mutex_test: Initializing mutex
mutex_test: Starting thread
pthread: Started
pthread: Waiting for lock or timeout
mutex_test: Unlocking
pthread: Got the lock
pthread: Waiting for lock or timeout
pthread: Got the timeout. Terminating
mutex_test: PASSED
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 2 2
mxordblk 37be0 37be0
uordblks 6ca4 6ca4
fordblks 37c40 37c40
user_main: cancel test
cancel_test: Test 1a: Normal Cancellation
cancel_test: Starting thread
start_thread: Initializing mutex
start_thread: Initializing cond
start_thread: Starting thread
start_thread: Yielding
sem_waiter: Taking mutex
sem_waiter: Starting wait for condition
cancel_test: Canceling thread
cancel_test: Joining
cancel_test: waiter exited with result=0xffffffff
cancel_test: PASS thread terminated with PTHREAD_CANCELED
cancel_test: Test 2: Asynchronous Cancellation
... Skipped
cancel_test: Test 3: Cancellation of detached thread
cancel_test: Re-starting thread
restart_thread: Destroying cond
restart_thread: Destroying mutex
restart_thread: Re-starting thread
start_thread: Initializing mutex
start_thread: Initializing cond
start_thread: Starting thread
start_thread: Yielding
sem_waiter: Taking mutex
sem_waiter: Starting wait for condition
cancel_test: Canceling thread
cancel_test: Joining
cancel_test: PASS pthread_join failed with status=ESRCH
cancel_test: Test 5: Non-cancelable threads
cancel_test: Re-starting thread (non-cancelable)
restart_thread: Destroying cond
restart_thread: Destroying mutex
restart_thread: Re-starting thread
start_thread: Initializing mutex
start_thread: Initializing cond
start_thread: Starting thread
start_thread: Yielding
sem_waiter: Taking mutex
sem_waiter: Starting wait for condition
sem_waiter: Setting non-cancelable
cancel_test: Canceling thread
cancel_test: Joining
sem_waiter: Releasing mutex
sem_waiter: Setting cancelable
cancel_test: waiter exited with result=0xffffffff
cancel_test: PASS thread terminated with PTHREAD_CANCELED
cancel_test: Test 6: Cancel message queue wait
cancel_test: Starting thread (cancelable)
Skipped
cancel_test: Test 7: Cancel signal wait
cancel_test: Starting thread (cancelable)
Skipped
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 2 2
mxordblk 37be0 35af8
uordblks 6ca4 8d8c
fordblks 37c40 35b58
user_main: robust test
robust_test: Initializing mutex
robust_test: Starting thread
robust_waiter: Taking mutex
robust_waiter: Exiting with mutex
robust_test: Take the lock again
robust_test: Make the mutex consistent again.
robust_test: Take the lock again
robust_test: Joining
robust_test: waiter exited with result=0
robust_test: Test complete with nerrors=0
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 2 2
mxordblk 35af8 35af8
uordblks 8d8c 8d8c
fordblks 35b58 35b58
user_main: semaphore test
sem_test: Initializing semaphore to 0
sem_test: Starting waiter thread 1
sem_test: Set thread 1 priority to 191
sem_test: Starting waiter thread 2
waiter_func: Thread 1 Started
sem_test: Set thread 2 priority to 128
waiter_func: Thread 1 initial semaphore value = 0
waiter_func: Thread 2 Started
waiter_func: Thread 1 waiting on semaphore
waiter_func: Thread 2 initial semaphore value = 0
waiter_func: Thread 2 waiting on semaphore
sem_test: Starting poster thread 3
sem_test: Set thread 3 priority to 64
poster_func: Thread 3 started
poster_func: Thread 3 semaphore value = -2
poster_func: Thread 3 posting semaphore
waiter_func: Thread 1 awakened
poster_func: Thread 3 new semaphore value = -1
waiter_func: Thread 1 new semaphore value = -1
poster_func: Thread 3 semaphore value = -1
waiter_func: Thread 1 done
poster_func: Thread 3 posting semaphore
waiter_func: Thread 2 awakened
poster_func: Thread 3 new semaphore value = 0
waiter_func: Thread 2 new semaphore value = 0
poster_func: Thread 3 done
waiter_func: Thread 2 done
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 2 3
mxordblk 35af8 34040
uordblks 8d8c 51ec
fordblks 35b58 396f8
user_main: timed semaphore test
semtimed_test: Initializing semaphore to 0
semtimed_test: Waiting for two second timeout
semtimed_test: PASS: first test returned timeout
BEFORE: (1612828854 sec, 650000000 nsec)
AFTER: (1612828856 sec, 650000000 nsec)
semtimed_test: Starting poster thread
semtimed_test: Set thread 1 priority to 191
semtimed_test: Starting poster thread 3
semtimed_test: Set thread 3 priority to 64
poster_func: Waiting for 1 second
semtimed_test: Waiting for two second timeout
poster_func: Posting
semtimed_test: PASS: sem_timedwait succeeded
BEFORE: (1612828856 sec, 650000000 nsec)
AFTER: (1612828857 sec, 660000000 nsec)
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 3 3
mxordblk 34040 34040
uordblks 51ec 51ec
fordblks 396f8 396f8
user_main: condition variable test
cond_test: Initializing mutex
cond_test: Initializing cond
cond_test: Starting waiter
cond_test: Set thread 1 priority to 128
waiter_thread: Started
cond_test: Starting signaler
cond_test: Set thread 2 priority to 64
thread_signaler: Started
thread_signaler: Terminating
cond_test: signaler terminated, now cancel the waiter
cond_test: Waiter Signaler
cond_test: Loops 32 32
cond_test: Errors 0 0
cond_test:
cond_test: 0 times, waiter did not have to wait for data
cond_test: 0 times, data was already available when the signaler run
cond_test: 0 times, the waiter was in an unexpected state when the signaler ran
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 3 3
mxordblk 34040 34040
uordblks 51ec 51ec
fordblks 396f8 396f8
user_main: pthread_exit() test
pthread_exit_test: Started pthread_exit_main at PID=42
pthread_exit_main 42: Starting pthread_exit_thread
pthread_exit_main 42: Sleeping for 5 seconds
pthread_exit_thread 43: Sleeping for 10 second
pthread_exit_thread 43: Still running...
pthread_exit_main 42: Calling pthread_exit()
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 3 2
mxordblk 34040 375b0
uordblks 51ec 72d4
fordblks 396f8 37610
user_main: pthread_rwlock test
pthread_rwlock: Initializing rwlock
pthread_exit_thread 43: Exiting
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 2 2
mxordblk 375b0 39698
uordblks 72d4 51fc
fordblks 37610 396e8
user_main: pthread_rwlock_cancel test
pthread_rwlock_cancel: Starting test
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 2 2
mxordblk 39698 39698
uordblks 51fc 51fc
fordblks 396e8 396e8
user_main: timed wait test
thread_waiter: Initializing mutex
timedwait_test: Initializing cond
timedwait_test: Starting waiter
timedwait_test: Set thread 2 priority to 177
timedwait_test: Joining
thread_waiter: Taking mutex
thread_waiter: Starting 5 second wait for condition
thread_waiter: pthread_cond_timedwait timed out
thread_waiter: Releasing mutex
thread_waiter: Exit with status 0x12345678
timedwait_test: waiter exited with result=0x12345678
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 2 2
mxordblk 39698 39698
uordblks 51fc 51fc
fordblks 396e8 396e8
user_main: timed message queue test
timedmqueue_test: Starting sender
timedmqueue_test: Waiting for sender to complete
sender_thread: Starting
sender_thread: mq_timedsend succeeded on msg 0
sender_thread: mq_timedsend succeeded on msg 1
sender_thread: mq_timedsend succeeded on msg 2
sender_thread: mq_timedsend succeeded on msg 3
sender_thread: mq_timedsend succeeded on msg 4
sender_thread: mq_timedsend succeeded on msg 5
sender_thread: mq_timedsend succeeded on msg 6
sender_thread: mq_timedsend succeeded on msg 7
sender_thread: mq_timedsend succeeded on msg 8
sender_thread: mq_timedsend 9 timed out as expected
sender_thread: returning nerrors=0
timedmqueue_test: Starting receiver
timedmqueue_test: Waiting for receiver to complete
receiver_thread: Starting
receiver_thread: mq_timedreceive succeed on msg 0
receiver_thread: mq_timedreceive succeed on msg 1
receiver_thread: mq_timedreceive succeed on msg 2
receiver_thread: mq_timedreceive succeed on msg 3
receiver_thread: mq_timedreceive succeed on msg 4
receiver_thread: mq_timedreceive succeed on msg 5
receiver_thread: mq_timedreceive succeed on msg 6
receiver_thread: mq_timedreceive succeed on msg 7
receiver_thread: mq_timedreceive succeed on msg 8
receiver_thread: Receive 9 timed out as expected
receiver_thread: returning nerrors=0
timedmqueue_test: Test complete
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 2 2
mxordblk 39698 39f48
uordblks 51fc 4984
fordblks 396e8 39f60
user_main: sigprocmask test
sigprocmask_test: SUCCESS
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 2 2
mxordblk 39f48 39f48
uordblks 4984 4984
fordblks 39f60 39f60
user_main: message queue test
mqueue_test: Starting receiver
mqueue_test: Set receiver priority to 128
mqueue_test: Starting sender
receiver_thread: Starting
mqueue_test: Set sender thread priority to 64
mqueue_test: Waiting for sender to complete
sender_thread: Starting
sender_thread: mq_send succeeded on msg 0
receiver_thread: mq_receive succeeded on msg 0
sender_thread: mq_send succeeded on msg 1
receiver_thread: mq_receive succeeded on msg 1
sender_thread: mq_send succeeded on msg 2
receiver_thread: mq_receive succeeded on msg 2
sender_thread: mq_send succeeded on msg 3
receiver_thread: mq_receive succeeded on msg 3
sender_thread: mq_send succeeded on msg 4
receiver_thread: mq_receive succeeded on msg 4
sender_thread: mq_send succeeded on msg 5
receiver_thread: mq_receive succeeded on msg 5
sender_thread: mq_send succeeded on msg 6
receiver_thread: mq_receive succeeded on msg 6
sender_thread: mq_send succeeded on msg 7
receiver_thread: mq_receive succeeded on msg 7
sender_thread: mq_send succeeded on msg 8
receiver_thread: mq_receive succeeded on msg 8
sender_thread: mq_send succeeded on msg 9
receiver_thread: mq_receive succeeded on msg 9
sender_thread: returning nerrors=0
mqueue_test: Killing receiver
receiver_thread: mq_receive interrupted!
receiver_thread: returning nerrors=0
mqueue_test: Canceling receiver
mqueue_test: receiver has already terminated
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 2 2
mxordblk 39f48 39f48
uordblks 4984 4984
fordblks 39f60 39f60
user_main: signal handler test
sighand_test: Initializing semaphore to 0
sighand_test: Starting waiter task
sighand_test: Started waiter_main pid=60
waiter_main: Waiter started
waiter_main: Unmasking signal 32
waiter_main: Registering signal handler
waiter_main: oact.sigaction=0 oact.sa_flags=0 oact.sa_mask=0000000000000000
waiter_main: Waiting on semaphore
sighand_test: Signaling pid=60 with signo=32 sigvalue=42
waiter_main: sem_wait() successfully interrupted by signal
waiter_main: done
sighand_test: done
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 2 1
mxordblk 39f48 37e60
uordblks 4984 6a84
fordblks 39f60 37e60
user_main: nested signal handler test
signest_test: Starting signal waiter task at priority 101
signest_test: Started waiter_main pid=63
waiter_main: Waiter started
signest_test: Starting interfering task at priority 102
waiter_main: Setting signal mask
interfere_main: Waiting on semaphore
waiter_main: Registering signal handler
signest_test: Started interfere_main pid=66
waiter_main: Waiting on semaphore
signest_test: Simple case:
Total signalled 1240 Odd=620 Even=620
Total handled 1240 Odd=620 Even=620
Total nested 0 Odd=0 Even=0
signest_test: With task locking
Total signalled 2480 Odd=1240 Even=1240
Total handled 2480 Odd=1240 Even=1240
Total nested 0 Odd=0 Even=0
signest_test: With interfering thread
Total signalled 3720 Odd=1860 Even=1860
Total handled 3720 Odd=1860 Even=1860
Total nested 0 Odd=0 Even=0
signest_test: done
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 1 5
mxordblk 37e60 33520
uordblks 6a84 6ae4
fordblks 37e60 37e00
user_main: spinlock test
Start Lock test:
Thread num: 1, Loop times: 10000000
Test type: spinlock
spinlock: Test Results:
spinlock: Final counter: 10000000
spinlock: Average throughput : 2118644 op/s
spinlock: Total execution time: 4720000000 ns
Test type: rspinlock
rspinlock: Test Results:
rspinlock: Final counter: 10000000
rspinlock: Average throughput : 806451 op/s
rspinlock: Total execution time: 12400000000 ns
Test type: seqcount
seqcount: Test Results:
seqcount: Final counter: 10000000
seqcount: Average throughput : 946969 op/s
seqcount: Total execution time: 10570000000 ns
Start Lock test:
Thread num: 2, Loop times: 10000000
Test type: spinlock
spinlock: Test Results:
spinlock: Final counter: 20000000
spinlock: Average throughput : 1100715 op/s
spinlock: Total execution time: 9090000000 ns
Test type: rspinlock
rspinlock: Test Results:
rspinlock: Final counter: 20000000
rspinlock: Average throughput : 740192 op/s
rspinlock: Total execution time: 13510000000 ns
Test type: seqcount
seqcount: Test Results:
seqcount: Final counter: 20000000
seqcount: Average throughput : 1890359 op/s
seqcount: Total execution time: 10580000000 ns
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 5 5
mxordblk 33520 33520
uordblks 6ae4 52e4
fordblks 37e00 39600
user_main: wdog test
wdog_test start...
wdtest_once 0 ns
wdtest_once 0 ns
wdtest_once 0 ns
wdtest_once 0 ns
wdtest_once 0 ns
wdtest_once 0 ns
wdtest_once 0 ns
wdtest_once 0 ns
wdtest_once 1 ns
wdtest_once 1 ns
wdtest_once 1 ns
wdtest_once 1 ns
wdtest_once 1 ns
wdtest_once 1 ns
wdtest_once 1 ns
wdtest_once 1 ns
wdtest_once 10 ns
wdtest_once 10 ns
wdtest_once 10 ns
wdtest_once 10 ns
wdtest_once 10 ns
wdtest_once 10 ns
wdtest_once 10 ns
wdtest_once 10 ns
wdtest_once 100 ns
wdtest_once 100 ns
wdtest_once 100 ns
wdtest_once 100 ns
wdtest_once 100 ns
wdtest_once 100 ns
wdtest_once 100 ns
wdtest_once 100 ns
wdtest_once 1000 ns
wdtest_once 1000 ns
wdtest_once 1000 ns
wdtest_once 1000 ns
wdtest_once 1000 ns
wdtest_once 1000 ns
wdtest_once 1000 ns
wdtest_once 1000 ns
wdtest_once 10000 ns
wdtest_once 10000 ns
wdtest_once 10000 ns
wdtest_once 10000 ns
wdtest_once 10000 ns
wdtest_once 10000 ns
wdtest_once 10000 ns
wdtest_once 10000 ns
wdtest_once 100000 ns
wdtest_once 100000 ns
wdtest_once 100000 ns
wdtest_once 100000 ns
wdtest_once 100000 ns
wdtest_once 100000 ns
wdtest_once 100000 ns
wdtest_once 100000 ns
wdtest_once 1000000 ns
wdtest_once 1000000 ns
wdtest_once 1000000 ns
wdtest_once 1000000 ns
wdtest_once 1000000 ns
wdtest_once 1000000 ns
wdtest_once 1000000 ns
wdtest_once 1000000 ns
wd_start with maximum delay, cancel OK, rest 2305843009213693949
wdtest_recursive 1000000ns
wd_start with maximum delay, cancel OK, rest 2305843009213693949
wdtest_recursive 1000000ns
wd_start with maximum delay, cancel OK, rest 2305843009213693949
wdtest_recursive 1000000ns
wd_start with maximum delay, cancel OK, rest 2305843009213693949
wdtest_recursive 1000000ns
wd_start with maximum delay, cancel OK, rest 2305843009213693949
wdtest_recursive 1000000ns
wd_start with maximum delay, cancel OK, rest 2305843009213693949
wd_start with maximum delay, cancel OK, rest 2305843009213693949
wd_start with maximum delay, cancel OK, rest 2305843009213693949
wdtest_recursive 1000000ns
wdtest_recursive 1000000ns
wdtest_recursive 1000000ns
recursive wdog triggered 6 times, elapsed tick 12
wdtest_recursive 10000000ns
recursive wdog triggered 6 times, elapsed tick 12
wdtest_recursive 10000000ns
recursive wdog triggered 6 times, elapsed tick 12
wdtest_recursive 10000000ns
recursive wdog triggered 6 times, elapsed tick 12
wdtest_recursive 10000000ns
recursive wdog triggered 6 times, elapsed tick 12
wdtest_recursive 10000000ns
recursive wdog triggered 6 times, elapsed tick 12
wdtest_recursive 10000000ns
recursive wdog triggered 6 times, elapsed tick 12
wdtest_recursive 10000000ns
recursive wdog triggered 6 times, elapsed tick 12
wdtest_recursive 10000000ns
recursive wdog triggered 6 times, elapsed tick 12
recursive wdog triggered 6 times, elapsed tick 12
recursive wdog triggered 6 times, elapsed tick 12
recursive wdog triggered 6 times, elapsed tick 12
recursive wdog triggered 6 times, elapsed tick 12
recursive wdog triggered 6 times, elapsed tick 12
recursive wdog triggered 6 times, elapsed tick 12
recursive wdog triggered 6 times, elapsed tick 12
wdog_test end...
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 5 5
mxordblk 33520 33520
uordblks 52e4 52e4
fordblks 39600 39600
user_main: round-robin scheduler test
rr_test: Set thread priority to 1
rr_test: Set thread policy to SCHED_RR
rr_test: Starting first get_primes_thread
First get_primes_thread: 90
rr_test: Starting second get_primes_thread
Second get_primes_thread: 91
rr_test: Waiting for threads to complete -- this should take awhile
If RR scheduling is working, they should start and complete at
about the same time
get_primes_thread id=1 started, looking for primes < 30000, doing 10 run(s)
get_primes_thread id=2 started, looking for primes < 30000, doing 10 run(s)
get_primes_thread id=1 finished, found 3246 primes, last one was 29989
get_primes_thread id=2 finished, found 3246 primes, last one was 29989
rr_test: Done
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 5 5
mxordblk 33520 33520
uordblks 52e4 52e4
fordblks 39600 39600
user_main: barrier test
barrier_test: Initializing barrier
barrier_test: Thread 0 created
barrier_test: Thread 1 created
barrier_test: Thread 2 created
barrier_test: Thread 3 created
barrier_test: Thread 4 created
barrier_test: Thread 5 created
barrier_func: Thread 0 started
barrier_func: Thread 1 started
barrier_func: Thread 2 started
barrier_func: Thread 3 started
barrier_func: Thread 4 started
barrier_func: Thread 5 started
barrier_test: Thread 6 created
barrier_func: Thread 6 started
barrier_test: Thread 7 created
barrier_func: Thread 7 started
barrier_func: Thread 0 calling pthread_barrier_wait()
barrier_func: Thread 1 calling pthread_barrier_wait()
barrier_func: Thread 2 calling pthread_barrier_wait()
barrier_func: Thread 3 calling pthread_barrier_wait()
barrier_func: Thread 4 calling pthread_barrier_wait()
barrier_func: Thread 5 calling pthread_barrier_wait()
barrier_func: Thread 6 calling pthread_barrier_wait()
barrier_func: Thread 7 calling pthread_barrier_wait()
barrier_func: Thread 7, back with status=PTHREAD_BARRIER_SERIAL_THREAD (I AM
SPECIAL)
barrier_func: Thread 0, back with status=0 (I am not special)
barrier_func: Thread 1, back with status=0 (I am not special)
barrier_func: Thread 2, back with status=0 (I am not special)
barrier_func: Thread 3, back with status=0 (I am not special)
barrier_func: Thread 4, back with status=0 (I am not special)
barrier_func: Thread 5, back with status=0 (I am not special)
barrier_func: Thread 6, back with status=0 (I am not special)
barrier_func: Thread 7 done
barrier_func: Thread 0 done
barrier_func: Thread 1 done
barrier_func: Thread 2 done
barrier_test: Thread 0 completed with result=0
barrier_test: Thread 1 completed with result=0
barrier_test: Thread 2 completed with result=0
barrier_func: Thread 3 done
barrier_func: Thread 4 done
barrier_test: Thread 3 completed with result=0
barrier_test: Thread 4 completed with result=0
barrier_func: Thread 5 done
barrier_func: Thread 6 done
barrier_test: Thread 5 completed with result=0
barrier_test: Thread 6 completed with result=0
barrier_test: Thread 7 completed with result=0
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 5 5
mxordblk 33520 33520
uordblks 52e4 52e4
fordblks 39600 39600
user_main: scheduler lock test
sched_lock: Starting lowpri_thread at 97
sched_lock: Set lowpri_thread priority to 97
sched_lock: Starting highpri_thread at 98
sched_lock: Set highpri_thread priority to 98
sched_lock: Waiting...
sched_lock: PASSED No pre-emption occurred while scheduler was locked.
sched_lock: Starting lowpri_thread at 97
sched_lock: Set lowpri_thread priority to 97
sched_lock: Starting highpri_thread at 98
sched_lock: Set highpri_thread priority to 98
sched_lock: Waiting...
sched_lock: PASSED No pre-emption occurred while scheduler was locked.
sched_lock: Finished
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 5 5
mxordblk 33520 33520
uordblks 52e4 52e4
fordblks 39600 39600
user_main: vfork() test
vfork_test: Child 111 ran successfully
user_main: smp call test
smp_call_test: Test start
smp_call_test: Call cpu 0, nowait
smp_call_test: Call cpu 0, wait
smp_call_test: Call cpu 1, nowait
smp_call_test: Call cpu 1, wait
smp_call_test: Call multi cpu, nowait
smp_call_test: Call in interrupt, wait
smp_call_test: Call multi cpu, wait
smp_call_test: Test success
Final memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3e8e4 3e8e4
ordblks 1 5
mxordblk 39f80 33520
uordblks 4964 52e4
fordblks 39f80 39600
user_main: Exiting
ostest_main: Exiting with status 0
nsh>
seeed-xiao-rp2040:usbnsh
NuttShell (NSH) NuttX-13.0.0
nsh> help
help usage: help [-v] [<cmd>]
. cp exit mkrd rmdir set
truncate
? dirname false mv kill uname
unalias df free printf sleep ps
usleep uptime
break echo hexdump pwd source watch
cat env ls reboot test xd
cd exec mkdir wait
Builtin Apps:
dd getprime hello nsh ostest
nsh> ostest
stdio_test: write fd=1
stdio_test: Standard I/O Check: printf
stdio_test: write fd=2
stdio_test: Standard I/O Check: fprintf to stderr
ostest_main: putenv(Variable1=BadValue3)
ostest_main: setenv(Variable1, GoodValue1, TRUE)
ostest_main: setenv(Variable2, BadValue1, FALSE)
ostest_main: setenv(Variable2, GoodValue2, TRUE)
ostest_main: setenv(Variable3, GoodValue3, FALSE)
ostest_main: setenv(Variable3, BadValue2, FALSE)
show_variable: Variable=Variable1 has value=GoodValue1
show_variable: Variable=Variable2 has value=GoodValue2
show_variable: Variable=Variable3 has value=GoodValue3
ostest_main: Started user_main at PID=4
user_main: Begin argument test
user_main: Started with argc=5
user_main: argv[0]="ostest"
user_main: argv[1]="Arg1"
user_main: argv[2]="Arg2"
user_main: argv[3]="Arg3"
user_main: argv[4]="Arg4"
End of test memory usage:
BEFORE AFTER
======== ======== ========
arena 3f960 3f960
ordblks 1 1
mxordblk 3a988 3a988
uordblks 4fd8 4fd8
fordblks 3a988 3a988
user_main: getopt() test
getopt(): Simple test
getopt(): Invalid argument
getopt(): Missing optional argument
getopt_long(): Simple test
getopt_long(): No short options
getopt_long(): Argument for --option=argument
getopt_long(): Invalid long option
getopt_long(): Mixed long and short options
getopt_long(): Invalid short option
getopt_long(): Missing optional arguments
getopt_long_only(): Mixed long and short options
getopt_long_only(): Single hyphen long options
End of test memory usage:
VARIABLE BEFORE AFTER
=======
arena 3f960 3f960
ordblks 1 1
mxordblk 3a988 3a988
uordblks 4fd8 4fd8
fordblks 3a988 3a988
user_main: libc tests
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3f960 3f960
ordblks 1 1
mxordblk 3a988 3a988
uordblks 4fd8 4fd8
fordblks 3a988 3a988
show_variable: Variable=Variable1 has value=GoodValue1
show_variable: Variable=Variable2 has value=GoodValue2
show_variable: Variable=Variable3 has value=GoodValue3
show_variable: Variable=Variable1 has no value
show_variable: Variable=Variable2 has value=GoodValue2
show_variable: Variable=Variable3 has value=GoodValue3
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3f960 3f960
ordblks 1 2
mxordblk 3a988 3a988
uordblks 4fd8 4fb8
fordblks 3a988 3a9a8
show_variable: Variable=Variable1 has no value
show_variable: Variable=Variable2 has no value
show_variable: Variable=Variable3 has no value
End of test memory usage:
EFORE AFTER
======== ======== ========
arena 3f960 3f960
or 2
mxordblk 3a988 3a988
uordblks 4fb8 4f40
fordblks 3a9a8 3aa20
user_main: setvbuf test
setvbuf_test: Test NO buffering
setvbuf_test: Using NO buffering
setvbuf_test: Test default FULL buffering
setvbuf_test: Using default FULL buffering
setvbuf_test: Test FULL buffering, buffer size 64
setvbuf_test: Using FULL buffering, buffer size 64
setvbuf_test: Test FULL buffering, pre-allocated buffer
setvbuf_test: Using FULL buffering, pre-allocated buffer
setvbuf_test: Test LINE buffering, buffer size 64
setvbuf_test: Using LINE buffering, buffer size 64
setvbuf_test: Test FULL buffering, pre-allocated buffer
setvbuf_test: Using FULL buffering, pre-allocated buffer
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 3f960 3f960
ordblks 2 2
mxordblk 3a988 3a988
uordblks 4f40 4f40
fordblks 3aa20 3aa20
user_main: /dev/null test
dev_null: Read 0 bytes from /dev/null
dev_null: Wrote 1024 bytes to /dev/null
End of test memory usage:
VARIABLE ER
======== ======== ========
arena 3f960 3f960
ordblks 2 2
mxordblk 3a988 3a988
uordblks 4f40 4f40
fordblks 3aa20 3aa20
seeed-xiao-rp2040:userleds
NuttShell (NSH) NuttX-13.0.0
h>
nsh> help
help usage: help [-v] [<cmd>]
. cp exit mkrd rmdir expr
mount set truncate
uname
idof pkill umount
unalias df free printf sleep unset
basename dmesg help ps usleep uptime
break echo hexdump pwd source watch
cat env ls reboot test xd
cd exec mkdir rm time wait
Builtin Apps:
dd hello nsh sh
getprime leds ostest
nsh>
nsh> leds -h
leds_main: Starting the led_daemon
leds_main: led_daemon started
led_daemon (pid# 4): Running
led_daemon: Opening /dev/userleds
led_daemon: Supported LEDs 0x07
led_daemon: LED set 0x01
nsh> led_daemon: LED set 0x02
led_daemon: LED set 0x03
led_daemon: LED set 0x04
led_daemon: LED set 0x05
led_daemon: LED set 0x06
led_daemon: LED set 0x07
led_daemon: LED set 0x06
led_daemon: LED set 0x05
led_daemon: LED set 0x04
led_daemon: LED set 0x03
led_daemon: LED set 0x02
led_daemon: LED set 0x01
led_daemon: LED set 0x00
led_daemon: LED set 0x01
led_daemon: LED set 0x02
nsh>
xiao-seeduino:nsh
help
help usage: help [-v] [<cmd>]
? cmp exit help mkrd uname
break exec false hexdump true xd
Builtin Apps:
hello nsh sh
nsh> hello
Hello, World!!
nsh>
--
Matteo Golin
signature.asc
Description: PGP signature
