Member Since: October 28, 2009

Country: United States



A graduate with a BS in Computer Engineering with a minor in Electrical Engineering. Working in Longmont for a prestigious silicon company as a DSV Engineer.

Students in EE/CE that have questions can email me at: s.r.grace[at]gmail.com. I will be more than happy to give you my knowledge and expertise. My main focus is on FPGA/Digital Logic and MCU systems, but I can help out in other areas.


Verificatoin Engineer


IEEE, PC Gamers

Spoken Languages


Programming Languages

MASM x86, C, C++, C#, SQL, Java (some), PHP, BASH, Batch File, HTML, HDL (VHDL/Verilog/SystemVerilog), Tcl.


University of Wyoming - BS in Computer Engineering, Minor Electrical Engineering


Embedded Systems Engineering, Digital Logic Design


Read expertise



  • Have you looked at Microsoft's Open Source VSCode? It's really nice, I've been using it for some light C/C++ and Markdown, and it's really nice.

  • I doubt it's a trend, but more of a new norm. When EagleCAD was purchased, the limited a lot of the features of the free version.

  • Generally, from what I remember with out MCU types, the best way to handle a case where you might have multiple interrupts is to MUX the IRQ and then have it check what type of interrupt it is via port or code/data. This way you just build a LUT of data instead of over complicate the matter.

  • This sounds somewhat similar to the 3M making a force field.

  • My thoughts:

    • Open -> Closed means that the company doesn't position themselves well enough to build from the open design. Examples of this would be features of the design provided by others that clone the design.
    • Closed -> Open means that the person/company doesn't necessarily need help, but they know the design could spark innovations in which they can leverage for other designs or products.

    Something I am not going to mention in any detail is company's contracts. Whoever they have contracts with can also kinda dictate if they want it open or not, or if certain parts need to be closed (think government related).

    I'm seeing my company going into open source as a way to help customers build innovative ideas that can be leveraged further! Sometimes, the best employees are not employees, but the creative people who can find a solution to a problem through open source.

  • Pete,

    Here's my thoughts.

    1. The hardware people don't like to write code that would most likely not be production. A perfect example is the Arduino. It's designed to be a rapid prototype board, but people have started to use it in production due to costs and time it would take to build a better board and use a better Atmel chip. The Arduino library is quite simple and limited in functionality versus what a typical engineer/programmer could do by writing straight up C/ASM. They want to get a prototype with as much production-like code they can so they don't have to worry about a major rewrite weeks from final build/production start.
    2. Software people really don't need to know (nor do they care) about the hardware they're using until it limits their functionality. For an embedded system, a software engineer will ultimately not care on what chip or platform they are using, as long as it doesn't limit their ability to do their work and cause a reroll of an entire system.

    I think most of the "code hatred" is really done on the side of people who deal with, or write in multiple languages at the same time. An example of this is an IT person having to build an automation script to monitor servers or applications on the network. They may be forced to use a language that may not the most adequate to use do to resource limitation, expertise limitation, or something else.

    Overall, I think the issue is not of the hatred of the languages, it's more of socially awkward people have a hard time expressing their solution in a way that conveys, "Hey, your problem can be solved easily with this language people the people who came up with said language thought of that problem."

  • A trick is that you can have embedded for-loops where only one loop has initialization and conditional happens in both:

    int i, j;
    for ( i = 0, j = 0; i < 16; ++i, j += 4) { ...
        for( ; i < 64; ++i) { ...} }

    If you haven't guessed, this is from a version of SHA256.

    I don't recommend doing this, but there are some advantages if a loop variable will be used in both loops and they will modify some data (in this case for SHA256, it is used in padding).

  • A few things from my experiences:

    1. When compilers convert the C/C++ to ASM, they will do things to optimize the pipeline of the instruction set. As an example, if you do if ( A == B) {..}, the compiler might actually do if (B != A) {...). (If you haven't guessed, they're the OPPOSITE of each other). This helps save on the JMP commands used (waiting a few clock cycles to go from one point of the ASM to another).
    2. Always have an "else" statement. This goes along my digital logic background that it creates latches if you don't have a "default" conditional, and if you don't have one, that means your conditionals have to handle ALL possible conditions, and if you don't know the conditions of the data, have an else there to save you the headache of losing data, and possibly having improper data print out.
    3. If you have far too many if-statements in a row, you should look into using a switch/case to simplify your code (and helps the compiler optimize it).

    My biggest issue with the homework of online classes is they do not show you the bigger picture of when to use certain key features of the language. Why use an if-statement, when a unary/ternary statement can do the same thing? The times I learned a language the best was when I was given a practical application in which to code. This helps teach the specific aspects of the syntax you want to teach, but also teaches the students to test their code. Plus, as they get more familiar with the code and application, they can start doing coding optimizations themselves to meet certain specifications of the design.

  • Connecting to any "free wifi" should be done through a VPN.

  • A little "gotcha" the pre and post increment statements: http://stackoverflow.com/a/4706239