SES vs VS Code vs something else

Hello, 
in our firmware development department, we are migrating from nRF5SDK to nRF Connect SDK. So we learn Zephyr and so on. Previously we used SES Nordic Edition. But now we see that Nordic actively evolve VS Code and plugins for it. So the question is, which IDE is more perspective for Nordic? Will you continue to develop SES Nordic Edition? What is Nordic's plan in this regard?

Thank you.

  • Bonus part 3:

    This newer SDK is probably a step forward from SDK5 in structure to some extent.  I've gotten slightly to look at internals of Zephyr and there are some things it's capable of that are interesting.  I've got a equipment that  labels bottles that has some issues: The good news is that everything is configurable. The bad news is that everything is configurable.

    It would, in my book, be better if the SDK were divorced from the actual ROTS under it.  There are better RTOSs around than Zephyr.   Certainly MUCH better configuration systems available. MUCH.  If Nordic wants to put in the effort to gloss over the atrocities that Zephyr presents, that's a huge step forward and probably more productive than making it run on any RTOS. 

    That's a tall order. There's a lot gloss over.

    Source control can't be divorced from context control.  I'm trying to figure out how to do context control.  MS doesn't believe in it which makes your job that much harder.

  • Hello,

    Thank you for sharing these perspectives, we appreciate the feedback! :) 

    Randy Lee said:
    My beef is about it's world view.

    I sense that the benefits of the Zephyr foundation is not something that I can easily sell you on, but I will attempt to at least provide some insight from my own perspective.

    I agree that the added level of abstraction is taking us further away from the hardware itself, but I would not say that this neither a step in the wrong direction, nor is taking us away from 'the embedded programming' aspects.
    The extra abstraction level also enables a much higher degree of reusability between similar products, and allows customers to spend less time 'reinventing the wheel' when they start up a new project.

    Regarding the devicetree, I recognize your assessment that it is very cumbersome to familiarize with - especially before the recent improvements with the Devicetree GUI option - but I would like to emphasize that once you are familiar with it the benefits far outweighs the cons. One thing we often see is that customers would start out with one project, before making a second or third version later on which new functionality, for instance.

    Another example is for instance that during the recent silicon shortage this also turned out to be a big strength for customers that were not able to get a hold of large enough lots of the specific chips in their developed projects, which then easily could swap to different versions of our chips that were available, to stay in production.

    Regarding your assessment on the structure and distribution of the nRF Connect SDK - being 'spread across many different repositories' - I would argue that this too is a large advantage compared to the distribution of the nRF5 SDK.
    While the code is pulled from different repositories it is still all available at your computer, locally, at the time of build - and so you should not have any issue storing the code locally if you prefer to.
    I.e you can still apply the same process/storage to the nRF Connect SDK based application as you could with your previous nRF5 SDK based application.

    Lastly, while it would be possible to 'divorce the SDK from the RTOS foundation' I am not sure if this would serve any practical improvements when compared to the alternative.
    Additionally, if we were to make it configurable to a swath of different RTOS's, would that not then just add yet another level of abstraction?
    Perhaps I have not fully understood your concern or feedback about this part.

    Thank you for taking the time to write out all this - I really appreciate the perspective! :)

    Best regards,
    Karl

  • Abstraction is useful and a curse.  The problem with cooked things is that sometimes it's too cooked or not in the correct genre (I don't want Mexican if I'm looking for Cajun).  If you are doing things in the grain of whoever did whatever, and it just works, that's fine.  Lord help you if any of those requirements are not true.  Example: I2C drivers.  If I've got an I2C bus and a bunch of peripherals on it that only a single thread accesses, then I can do this pretty straight forwardly.  If I've got two threads accessing that bus (probably different peripherals), then I need to guard the I2C drivers with semaphores and timeouts and a whole 'nother layer of abstraction.  Unless you've got some pretty fancy code parsers, only I know if I need that level of abstraction or not.  If I don't, I don't want it in the code path as it adds complexity (read: bugs) and time to the driver calls.

    Let me give you another example of overly abstracted: I have a silicon vendors set of code that runs several layers of code to implement a touch screen all the way down to a touch controller. I've had to rewrite that deep driver now 3 times because of parts obsolescence, the parts getting dumber all the time so I've had to simulate all kinds of interesting things in the driver.  The driver is named for the original part but I can't change that because the upper layers know directly about it and I can't get at those layers to correct their erroneous viewpoint.  So I live with code that's ugly (which bothers me to no end).

    As to changing out hardware under you: I've had to do that during the chip shortage too.  The difference here was that I had to do it with good tools available.  Let's go back to my Gold Standard Tool: Cypress PSoC Creator.  I couldn't get a chip so changing to another similar one was 3 clicks: one to select the tool, one to select the part number and the third to build it.  Boom.  I had to do the same sort of thing with a different package.  That took a few more clicks because I had to rearrange the original pins to the new target pins, one click per pin and then a build click.  Boom.

    Basically Device Tree is like XML -- it's an intermediate file, no one should be editing it directly.  We're only doing that because the real tools haven't been built yet.  The Device Tree GUI is a great step in the right direction but it needs to go far enough to completely obsolete any editing what so ever of device tree files.  And drop the idea that any given board is a derivative of another one.  They aren't, even when cloned from one application to the next.  Firmware is an extension of hardware and all that needs to be kept together in my single repository on my end.  All of it.

    To that point, having all kinds of places to grab a bits and pieces of the SDK only makes it much tougher on everyone including your product support; if there isn't a "version" I have no idea how you'd debug that from a support perspective as you then have large (if not essentially infinite) numbers of versions around.  Simplification through standardization is a very important thing there.

    As to divorce from the RTOS, I'll note that SDk5 is; it doesn't even need an RTOS under it (although it really aught to have one once you're into things like BLE), so this is an architectural question of the SDK.  Can it be done? Certainly, Nordic has done so prior.  Should it be done? Harder question.  I just wish you'd picked a better OS to work with like FreeRTOS or MQX or something.  I will say that it's rather a moot point since this train has left the station already so I'll have to suck it up and deal with it but I have to rest my hope on the notion that Nordic will continue to significantly improve it's good start of actual tools to deal with this.  Cypress is my Gold Standard on this. If you can get to that level, things will work out fine even with the Big Iron mindset of Zephyr.

    Of course, once you've obsoleted the underlying stuff, then, of course, the thing to do is to remove it and get back to simple. Collapse layers.  Simple is a blessing in all code. As long as it's not too simple.

  • Hello,

    Randy Lee said:
    The problem with cooked things is that sometimes it's too cooked or not in the correct genre

    I see your point, but I would here argue that the added configurability of the nRF Connect SDK works to alleviate this, but allowing you to configure it - whichever part - to align more closely with what you desire, and I think the addition of semaphores to your multiple threads that access the same resource is a small price to pay for this flexability.
    Additionally, if you had wanted to avoid this all together you could even have set up a single thread to run all your I2C peripheral transactions.

    Randy Lee said:
    Let me give you another example of overly abstracted:

    I acknowledge that there is definitely a risk of going 'too far' with the abstractions, or not doing it correctly such as in the examples here, but I do not think the nRF Connect SDK is headed in this direction - as you mentioned in your earlier comment there are a lot of engineers contributing to the Zephyr project, and so there are strict guidelines for what you could do, and how it should be done, and this is one of the places where the added benefits from the open-source nature of the Zephyr project really shines.
    In your example it sounds like the vendor has neglected to maintain this part of the code, which is a failure on their part, and not something that easily can be influenced by an end user, in the Zephyr project however you can easily highlight the issue through opening a git issue to have it looked at by their developers, or a PR with the necessary fix if you have already made one, to have this resolved at the root instead of having to make a patch for it in your local version of the SDK.

    Randy Lee said:
    Let's go back to my Gold Standard Tool: Cypress PSoC Creator.

    It definitely sounds like their tool rose to the occasion in this situation, but if I could ask, does it also limit you to their specific product range?
    I.e, can you just as easily change to a SoC from a different vendor, within this tool?
    I ask because I am not personally familiar with the Cypress PSoC Creator.

    Randy Lee said:
    To that point, having all kinds of places to grab a bits and pieces of the SDK only makes it much tougher on everyone including your product support; if there isn't a "version" I have no idea how you'd debug that from a support perspective as you then have large (if not essentially infinite) numbers of versions around.  Simplification through standardization is a very important thing there.

    This is not quite accurate - we use the west tool to track which exact state of a repository that goes into a release or tag. This way, you can be absolutely sure that the code you get when you download an SDK version will be the same each time, regardless of the different repositories states on main.
    Thus, there only exists a single 'nRF Connect SDK v2.5.0' for instance - because it draws from all the repositories at specific commits, and so there can be no surprises there.

    Randy Lee said:
    Should it be done? Harder question.  I just wish you'd picked a better OS to work with like FreeRTOS or MQX or something.  I will say that it's rather a moot point since this train has left the station already so I'll have to suck it up and deal with it but I have to rest my hope on the notion that Nordic will continue to significantly improve it's good start of actual tools to deal with this.

    While it does not need to be an RTOS under it, I definitely think the benefits far outweigh the costs. There were many elements that went into the consideration when we went for the Zephyr project as the foundation of the SDK, and one of them were their open-source approach. We dont want our customers to have to spend time re-inventing the wheel when they switch between different vendors. We wish to 'compete on level ground' with other vendors instead of contributing to creating hardware/software lock-ins for companies and developers because we believe our products are better suited for their needs.
    That said, this also requires that we can not rest on our laurels, and we must continuously work to improve our offering, both in terms of tools and in terms of product performance, to stay competitive.

    Best regards,
    Karl

  • This is getting long so let me break this up just a tad..

    In my second example of something being too cooked here, the vendor in question had support for 2 chips, both of which obsoleted.  That they had any support for those chips is odd but there you go.  That being a silicon vendor I shouldn't expect that they had any support for anything at all, so writing my own drivers for a chip they didn't support was to be expected.  In this particular case the chips that I had to use eventually were a lot dumber than the ones they originally used so I had to do some interesting things to simulate what was required of the rest of the stack.  But this example is a simple one.  It's pretty linear and well defined.

    Now suppose I have an accelerometer.  You can get those in 2,3,6 and 9 degrees of freedom. You can get those with al kinds of capabilities of how much the can process the data stream before talking to you (and even how they talk to you) and there are those devices that can talk to another stack of devices to come up with extra data to play with.

    The combination is, for all purposes, infinite.  Furthermore if any of that changes on the board, it's very likely that the structure of the upper layers will have to change depending on exactly how the hardware processes things and under what conditions.

    Therefore, the idea that it's even possible to run drivers for exactly what combination of chips and configurations is rather a bit overreach.

    To put a finer point on it, to my way of thinking the OS shouldn't even care about peripherals other than things like the clock tree and the NVIC operation.

    That said, if there are people who want to have drivers for something, that's fine.  Standards are what it important there so that things work pretty much the same way more or less (unless they just can't or shouldn't -- I'll cover that in another section here).

    I don't expect that someone would have what I'm after so I just assume I'll have to write whatever I need.  Not a big deal as long as I have the underlying drivers for the SoC peripherals there.

    Which brings me to the other major point here (continued)

Related