Giter Site home page Giter Site logo

sonydevworld / spresense Goto Github PK

View Code? Open in Web Editor NEW
141.0 16.0 104.0 220.25 MB

Spresense SDK source code

Home Page: https://developer.sony.com/develop/spresense/docs/home_en.html

License: Other

Makefile 2.64% C 62.41% C++ 30.40% Assembly 0.20% Ruby 0.78% Python 2.51% Shell 0.98% Batchfile 0.06% Dockerfile 0.01% Emacs Lisp 0.01% GDB 0.01%
nuttx

spresense's Introduction

twitter spresense handle twitter devworld handle

Welcome to SPRESENSE project

Clone this repository and update submodules.

$ git clone --recursive https://github.com/sonydevworld/spresense.git

Submodules

spresense                  - This repository
|-- nuttx                  - NuttX original kernel + SPRESENSE port
|-- sdk
|   `-- apps               - NuttX original application + SPRESENSE port
`-- externals
    `-- nnablart
      `-- nnabla-c-runtime - Neural Network Runtime library

Update SDK2.x.x to SDK3.x.x

The URL of the submodule (nuttx, sdk/apps) in the spresense repository has been changed since SDK3.0.0. If you cloned the repository before SDK2.x, please run the following instructions to update the URL of the submodule.

$ cd spresense
$ git fetch origin
$ git checkout <remote branch>
$ git submodule sync
$ git submodule update
  • <remote branch>
    • For master branch: origin/master
    • For develop branch: origin/develop

Spresense SDK build instructions

Build instructions are documented at Spresense SDK Getting Started Guide.

Prerequisites

Install the necessary packages and GCC ARM toolchain for cross-compilation.

$ wget https://raw.githubusercontent.com/sonydevworld/spresense/master/install-tools.sh
$ bash install-tools.sh

Build

Go to the folder where you cloned the {SDK_FULL}, and enter the sdk folder name:

$ cd spresense/sdk

Set up the SDK configuration

$ tools/config.py examples/hello

Build the example image:

$ make

A nuttx.spk file appears in the sdk folder when this step has successfully finished. This file is the final result and can be flashed into the your board.

Using docker

A pre-compiled docker container is available with all the pre-requisite that is needed in order to build the Spresense SDK.

In order to start using it simply type:

$ source spresense_env.sh

This script will create an alias spresense which should proceed the regular SDK build scripts and Make commands.

Examples:

SpresenseSDK: $ spresense tools/config.py examples/hello
SpresenseSDK: $ spresense make

spresense's People

Contributors

chibiegg avatar dflogeras avatar hlsony avatar jutava avatar kamtom480 avatar nimish avatar pkarashchenko avatar rajames avatar rybok avatar shixuejun-neusoft avatar shunichi-k avatar spresense avatar takumiando avatar te-karlkomierowski avatar te-shuheiookita avatar toolboc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

spresense's Issues

Issues configuring or building an example with pre-compiled docker image

Description of the issue:

When using the prebuilt docker image I'm unable to configure and/or build the
hello example after following instructions in README.

How to reproduce:

$ git clone --recursive https://github.com/sonydevworld/spresense.git
$ git submodule foreach git checkout master

Then using the docker image:

$ source spresense_env.sh 
This script has to be sourced.
. ./spresense_env.sh or source spresense_env.sh
 
Using default tag: latest
latest: Pulling from devworldsony/spresense-sdk-env
Digest: sha256:3a2f02cf9e0a1063585db66ddca43d5633dd65545ea9d00dd88983de39ca24d6
Status: Image is up to date for devworldsony/spresense-sdk-env:latest
docker.io/devworldsony/spresense-sdk-env:latest
After this script executed successfully:
Usage: spresense [command]
This will run command in the Spresense SDK docker environment.

Followed by:

SpresenseSDK:$ spresense sh -c "cd /spresense/sdk && tools/config.py examples/hello"
make[1]: *** [include/arch/board] Error 1
make: *** [olddefconfig] Error 2
Post process failed. 512
Try 'make distclean' first.

Describe your hardware setup:

Software version used:

On master (commit: 6cb78083)

Audio subsystem Memory manager compatibility with malloc().

I am building an application using PCM capture objif example as a starting point, starting to integrate other examples with it. I am encountering an error in the audio subsystem when I run the mag example as an additional task with lower priority, and I think the issue might be caused by the use of malloc() for the g_data buffer After running for some undetermined time with no issue (between 5 minutes up to a few hours), the following error comes up inside CaptureBuffer CaptureComponent::getCapBuf(uint32_t cap_sample) : AS_ATTENTION_SUB_CODE_MEMHANDLE_ALLOC_ERROR, followed by other errors across audio subsystems, and the capture of audio data stops. Mag data recording doesn't stop.

The error doesn't appear when I run the mag example as a task without g_data and simply discarding mag data. Does MemManager fence off the assigned RAM space within nuttx, is it something I have to account for? Any advice would be appreciated.

Using the code with sensor data as model input

Hello.

How could the code be modified to pass raw sensor data to a compiled model.
I assume the loading would be changed but what would replace it? How would this data be input to the model?
Additionally, could we load a csv and pass it line by line?

Thank you.

Can't use <string> in C++

Hi!

In order to do C++ string manipulations we are using <string> . But including this file results in following errors:

