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

Nordic SDK boilerplate code size

I am still somewhat of a beginner to development with nRF51, but it seems to be that the SDK, specifically all the boilerplate code in the app_template example just to initialize the softdevice and so on generates almost 30 KB of code (using SDK v10, S110 and ARM's GCC 4.9.3 distribution with optimizing with -O3). It also consumes almost 2 KB of RAM already, leaving only 6 KB of RAM for the 16 KB RAM variant (xxaa I believe) of the chip.

Why is the boilerplate already so big? Were the older versions much smaller? This looks to me like one can only use the biggest 256 KB flash and 32 KB RAM variant with the current SDK.

Or are my GCC settings or something like that wrong?

Update: I checked the specific app_template code size. So when compiling the app_template in /nRF51_SDK_10.0.0/examples/ble_peripheral/ble_app_template/pca10028/s110/armgcc with gnu make and the makefile supplied by Nordic (i.e. I compile the exact app_template as it comes with the SDK distribution and with ARM GCC 4.9.3 installed on my system) I get the following output about the sizes (Nordic's makefile uses -O3):

  text    data     bss     dec     hex filename
  27120     112    1884   29116    71bc _build/nrf51422_xxac_s110.out

So we can clearly see that the "boilerplate", i.e. what I consider the least amount of setup code even without actually setting up the BLE services, but just calling ble_stack_init() and the other stuff from the app_template, you need 30 KB already.

Even when using -Os instead of -O3 it's still 20 KB, so 10 KB less, but still a lot:

text    data     bss     dec     hex filename
  17176     112    1876   19164    4adc _build/nrf51422_xxac_s110.out
Parents
  • (2/2)

    I'd never release app based on any of these templates but for newcomer or hobbyists it could be great starting point and help to shorten learning time. As I said once you know Soft Device API well it's quite easy to make BLE broadcaster (= beacon) app under 5kB with GCC compilation option -O3 (sometimes you can go even with -Os but I've seen still some unstable products so it could be risky for production if you don't have very good non-regression tests). As @monpetit said you can then go with Keil or IAR and get even better results (they are usually 5-20% better in code size optimization). Sure you are either limited by trial/evaluation license code size limit or time, but if you are doing this professionally and these things are key for your project you simply must pay for good tools, that's how business works;)

    Cheers Jan

Reply
  • (2/2)

    I'd never release app based on any of these templates but for newcomer or hobbyists it could be great starting point and help to shorten learning time. As I said once you know Soft Device API well it's quite easy to make BLE broadcaster (= beacon) app under 5kB with GCC compilation option -O3 (sometimes you can go even with -Os but I've seen still some unstable products so it could be risky for production if you don't have very good non-regression tests). As @monpetit said you can then go with Keil or IAR and get even better results (they are usually 5-20% better in code size optimization). Sure you are either limited by trial/evaluation license code size limit or time, but if you are doing this professionally and these things are key for your project you simply must pay for good tools, that's how business works;)

    Cheers Jan

Children
No Data
Related