Thank you for the reply. My concern was that the method has the N generic 
parameter in it. Does the compiler just figure that out and so the usage is as 
simple as something like:
    
    
    #----------- circBuffer.nim
    import ringbuffer
    
    var myBuf*: RingBuffer[N: 8, T: uint8]
    
    proc someProcess*() =
      #some stuff
      myBuf.add(0x03)
    
    #----------- main.nim
    
    import circBuffer
    
    proc main =
      while true:
        circBuffer.someProcess()
        circBuffer.myBuf.add(0x04)
    

Stefan,

I think I can access all the registers. I'm in the early stages. I did start 
off with that repo, but have modified it quite a bit. There was a problem with 
the header file for the device and it was making zero initialized pointers to 
registers, I think. The bss section had a bunch of symbols that were meant to 
be the same as #defined pointers to memory locations. I haven't committed it or 
anything yet as I'm not very far along. Basically I got it to compile, read the 
assembly to see that it was doing what I wanted, particularly in regards to an 
interrupt routine, and then loaded it onto the board and made sure nothing 
exploded. There's not even a blinking light yet. The assembly looks good except 
that the entry into my main routine has several steps. It goes from a main 
routine, which calls a NimMain() routine, which then calls my main, 
main_818410831058, which loops in place. That seems unnecessary to me, but not 
a huge deal I guess.

I am using the MSPGCC compiler, which I think is intentionally neutered as they 
want you to buy their compiler. The assembly looks good though. Accessing the 
P2IV register looks correct in the assembly. I don't know how to force Nim to 
tell the C compiler to make a jump table, which is what I would do. There are 
compiler intrinsics for that sort of thing, so I could use the FFI. The number 
of options is limited and a case statement would only have to handle powers of 
2.

As for garbage collection... at my workplace we don't use any dynamic memory 
allocation. Everything is statically allocated. We don't make products that are 
classified as "safety critical" but they are high reliability devices and there 
is liability if a device doesn't work when it's supposed to. Static allocation 
makes sense for many of the embedded systems that I work on at least. 
Everything is bare metal. It seems like the concerns in the embedded world are 
quite different from those of the PC world.  That's alright though. I'll slog 
away at it with some help from kind people like you and then there will be more 
information out there for the masses. I might even try and resurrect my blog 
haha. Also, allocating memory on a heap is non-deterministic I think in terms 
of time. That makes it harder to reason about systems in which I literally have 
to count cycles sometimes to meet execution deadlines.

Also, I was talking to a coworker about the nature of special function 
registers. In C, the macros for registers in the header files expand to 
dereferences of pointers to volatile memory. Nim has the volatileLoad and 
volatileStore functions instead. I'm not sure how I feel about that. I think I 
like it better actually. Time will tell.

Maybe I just don't know about it, but the option of using the language features 
that use the heap like seq but in a statically allocated memory way would be 
nice. It would just prevent the memory allocated for the seq from being resized.

Reply via email to