arm-none-eabi-ld: /home/arjan/Documents/EdgeImpulse/Firmware/sony/spresense/nuttx/staging/libapps.a(helloxx_main.o): in function `void std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct<char const*>(char const*, char const*, std::forward_iterator_tag)':
/usr/include/newlib/c++/9.2.1/bits/basic_string.tcc:225: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_S_copy_chars(char*, char const*, char const*)'
arm-none-eabi-ld: /home/arjan/Documents/EdgeImpulse/Firmware/sony/spresense/nuttx/staging/libapps.a(helloxx_main.o): in function `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()':
/usr/include/newlib/c++/9.2.1/bits/basic_string.h:658: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_dispose()'

Meaning that the std libs don't support the string. Could you provide support for this?

build_env.sh source error

I followed the Spresense SDK Getting Started Guide and successfully finished. But failed to do Examples and Tutorials due to the following error.

% source ~/spresenseenv/setup <= this did not make any difference
% source tools/build-env.sh 
tools/build-env.sh:225: = not found

My environment is Mac (macOS 12.4, M1 Pro).

The line 225 is the following code.

https://github.com/sonydevworld/spresense/blob/master/sdk/tools/build-env.sh#L225

When I simply changed the equation to the one with -z, this will pass. But encountered another = not found error as below.

% source tools/build-env.sh
Warning: Spresense user application directory is not set.
         Please run
         $ spr-set-approot <application home directory>
=======================================
cat: /Users/takenori/Documents/sdk/tools/mkversion.sh: No such file or directory
   SDK_VERSION = 
cat: /Users/takenori/Documents/sdk/tools/mkversion.sh: No such file or directory
 NUTTX_VERSION = 
 SPRESENSE_SDK = /Users/takenori/Documents
SPRESENSE_HOME = 
   GCC_VERSION = arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors 9-2019-q4-major) 9.2.1 20191025 (release) [ARM/arm-9-branch revision 277599]
          HOST = Darwin arm64
=======================================
Info: Please update the version to 4.0 or later
      The spresense tools completion can not work well
      because of old bash version.
% spr-set-approot /Users/takenori/Documents/open_repos/spresense 
spr-set-approot:4: = not found
% spr-create-approot ~/Documents/open_repos/my_sp_apps
spr-create-approot:4: = not found

It looks this is caused simply because == is used for the comparison. Is there anything I missed here?

The SDK example fsperf not working.

I tried loading the example fsperf and after successfully flashing the nuttx.spk, the Spresense board cannot be communicated to via the serial connection. I attempted to communicate via the Spresense SDK VSCode IDE "Open Serial Port" - the terminal remains blank. I tried using the $screen /dev/ttyUSB0 115200 - screen remains blank.

I can flash another example successfully and able to then connect to the board via serial port.

Using the latest 3.0 bootloader version.

Why RTC lower-half driver calls a function from upper-half one?

My understanding, RTC drivers are designed that it can be separated by upper-half and lower-half in NuttX.
https://nuttx.apache.org/docs/latest/components/drivers/character/rtc.html

But the up_rtc_gettime() implemented in nuttx/arch/arm/src/cxd56_rtc.c is called by cxd56_rdtime() in nuttx/arch/arm/src/cxd56_rtc_lowerhalf.c.

Why is a upper-half function called in lower-half one?
I'd like to understand these design and implementation.

I cannot switch two or more lower-half drivers with a generic upper-half driver(nuttx/drivers/timers/arch_rtc.c) in current SDK.

Not support hardware version v1.0B/v1.0C of WIFI board (iS110B)

Description of the issue:

