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

How to check which SDK my Keil project is linking against?

I'm using S110 version 7.1.0, but need a way to validate in general which S110 and which SDK version I have associated with this .uvprojx project.

Much of this stems from not understanding the difference between the Soft Device (compiled firmware app?) and the SDK (API to that compiled firmware app?). Any commentary in this area is also greatly appreciated.

  • The SoftDevice is a compiled binary (hex) file supplied by Nordic containing functions to perform various BLE/ANT, peripheral and event/task oriented functions.

    Because it's a compiled binary, to identify and call the various functions you need a set of external API calls. This is what Nordic refer to as the SDK.

    There is a loose coupling between the SDK and the SoftDevice. What I mean by this is that you're expected to make sure that you have the correct SDK in your compiler path for the particular SoftDevice that is your target. i.e. the SoftDevice that has been loaded onto your silicon (nRF51822, most likely).

    The compiler (Keil) has no direct knowledge of the existence of the SoftDevice, other than the linking in the SDK (APIs).

    Where you might find some confusion is that there are device profiles in Keil that help it understand the target, and when you've installed the SDK files, you'll find that you'll have targets called things like "nRF51822 S110". These are merely profiles that help the compiler understand the amount and organization of the RAM/Flash on the chips. The amount of RAM/Flash available for your application is more-or-less halved (not exactly) when you're using a SoftDevice as the SoftDevice also needs space and memory to function.

    On later SoftDevices, I believe it's 80K of Flash (out of 256K) and 8K of RAM (out of 16K) that's "set aside" for SoftDevice workspace. The rest is available for your application.

    To answer the crux of your question: it's the inclusion of the SDK (API) source files in your project's path that specifies which SDK you're using. As the path is relative, and many folk start with one of the example apps, you'll often find you need to place your own projects within the SDK tree -- unless you want to rebuild the paths my manually adding them to a fresh Keil project.

    Does that make some sense? It's early here and I haven't had any coffee yet, so let me know ;)

    -m

  • It's wasn't the most well-worded question, I agree, but this does not provide an answer. Move to a comment?

  • Well, if you edit your question, I'll edit my answer...because if you edit your question, my comment would be moot :)

  • Done. Appreciate any help you can offer as I poke around the IDE.

  • I've edited my answer into an answer for your specific question. Hope it helps.

Related