This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

SDKV12 sdk_config.h "master" ?

Hello. I have a question and a request for Nordic developers.

It is really super-helpful that in SDKV12 you converted to having a master sdk_config.h that contains what seems to be 100% of all sdk config parameters. This is terrific.

What has been making conversion from SDK11 a bit more challenging for me, however, is the fact that I can't seem to find a "master" sdk_config.h that contains 100% of all parameters. It has been a trial and error process that involves scanning the sdk_config.h's contained within the various examples, which seem to have differing subsets of sdk_config.h.

Furthermore, in at least one case I was stumped by the fact that there were no sdk_config.h's at all, in any of the examples, that had a parameter that turned out to be necessary and should have been in there: APP_GPIOTE_ENABLED.

I don't know what other developers do, but what I would like to be able to do each time a new SDK is released is this:

  1. Go into a subfolder of /documentation that contains the "master" sdk_config.h for that release
  2. Diff it against the "master" sdk_config for the previous release.
  3. Manually upgrade my own sdk_config.h's based upon what I find.

I say this because given the number of parameters it can be tricky and error-prone to propagate an app's config parameters from one release to another. If the Nordic devs would maintain the sdk_config.h in a "readily diff-able" manner, it would really help 3rd party devs in sdk transitions.

Thanks for your consideration.

  • Hi,

    I'm glad you like moving toward single sdk_config.h. We wanted to make sdk_config.h maintainable between releases and at least all ble_peripheral examples should contain same sdk_config.h (with different modules enabled). Sections and modules in sdk_config.h are sorted in alphabetical order so changes between releases should be visible. It's a first release with common config file so we expect to get feedback and adjust.

    Regarding pins configuration it was intentionally left out because sdk_config.h contains static configuration only and in case of drivers it's a default configuration (something that should help user start quickly with the driver) and it's hard to determine default pin configuration, that would be useless. Another thing is that same peripheral might have different run time configuration and then having pin configuration in sdk_config.h would be confusing.

    There is a way to extend sdk_config.h with application configuration since sdk_config.h optionally includes "app_config.h".

  • In case of pins current sdk_config.h is inconsistent as it contains pin definitions for UART (in nRF_log config), PWM and QDEC but omits them for TWI, SPI and the rest. Additionally it contains clock configuration which makes it platform (nRF51/nRF52) dependent. Ideally there would be single platform independent config file containing as many SDK options as possible and other file containing everything closely related to hardware (clock, pins, platform dependent flags, etc.). Also it still would be very helpful to have official list of SDK defines along with explanation. Of course with some time and effort we could grep out all #ifdefs form SDK code but at least some of them aren't meant to be set by user.

  • Good point, there is a need for a "master" sdk_config.h with all possible configurations for the current SDK Version.

  • To nordic admin/developers:

    Please take this constructively from one dev to another; that's how it's intended.

    I don't know if you've taken any action on this item, but in followup let me just show again how having a "master" sdk_config.h that is diffable from release to release would be extremely helpful to devs.

    I just tried to upgrade my project from 12.1 to 12.2.

    Unlike in the past, I read the release notes and although I did see some interesting things, nothing stood out as "you've got a lot of work ahead of you". After all, it IS just a point release, right?

    Well, the first issues I ran into related to the GPIOTE expansion from 1 set of 32 bit masks to a vector of them, because this was a breaking API change. But it was honestly very easy to identify and fix because the compiler errors helped point me immediately to what had changed in the API.

    After that (and after hacking around a nasty circular reference bug related to the ASSERT definition), my project built fine, but it crashed randomly in the first 15 seconds or so after the device booted. For the life of me I couldn't figure it out. It started out great, and then wham.

    I will spare you how I figured this out, but ultimately the problem is that 12.2 made a breaking change for anyone who uses UART. I needed to add the following to my sdk_config as of 12.2. Without this, my app crashes.

    // <e> UART0_ENABLED - Enable UART0 instance                                                                                                
    //==========================================================                                                                                
    #ifndef UART0_ENABLED
    #define UART0_ENABLED 1
    #endif
    

    This was not present in 12.1, and presumably it was related to the change (in the doc) related to support for more than one uart. (yay!)

    I am merely trying to convey, respectfully to the Nordic devs, that if there were a straightforward way for devs to do a DIFF betweeen the "complete" version of sdk_config.h from one release to the next, it would save us potentially a lot of time.

    Your consideration would be greatly appreciated.

  • Totally agree. This has caught me out more than once and wasted a lot of time.

Related