If use hardware version v1.0C of WIFI board (iS110B), WIFI driver reports error
(About hardware version, refer to https://idy-design.com/product/is110b.html.)

up_assert: Assertion failed at file:wireless/gs2200m.c line: 1007 task: AppBringUp
up_registerdump: R0: 00000001 0d02bee0 000000e0 0d02e18c 0d02bee0 0d034248 0d02e178 0d0107c5
up_registerdump: R8: 0d026aa8 000003ef 0d033600 00000000 00000000 0d034248 0d002531 0d0027b0
up_registerdump: xPSR: 61000000 BASEPRI: 000000e0 CONTROL: 00000004
up_registerdump: EXC_RETURN: ffffffe9
up_dumpstate: sp:     0d034248
up_dumpstate: IRQ stack:
up_dumpstate:   base: 0d02b400
up_dumpstate:   size: 00000800
up_dumpstate:   used: 000000d0
up_dumpstate: User stack:
up_dumpstate:   base: 0d034380
up_dumpstate:   size: 000007e4
up_dumpstate:   used: 000002d0
up_stackdump: 0d034240: 0d033b9c 0d002675 000000e0 00000004 00000000 00000000 0d034248 0d002531
up_stackdump: 0d034260: 0d0027b0 00000006 000006e0 0d0107c5 00000000 0d0103e1 00000000 0d0268b0
up_stackdump: 0d034280: 000001a5 f8000600 a5a5a5a5 a5a5a5a5 0d038920 0d0342c0 00000000 0d02a704
up_stackdump: 0d0342a0: 0d0268b0 0d02a704 00000000 0d010915 0d038920 0d026928 0d0268b0 0d0113b3
up_stackdump: 0d0342c0: 30455441 04000a0d 041014a0 00000006 0d02cc70 0d034300 0d02cbf8 00000005
up_stackdump: 0d0342e0: 00000000 0d034300 0d02cbf8 00000005 00000000 0d00d403 00000000 00000005
up_stackdump: 0d034300: 97010104 99010104 9b010104 9d010105 00000000 00000000 0d02689d 00000000
up_stackdump: 0d034320: 00000000 00000000 00000000 0d00d035 00000000 01000000 00000000 00000000
up_stackdump: 0d034340: 00000000 43410000 7665642f 6d69742f 00317265 00000000 00000000 00000000
up_stackdump: 0d034360: 00000000 0d003549 00000001 0d034384 00000101 0d004417 00000000 00000000
up_taskdump: Idle Task: PID=0 Stack Used=0 of 0
up_taskdump: hpwork: PID=1 Stack Used=344 of 2028
up_taskdump: lpwork: PID=3 Stack Used=584 of 2028
up_taskdump: lpwork: PID=4 Stack Used=584 of 2028
up_taskdump: AppBringUp: PID=5 Stack Used=776 of 2020
up_taskdump: cxd56_pm_task: PID=6 Stack Used=352 of 996

How to reproduce:

  1. Plugin WIFI board v1.0C (iS110B)
  2. tools/config.py feature/wifi
  3. make
  4. Flash spk
  5. After rebooting, you will find above error message.

Describe your hardware setup:

Plugin WIFI board v1.0C (iS110B)

Software version used:

v2.1.0

Investigation

According to https://idy-design.com/product/is110b.html, there are 3 versions (v1.0A, v1.0B and v1.0C) of WIFI board for Spresense main board.
For different hardware version, the connected pin is a little different.

After checking latest codes, find current codes are only for hardware version v1.0A.
e.g.
https://github.com/sonydevworld/spresense-nuttx/blob/7686b71a7cfe17bf8f3fb1be7749594278b0c808/boards/arm/cxd56xx/common/src/cxd56_gs2200m.c#L243-L245

In market, we can buy WIFI board with the hardware version v1.0C. Current codes cannot work well.
So we should update codes for different hardware version as Barry-Xu-2018/spresense-nuttx@1213564

Unable to setup SDK CLI for windows 10

I have been following the getting started guide for SDK CLI for windows 10 from the the website https://developer.sony.com/develop/spresense/docs/sdk_set_up_en.html#_development_environment
After installing MYSYS2 . I opened MYSYS2 MYSYS and tried the following command

curl -L https://raw.githubusercontent.com/sonydevworld/spresense/master/install-tools.sh > install-tools.sh

I got an error stating it was unable to connect to the port
Thus I manually copy pasted the content from the github Repository file
Then when I ran this cmd

bash install-tools.sh

I got the message
Sorry this platform is not supported
Even though I had installed MYSYS2 and had a windows 10 OS

Thus I changed the following code in the install-tools.sh file from line 330

 case "`uname -s`" in
Linux)
    OS=linux
    ;;
MSYS2*)
    OS=win
    ;;
Darwin)
    OS=mac
    ;;
*)
    echo Sorry, this platform is not supported.
    exit 1
    ;;
esac

to

case "`uname -s`" in
Linux)
    OS=linux
    ;;
MSYS2*)
    OS=win
    ;;
Darwin)
    OS=mac
    ;;
*)
    OS=win
    ;;
    # echo Sorry, this platform is not supported.
    # exit 1
    # ;;
esac

With this ,the problem was solved and all the packages got installed , however I am not sure if I everything is working properly . This is only a temporary solution for windows 10 users .
Then I ran the next command

 source ~/spresenseenv/setup

which gave me an error No such file or directory

I request repository owners to look into it . Thank You

Makefiles broken on Windows/MSYS

The Makefiles are broken on Windows because quotes are erroneously included in targets. For example, in nuttx/tools/Config.mk:

ifeq ($(CONFIG_WINDOWS_NATIVE),y)
  DEFINE ?= "$(TOPDIR)\tools\define.bat"
  INCDIR ?= "$(TOPDIR)\tools\incdir.bat"
else ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
  DEFINE ?= "$(TOPDIR)/tools/define.sh" -w
  INCDIR ?= "$(TOPDIR)/tools/incdir$(HOSTEXEEXT)" -w
else
  DEFINE ?= "$(TOPDIR)/tools/define.sh"
  INCDIR ?= "$(TOPDIR)/tools/incdir$(HOSTEXEEXT)"
endif

This happens in so many places that I'm wondering if anyone is building on Windows at all? It definitely doesn't work with the MSYS make app.

There are further errors with slashes being removed from paths altogether.

Unable to run spresense SDK example "bluetooth_le_central" with bluetooth module HM-10

image
HM-10 Pinout

image
Spresense Pinout

Hi Community,
I am new to Microcontroller. Hope I explain my problem clearly enough.
I connected the RXD and TXD on my HM-10 to UART2_RX and UART2_TX on spresense. Then I try to build and fresh the "bluetooth_le_central" example on the spresense SDK Github repo.
The code is successfully fresh into spresense but when I run it. The nuttx give me this ERROR:
[BT][Common] Initialization failed(HAL initialize failed)
After checking the documentation and debugging. I found out that the Bluetooth module initialize is failed
I have an error on this function

image
I am looking for a solution or some clues.

Thanks,
Zhenyu

FYI,
I used the same setup on Arduino IDE and could enter the AT mode of the Bluetooth. I think that means I got the pin right.

How can I setup spresense board with RFID module.

I want to develop an application with RFID , however it seems RFID is not compatible with spresense (Arduino IDE ,I mean there is no specific library). I would like to know if its possible to integrate them , I don't have any clue and need references so I could learn to integrate them if they can be integrated. Thank You

Better OpenOCD config

The OpenOCD config creates all the CPU cores in accordance to their AP number

