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.

  • Hello,

    we are migrating from nRF5SDK to nRF Connect SDK. So we learn Zephyr and so on. Previously we used SES Nordic Edition.

    Regarding the nRF Connect SDK vs. the nRF5 SDK and their future development you could read more about it in this statement.

    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?

    The question about which IDE you should use is hard to answer definitively - the VS Code IDE integration is newer, and still being actively developed (new features and "quality of life" updates added), while the SES Nordic Edition is more mature, but without much active development. If I were to personally make a recommendation I would definitely recommend working with the VS Code IDE with the nRF Connect SDK.

    What is Nordic's plan in this regard?

    For any questions about roadmaps or future releases I would have to ask that you reach out to your Regional Sales Manager (RSM) with these inquiries, since we do not discuss these topics here in the forums. If you do not know who your RSM is please send me a direct message so that I may provide you with their contact information.

    Best regards,
    Karl

  • SES is head and shoulders better than VS code environment even now (late 2023).  There has been a lot of cleanup on the integration and it's getting better BUT there is a very long way to go papering over the atrocities of Zephyr.

    DeviceTree replacement still needs vast amounts of work to make it even sort of sane.  The basic problem here is that Zephyrs fundamental view of hardware is flat wrong for embedded programming -- they are big iron people attempting to do small iron and failing miserably at it.

  • Hello,

    When I first made the move from SES to VSC roughly two years ago unequivocally I shared your sentiment about SES being miles better, but as I have got familiar with VSC and Zephyr I am now of the complete opposite opinion - if I may say, the nRF Connect SDK is now definitively a large step forward from the nRF5 SDK.
    I will admit that it at first was very daunting to familiarize with Zephyr and the devicetree, but once you overcome this initial hurdle I think you too will appreciate all that the nRF Connect SDK brings to the table for developers.

    I would also like to emphasize that we, Nordic, are among the primary contributors to the Zephyr project, and I like to think that we are pretty well-versed in 'small iron' things, if this means close-to-metal embedded application development. However, we also recognize that as our SoCs are getting more complex developers will benefit from not having to take a bare-metal approach, which is why we have taken steps to advance our SDK in this direction.

    Is your primary issue with the nRF Connect SDK related to Zephyr being the foundation of the SDK, or with how source control is implemented in the SDK?

    Best regards,
    Karl

  • This is a two part problem for me so let me comment on this in two parts:  On the Zephyr side, I haven't been able to look inside the kernal yet so I can't say anything about the structure of it really.  My beef is about it's world view.

    First off, let me posit this: if you aren't deeply concerned about the hardware you are running on, you aren't doing embedded code.

    From that my opinion is that the entire hardware viewpoint of zephyr is clearly big iron.  The idea that you're going to move a design from board to board precludes the above posit.  Just doesn't happen without changes to the application structure itself.  If you don't deeply care about what you're running, you aren't doing embedded code.

    So let's take this deeper: I don't give a rats ass about how many boards Zephyr supports; it doesn't support my board.  Therefore, there are no deltas from some other board, there is only my board. Zephyr idea that everything is deltas from some reference board (or worse from a set of boards) is an indication of this big iron take. 

    Further, since I deeply care about what hardware I'm on, I want to keep ALL my configuration tightly controlled with my source code (basically AS PART OF my source code, even conceptually).  Hardware deeply matters! Code is an extension of hardware.

    Also, if you take a look at good IDEs concerning hardware, device tree is awful. My Gold Standard for IDEs is Cypresses (not Infineon) PSoC Creator 4.4.. hands down THE best there is in the embedded space.  Shows all the CPU configurations available and allows you to set it up correctly there along with showing you things that conflict. Peripherals are all set up the same way.  You generate all the configuration files (.h and .c) this way and it places them into the make directory for you.  Simple.  Simple.

    Edits to drivers are easily made from there and the generator respects those and it's all in the source tree.

    Another is MCUexpresso along the same lines although not quite as good.  Renesas E2Studio is similar although it goes a little deeper adding threads and some other upper layer configurations and is actually too cooked in the drivers for my taste (if you do too much in a driver, then it is likely that the driver isn't going to work in your application exactly).  The mark of good code is when it is used in ways that the creator never envisioned.

    Device tree is basically an intermediate configuration file that is missing the upper layers of IDE.  Nordic is starting to get there with the device tree editor in VScode but has a long ways to go yet to get to this level of good. 

    I'll wait for it, but the status quo is terrible yet.

    From what I can see about the SDK itself, yes, things are getting better BUT a person should note that sometimes it's a lot easier to just configure things from the init() call.

    And, since you're involved in Zephyr I'll note that in most applications a person sets things up and runs that way BUT I've got applications where I change the configuration of the hardware on the fly depending on context of what's going on at the time.  Again, if you don't deeply care about the hardware you're on, you aren't doing embedded code. 

    That's the difference between little iron and big iron. It's not the size of the iron, it's the seamless transition from iron to firmware.  (I particularly like to inhabit microcode myself)...

  • Part 2 of this: VSCode and the nature of coding

    My code has to live 15-20 years.  That means that it will likely outlive any cloud company. I have to be able to pull that code base up at pretty much any time and recreate it exactly.  By project (see also  How to set up VScode for eternal build).

    CSVode is basically built in the Zeitgeist of change is good. Nothing lasts more than 6 months; everything should be the latest and greatest even when it completely breaks what you're doing. It self updates.  It depends on a tangled web of whatever and sorts it all out when you build it (that's a good thing if you have a tangled web, but having a tangled web is itself bad)

    Basically the problem is that I want everything to build a project in the project so when I commit it, someone else can pull that down and build it exactly.

    The basic philosophy of VScode is that all your ancillary things should reside in github repos somewhere else and everything is a layer over everything else (recursively).  Simple and Microsoft are not words that are juxtaposed and that entire mindset is infecting the world of coding.

    All the other IDEs run simple; the code tree is in front of you (for the most part) and the tool chain is what you're pointing at (and you can have multiple tool chains). I go to the top of the tree and commit it.  Everything I need including library source (where possible - softdevice I don't get source but the OBJ is there), is in that commit.  Simplicity is a virtue.  It's not even a concept at MS. Don't fall into that trap; Simplify, simplify, simplify.

    And the last thought that I'll leave you with: Things that are designed to be all things to all people usually end up being nothing to anybody. The notion that there are 1500 people working on Zephyr isn't a compliment in my book.

Related