# Create each CPU targets
target create $_CHIPNAME.cpu3 cortex_m -dap $_CHIPNAME.dap -ap-num 3

However, this makes it incompatible with targets using HLA_SWD like the ST-Link, who can only access the first AP (=0). Other config files have a check for this

https://github.com/openocd-org/openocd/blob/573a39b36cf133bb7403b12337301a5616112f1a/tcl/target/stm32mp13x.cfg#L6-L47

And I think it should be included here too.

assert() cannot be used in expression context

@kamtom480: a question for you:

The implementation of assert() in spresense comes from nuttx. assert() is defined as ASSERT() when NDEBUG is not defined. See https://github.com/sonydevworld/spresense-nuttx/blob/new-master/include/assert.h:

#define ASSERT(f)        do { if (!(f)) PANIC(); } while (0)

This version of assert() cannot be used in an expression context, such as a comma expression. It can only be used in statement context.

We are merging recent changes from upstream MicroPython into CircuitPython, and there are several places where MicroPython uses assert() in a comma expression here:
https://github.com/micropython/micropython/blob/05cb1406ad1b421a238faf763e19f4119f5f6bb2/py/obj.h#L921-L926

#define mp_type_assert_not_bool_int_str_nonetype(t) (                                     \
    MP_STATIC_ASSERT_NOT_MSC((t) != &mp_type_bool), assert((t) != &mp_type_bool),         \
    MP_STATIC_ASSERT_NOT_MSC((t) != &mp_type_int), assert((t) != &mp_type_int),           \
    MP_STATIC_ASSERT_NOT_MSC((t) != &mp_type_str), assert((t) != &mp_type_str),           \
    MP_STATIC_ASSERT_NOT_MSC((t) != &mp_type_NoneType), assert((t) != &mp_type_NoneType), \
    1)

This doesn't work with the statement-only do ... while(0) version of assert() above, and so we can't build the spresense port in in our merge branch right now.

man 3 assert says assert() has the signature void assert(scalar expression);, though it might be implemented as a macro.

The other versions of assert() in the other CircuitPython and MicroPython can be used in expressions.

I am not sure how to fix this: the particular macro above is tricky and hard to rewrite with the nuttx assert. The nuttx assert could be modified, but that is a change in that submodule. Or a new version of assert() could be introduced to substitute for the nuttx version.

What do you think? Thanks.

We don't have a merge PR yet, but @tannewt and I are working in https://github.com/dhalbert/circuitpython/tree/v1.20-merge

wireless/gs2200m.c:1638:53: error: 'struct net_driver_s' has no member named 'd_ipaddr'

i am new for spresense and NuttX, not sure where could be right place to post this issue. if i am mistaken, please enlighten and guide to the correct path.

i was trying to enable gs2200m Wi-Fi add-on board to connect wireless network.
using menuconfig to enable driver/wireless/gs2200m and apps/wireless/gs2200m, then meeting the following error during build.

wireless/gs2200m.c: In function 'gs2200m_join_network':
wireless/gs2200m.c:1638:53: error: 'struct net_driver_s' has no member named 'd_ipaddr'
   inet_aton(addr[0], (struct in_addr *)&dev->net_dev.d_ipaddr);
                                                     ^

seems that i am just missing some configuration, any help welcome 👍

AAC codec?

Posting here because the forums are broken. The SDK defines AS_CODECTYPE_AAC but it doesn't appear to be functional. There is no AAC DSP binary, either. Does one exist somewhere? Curious if the source code to the MP3ENC binary is available anywhere, too.

asmp frameworkのサンプルが動かない

asmpのサンプルが動かないです。
何かヒントがありますか?

環境

Ubuntu 18.04 64bit
gcc version 6.3.1
SPRESENSE_ADN_SDK_1.0.000
コンフィグはexample/asmpを使用しました。

現象

実行時にはROMFSのマウントまでは成功していて、その中にhelloも入ってました。
以下のコマンド実行後にフリーズします。

$ ./tools/flash.sh  -b2000000 nuttx.spk && miniterm.py /dev/ttyUSB0 115200 --raw
>>> Install files ...
install -b 2000000
Install nuttx.spk
Waiting for XMODEM (CRC or 1K) transfer. Ctrl-X to cancel.
.................................................................................................................................................................162464 bytes loaded.
Package validation is OK.
Saving package to "nuttx"
updater# sync
updater# Restarting the board ...
reboot
--- Miniterm on /dev/ttyUSB0  115200,8,N,1 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---

NuttShell (NSH)
nsh> asmp
Registering romdisk at /dev/ram0
Mounting ROMFS filesystem at target=/romfs with source=/dev/ram0
attached at 00010000
(ここでフリーズ)

UART2 issue?

For background - I have 4 released boards:

  1. Prerelease Spritzer Green board (UART2 activation switch)
  2. Prerelease Spritzer Black board (UART2 activated by default)
  3. SPRESENSE Black board (UART2 activated by default)*
  • board has >EP-GW< underneath
  • SONY in big letters
  • S logo
  • SPRESENSE in big letters
  1. SPRESENSE Black board - Post release (retail - Aug 2018) board (UART2 activated by default)*

For boards 1 & 2 I have had no issues, and been work off of board 3 since received (~late July). Post release I was sent 4 the retail version (main/ext) and have not opened.

It is with board 3, and perhaps the retail board 4 that I am having problems with UART2. Serail2 does not transmit/receive. (Pins 0/1). Programing methods function as If transmission functions correctly. and for sure there is no data received during a serial dialog.

Same program used on boards 1,2,3. Other operations seem to work as expected.
Questions:

  • Has there been a core change that now requires activating UART2?
  • Perhaps board (3) and the flashed version are incompatible (misaligned) not allowing UART2 to function properly?

Advice appreciated

Sample code elements for reference. Interfacing with an ESP8266 module. Serial2.println("AT") executes but there is no indication that it is sent over TX. Consequently, there is no reply. Same code, same wiring, same module used on boards 1 & 2 without issue.
** Serial2.begin(115200);
while(!Serial2){
; // wait for ESP8266 port to open/connect; vehicle Monitoring
}
Serial2.println("AT"); // Check: OK is returned
waitTime(500);
if (MONITOR) while (Serial2.available() > 0) Serial.write(Serial2.read());**

Why should we enable power_button pin of alt1250?

Could you give me more details about this problem and its fix?

commit df57c1cba4b67642c75ad57a1ff722e6b0ddd924
Author: SPRESENSE <[email protected]>
Date:   Thu Jul 28 19:09:25 2022 +0900

    drivers/modem/alt1250: Temporary enable power_button pin
    
    Some LTE board cannot boot up correctly right now.
    With this fix, problem LTE board can boot up correctly.
    So, apply this fix before apply main fix.

diff --git a/boards/arm/cxd56xx/spresense/src/cxd56_alt1250_power.c b/boards/arm/cxd56xx/spresense/src/cxd56_alt1250_power.c
index 4f19b26921..24fa3cf054 100644
--- a/boards/arm/cxd56xx/spresense/src/cxd56_alt1250_power.c
+++ b/boards/arm/cxd56xx/spresense/src/cxd56_alt1250_power.c
@@ -81,6 +81,10 @@ void board_alt1250_poweron(void)
 
   cxd56_gpio_write(ALT1250_SHUTDOWN, true);
 
+  /* Workaround: Power button pin set to high before power on */
+
+  cxd56_gpio_write(ALT1250_LTE_POWER_BUTTON, true);
+
   board_power_control(POWER_LTE, true);
 }

<cmath> not supported for c++

While math.h functions are available to C programs, the equiveant (or bridging functions) do not appear to be able to C++ programs. This may not strictly be a bug, just an unsupported feature. The nuttx mainline has the same issue unless you active "Standand math library" option (on ubuntu with gcc). This option issue exists in the spresense build system but is not enabled in Kconfig for some reason. I have been able to work around the issue in my project by creating bridging functions in C.

To reproduce add.. (i added spaces because of markup)

#include < cmath >

to helloxx_main.cxx in the helloxx example.

CXX:  helloxx_main.cxx
In file included from /home/seal/sony/spresense/sdk/include/arch/math.h:41:0,
                 from /home/seal/sony/spresense/nuttx/include/math.h:52,
                 from /home/seal/sony/spresense/nuttx/include/cxx/cmath:46,
                 from helloxx_main.cxx:44:
/home/seal/spresenseenv/usr/arm-none-eabi/include/c++/7.3.1/math.h:38:12: error: 'std::abs' has not been declared
 using std::abs;
            ^~~
/home/seal/spresenseenv/usr/arm-none-eabi/include/c++/7.3.1/math.h:39:12: error: 'std::acos' has not been declared
 using std::acos;
            ^~~~
/home/seal/spresenseenv/usr/arm-none-eabi/include/c++/7.3.1/math.h:40:12: error: 'std::asin' has not been declared
 using std::asin;
            ^~~~

etc...

Are there micro SD cards that work and micro SD cards that don't?

I noticed that when using microSD cards with the Spresense expansion board, some can be used and some cannot.

SanDisk Ultra SDSQUA4-032G-EPK and KIOXIA KCA-MC016GS are not recognized when inserted into the expansion board, while Transcend 2GB TS2GUSD and Toshiba 16GB MU-J016GX microSD cards can be used.

I have confirmed that the BtoB connector is connected when using any of the microSD cards, and the PC can recognize and handle any of the microSD cards.
Also, they are all SDHC micro SDcards formatted with FAT32.

Why are some of these same micro SD cards available and others are not?

SanDisk Ultra SDSQUA4-032G-EPK (SDHC class 10) ×
KIOXIA KCA-MC016GS (SDHC class 10) ×
Transcend 2GB TS2GUSD (SDHC)○
Toshiba 16GB MU-J016GX (SDHC class 10

Importing inttypes.h fails due to misplaced wchar_t definition

Description of the issue:

Including inttypes.h in a .c file fails.

How to reproduce:

The issue should be easy to reproduce by just creating a importer.c file with a single line:

#include <inttypes.h>

Compiling that file will produce the following errors:

In file included from /home/guberti/Desktop/demonstrate_inttypes_bug/importer.c:1:0:
/home/guberti/.arduino15/packages/SPRESENSE/tools/spresense-sdk/2.2.1/spresense/release/nuttx/include/inttypes.h:185:31: error: unknown type name 'wchar_t'
 intmax_t  wcstoimax(FAR const wchar_t *nptr, FAR wchar_t **endptr, int base);
                               ^
/home/guberti/.arduino15/packages/SPRESENSE/tools/spresense-sdk/2.2.1/spresense/release/nuttx/include/inttypes.h:185:50: error: unknown type name 'wchar_t'
 intmax_t  wcstoimax(FAR const wchar_t *nptr, FAR wchar_t **endptr, int base);
                                                  ^
/home/guberti/.arduino15/packages/SPRESENSE/tools/spresense-sdk/2.2.1/spresense/release/nuttx/include/inttypes.h:186:31: error: unknown type name 'wchar_t'
 uintmax_t wcstoumax(FAR const wchar_t *nptr, FAR wchar_t **endptr, int base);
                               ^
/home/guberti/.arduino15/packages/SPRESENSE/tools/spresense-sdk/2.2.1/spresense/release/nuttx/include/inttypes.h:186:50: error: unknown type name 'wchar_t'
 uintmax_t wcstoumax(FAR const wchar_t *nptr, FAR wchar_t **endptr, int base);
                                                  ^

You can also use this Arduino script to reproduce the issue.

Solution

This issue arises because inttypes.h cannot find where wchar_t is defined. It tries to import stddef.h for this purpose:

https://github.com/sonydevworld/spresense-nuttx/blob/5c65b4d1e49add94270d8c515b85534559dd9fb8/include/inttypes.h#L39-L43

/****************************************************************************
 * Included Files
 ****************************************************************************/

#include <stddef.h> /* for wchar_t */

However, for reasons unknown to me stddef.h does not define wchar_t. There's a comment saying that it should, so the logical solution seems to be moving the definition of wchar_t from sys/types.h to stddef.h.

https://github.com/sonydevworld/spresense-nuttx/blob/5c65b4d1e49add94270d8c515b85534559dd9fb8/include/stddef.h#L90-L93

/*
 * NOTE: Currently the type definitions of ptrdiff_t, wchar_t, and size_t are
 *     in sys/types.h but should be moved here sometime.
 */

System includes are loaded from project directory

This may be an issue with the underlying nuttx build system, and does not seem to be present in the nuttx mainline, but I have observed system include files will pick files from the project directory.

In the below example, I have a file called queue.h in project which was loaded by nuttx/shed.h - this in turn loads mqueue.h which fails as the system queue.h has not been loaded.

Only system headers should have been loaded by < > quoted includes.

To reproduce, add a queue.h file to hello. This was build on Ubuntu.

make distclean
./tools/config.py examples/hello
echo '#include <nuttx/mqueue.h>' > apps/examples/hello/queue.h
make

make[3]: Entering directory '/home/seal/sony/spresense/sdk/apps/examples/hello'
CC:  hello_main.c
In file included from /home/seal/sony/spresense/nuttx/include/nuttx/signal.h:49:0,
                 from /home/seal/sony/spresense/nuttx/include/nuttx/mqueue.h:46,
                 from ./queue.h:1,
                 from /home/seal/sony/spresense/nuttx/include/nuttx/sched.h:47,
                 from /home/seal/sony/spresense/nuttx/include/sched.h:49,
                 from /home/seal/sony/spresense/nuttx/include/stdio.h:48,
                 from hello_main.c:41:
/home/seal/sony/spresense/nuttx/include/nuttx/wqueue.h:273:21: error: field 'dq' has incomplete type
   struct dq_entry_s dq;  /* Implements a doubly linked list */

NuttX calls arm_hardfault at optargs() in fwupdate

In Spresense SDK v2.3.0, sometimes NuttX calls arm_hardfault in fwupdate example.

nsh> fwupdate -p /mnt/sd0/package.bin
FW Update Example!!
arm_hardfault: PANIC!!! Hard fault: 40000000
up_assert: Assertion failed at file:armv7-m/arm_hardfault.c line: 135 task: init
up_registerdump: R0: 2d08d2c0 30616463 00000000 00000003 2d08d2c0 00000000 0d05cc36 2d08d1b0
up_registerdump: R8: 00000000 0d05cad4 2d07fab0 00000000 0000000a 2d08d168 0d007b73 0d04f284
up_registerdump: xPSR: 21000000 BASEPRI: 000000e0 CONTROL: 00000000
up_registerdump: EXC_RETURN: ffffffe9
up_dumpstate: sp:     2d072f58
up_dumpstate: IRQ stack:
up_dumpstate:   base: 2d072fd0
up_dumpstate:   size: 00000800
up_dumpstate:   used: 00000170
up_stackdump: 2d072f40: 00000000 00003fd8 2d072f58 2d07f438 2d08d2b0 0d0087b5 000000e0 00000000
up_stackdump: 2d072f60: 00000000 0000000a 2d08d168 0d007b73 0d04f284 2d07f438 2d08d094 2d07f438
up_stackdump: 2d072f80: 2d08d094 00000003 00000000 00000000 0d05cad4 2d07fab0 00000000 0d006ad1
up_stackdump: 2d072fa0: 0d046f8d 0d001c73 0d001c51 0d003907 000000e0 0d001c45 000000e0 2d08d094
up_stackdump: 2d072fc0: 00000000 0d05cc36 2d08d1b0 0d000333 00000000 00000000 00000000 00000000
up_dumpstate: sp:     2d08d168
up_dumpstate: User stack:
up_dumpstate:   base: 2d08d2b0
up_dumpstate:   size: 00003fd8
up_dumpstate:   used: 000003a4
up_stackdump: 2d08d160: 00000000 0d04f231 00000003 00000000 2d08d1b0 00000000 00000003 0d05cc36
up_stackdump: 2d08d180: 00000001 0d04e465 00000000 00000000 0d05cc36 0d00a89d 00000000 2d083fd0
up_stackdump: 2d08d1a0: 2d08d1b0 00000020 0d05c861 0d00a3bd 0d05c7fb 0d05c804 0d05c807 30616463
up_stackdump: 2d08d1c0: 30323931 65656138 65313032 36633932 31623636 34396566 34313832 0d01c400
up_stackdump: 2d08d1e0: 2035646d 2f20662d 2f746e6d 2f306473 666e6f63 702f6769 616b6361 622e6567
up_stackdump: 2d08d200: 2d006e69 2d083fd0 2d07fa68 0d007e67 2d083fd0 0d004057 2d083fd0 0d01a167
up_stackdump: 2d08d220: 2d07faa0 2d07faa0 2d083fd0 0d00a78b 00000001 deadbeef 00000000 34623132
up_stackdump: 2d08d240: 35333535 33653531 66353364 36613561 36323335 34333563 00000000 00000000
up_stackdump: 2d08d260: 0d004750 01000000 00000000 00000000 00000000 00000000 2d073fd0 0d00a535
up_stackdump: 2d08d280: 00000000 00000000 00000000 00000000 00000000 0d006cd9 0d00a535 00000001
up_stackdump: 2d08d2a0: 00000000 0d00478d 00000000 00000000 2d08d2b8 00000000 74696e69 deadbe00
up_taskdump: Idle Task: PID=0 Stack Used=468 of 1024
up_taskdump: hpwork: PID=1 Stack Used=596 of 2008
up_taskdump: lpwork: PID=2 Stack Used=332 of 2008
up_taskdump: lpwork: PID=3 Stack Used=332 of 2008
up_taskdump: lpwork: PID=4 Stack Used=332 of 2008
up_taskdump: cxd56_pm_task: PID=6 Stack Used=400 of 976
up_taskdump: init: PID=7 Stack Used=932 of 16344
up_assert: Assertion failed at file:irq/irq_unexpectedisr.c line: 50 task: init
up_registerdump: R0: 2d072f50 0d007b15 00000000 2d072f50 2d072f58 2d08d168 2d07f438 2d08d2b0
up_registerdump: R8: 0d05c0da 00000087 0d05c539 2d072f34 0d008703 2d072fa0 0d05c539 0d05c6d7
up_registerdump: xPSR: 0d05c0da BASEPRI: 63366437 CONTROL: 00000000
up_registerdump: EXC_RETURN: 2d07f438
up_dumpstate: sp:     2d072f58
up_dumpstate: IRQ stack:
up_dumpstate:   base: 2d072fd0
up_dumpstate:   size: 00000800
up_dumpstate:   used: 000001b0
up_stackdump: 2d072f40: 00000000 00003fd8 2d072f58 2d07f438 2d08d2b0 0d0087b5 63366437 00000000
up_stackdump: 2d072f60: 2d072f34 0d008703 2d072fa0 0d05c539 0d05c6d7 2d07f438 2d08d094 2d07f438
up_stackdump: 2d072f80: 2d072ecc 00000002 2d08d094 0d05c0da 00000087 2d088ee0 2d072fd0 0d006ad1
up_stackdump: 2d072fa0: 00000080 0d003941 0d00392d 0d003907 00000080 0d001c45 00000080 2d072ecc
up_stackdump: 2d072fc0: 2d08d168 2d07f438 2d08d2b0 0d000333 00000000 00000000 00000000 00000000
up_dumpstate: sp:     2d088ee0
up_dumpstate: User stack:
up_dumpstate:   base: 2d08d2b0
up_dumpstate:   size: 00003fd8
up_dumpstate:   used: 000003a4
up_dumpstate: ERROR: Stack pointer is not within the allocated stack
up_stackdump: 2d0892c0: 00000000 00000000 00000000 00000000 2d08d2c0 00000000 deadbeef deadbeef
up_stackdump: 2d0892e0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089300: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089320: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089340: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089360: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089380: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d0893a0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d0893c0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d0893e0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089400: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089420: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089440: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089460: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089480: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d0894a0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d0894c0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d0894e0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089500: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089520: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089540: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089560: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089580: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d0895a0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d0895c0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d0895e0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089600: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089620: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089640: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089660: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089680: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d0896a0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d0896c0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d0896e0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089700: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089720: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089740: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089760: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089780: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d0897a0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d0897c0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d0897e0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089800: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089820: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089840: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089860: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089880: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d0898a0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d0898c0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d0898e0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089900: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089920: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089940: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089960: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089980: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d0899a0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d0899c0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d0899e0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089a00: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089a20: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089a40: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089a60: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089a80: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089aa0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089ac0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089ae0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089b00: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089b20: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089b40: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089b60: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089b80: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089ba0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089bc0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089be0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089c00: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089c20: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089c40: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089c60: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089c80: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089ca0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089cc0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089ce0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089d00: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089d20: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089d40: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089d60: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089d80: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089da0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089dc0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089de0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089e00: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089e20: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089e40: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089e60: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089e80: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089ea0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089ec0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089ee0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089f00: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089f20: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089f40: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089f60: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089f80: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089fa0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089fc0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef
up_stackdump: 2d089fe0: deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef deadbeef

I couldn't specify any combinations of other configs to occur this problem...

But it doesn't occur with this patch.
I think that optargs() has some bugs or something in the SDK.

diff --git a/examples/fwupdate/fwupdate_main.c b/examples/fwupdate/fwupdate_main.c
index 82e9f641..c73c0166 100644
--- a/examples/fwupdate/fwupdate_main.c
+++ b/examples/fwupdate/fwupdate_main.c
@@ -94,28 +94,9 @@ int main(int argc, FAR char *argv[])
   printf("FW Update Example!!\n");
 
   optind = -1;
-  while ((opt = getopt(argc, argv, ":f:p:zh")) != -1)
-    {
-      switch (opt)
-        {
-        case 'f':
-          farg = optarg;
-          break;
-        case 'p':
-          parg = optarg;
-          break;
-        case 'z':
-#ifdef CONFIG_EXAMPLES_FWUPDATE_USBCDC_ZMODEM
-          zopt = 1;
-#endif
-          break;
-        case 'h':
-        case ':':
-        case '?':
-          show_usage(argv[0]);
-          return EXIT_FAILURE;
-        }
-    }
+
+  opt = getopt(argc, argv, ":f:p:zh");
+  parg = optarg;
 
   printf("Free space %lu bytes\n", fwup_client_getfreespace());
 

Burn Bootloader - Error

Received the following error once reaching the Bootloader step in end user process:

[3224] Failed to execute script flash_writer

Install files ...
Traceback (most recent call last):
File "flash_writer.py", line 504, in
File "flash_writer.py", line 477, in main
File "flash_writer.py", line 378, in install_files
FileNotFoundError: [Errno 2] No such file or directory: 'REMOVE/spresense_dvt/firmware/loader.espk'
Error while burning bootloader.

Hardware setup: Windows 10
Software version used: Arduino IDE - 1.6.13

Resolution: Since already having version installed, Boards Manager recognized this, and Ignored updating. After updated the SDK, and issue was resolved.

Not all submodules are out of 'Detached HEAD' state

Description of the issue:

Following the instructions in the README to get the submodules out of detached
state results in that sdk/apps submodule is still in detached state.

How to reproduce:

$ git clone --recursive https://github.com/sonydevworld/spresense.git
$ git submodule foreach git checkout master

As result:

$ git submodule foreach git checkout master
Entering 'externals/nnablart/nnabla-c-runtime'
Already on 'master'
Your branch is up to date with 'origin/master'.
Entering 'nuttx'
Already on 'master'
Your branch is up to date with 'origin/master'.
Entering 'sdk/apps'
error: pathspec 'master' did not match any file(s) known to git
fatal: run_command returned non-zero status for sdk/apps

The problem:

sdk/apps submodule has no branch master rather new-master.

Describe your hardware setup:

Software version used:

Can't get code to compile on Mac M1

I have been following the instructions on the sony spresense developer pages to install SDK and get a basic hello world working.

The code is not compiling for me. The output has two problems maybe related?

I am using Visual Studio code on an Apple M1 mac.

When I create the workspace I get the following problem reported
"1/16/2022, 7:05:03 PM] Unable to resolve configuration with compilerPath "/arm-none-eabi-gcc". Using "/usr/bin/clang" instead.
[1/16/2022, 7:05:03 PM] Unable to resolve configuration with compilerPath "/arm-none-eabi-gcc". Using "/usr/bin/clang" instead.
[1/16/2022, 7:05:06 PM] Unable to resolve configuration with compilerPath "/arm-none-eabi-gcc". Using "/usr/bin/clang" instead.
[1/16/2022, 7:05:06 PM] Unable to resolve configuration with compilerPath "/arm-none-eabi-gcc". Using "/usr/bin/clang" instead."

I've run the cmd arm-none-eabi-gcc -v and this reports no errors.
This is my compilerpath setting
"compilerPath": "${config:spresense.env.toolchain.path}/arm-none-eabi-gcc",

Looking in the c_cpp_properties file I also have the following error
""${workspaceFolder}/.vscode/include"," is highlighted with a message saying it doesn't exist which it doesn't.

my workspace configuratiion is
"includePath": [
"${workspaceFolder}/.vscode/include",
"${mySpresenseSdkPath}/sdk/apps/include",
"${mySpresenseSdkPath}/sdk/modules/include",
"${mySpresenseSdkPath}/sdk/modules/asmp/worker",
"${mySpresenseSdkPath}/sdk/system/include",
"${mySpresenseSdkPath}/sdk/bsp/include",
"${mySpresenseSdkPath}/nuttx/include",
"${workspaceFolder}/**"
],

All the other settings in the config files i.e workspace config seem to be ok.

I tried on Linux and although didnt get the warning about gcc/CLang still got it complaining about missing .vscode/include

The revision nuttx-tools written at README.md fails "tools/config.py examples/hello"

description:
nuttx-tools with the rev in README.md fails config.py examples.

spresense/sdk$ tools/config.py examples/hello
arch/arm/src/imxrt/Kconfig:1236: syntax error
arch/arm/src/imxrt/Kconfig:1235: invalid option
arch/arm/src/stm32l4/Kconfig:5236: syntax error
arch/arm/src/stm32l4/Kconfig:5185: missing end statement for this entry
arch/arm/src/stm32l4/Kconfig:5053: missing end statement for this entry
arch/arm/src/stm32l4/Kconfig:8: missing end statement for this entry
arch/arm/Kconfig:1044: missing end statement for this entry
...

My environment below.

$cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.2 LTS"
spresense$ git branch
* master
spresense/tools/kconfig-frontends$ git branch
* (HEAD detached at 891510d)
  master

Fails reason:
Maybe, nuttx's kconfig file uses not support syntax with tools's repo's rev 891510d2534287afef6b5c90a375f94442a7e94d yet.

reference: kconfig-language's commit added some syntax.
https://gitlab.sdu.dk/sdurobotics/linux-kernels/kernel/-/commit/9059a3493efea6492451430c7e2fa0af799a2abb#541ddb1c3d900a22b15bd837aa191c0a1aa50080

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.