Hi Mateusz,

welcome to RIOT! Let me try to answer your questions (see inlined comments).

On 09.09.2015 10:14, Mateusz Kubaszek wrote:
Hello everyone,

Let me introduce myself, my name is Mateusz and it is my first message here, in this community I am a student of AGH academy in Cracow. New hardware and software platform design for 6LoWPAN is my subject of Masterthesis. In the following year I am supposed to run a small 6LoWPAN mesh and performwide tests showing the potential of 6LoWPAN. Its usage is seen in industrial sensor meshes. The debate about IoT operational systems revolved around Contiki, RIOT, Thread and ARM EmbedOS. Despite some work has been done around Contiki by previous student, we chose RIOT as it is the fastest developing system.

Up till now, I have done:
- EFM32WG port to RIOT system - libraries, startup, vectors have been included to the project (locally);

I have acutally also ported the EFM32WG to RIOT some weeks ago, though it is not merged yet. But have a look at the PR [1]. It containts periph drivers for timers, uart, and GPIO.

- usart and timer implementation (console is working, hwtimer too);
Generally speaking system is functional but it’s still in the beginning stage.

Couple of topics and some technical questions I have:
1) UART communication - searching through the libraries, I didn't find any solution based on interrupt handling or DMA.

Actually, all our UART implementations are interrupt driven, at least for receiving. We are further trying to enhance the existing drivers towards also using interrupt driven sending. Also there is some work in progress to optimize our UART driver interface -> [2].

Is it necessary to implement DMA or Interrupt writing?

DMA could be added on a per CPU basis, but it has not yet been done for any platform -> classical issue of missing man-power :-)

2) What is the difference between thread and posix thread. Which is desired in IoT software?

The difference is quite simple. Both use the same code for threading in RIOT, and what you mention are just different interface to the same functionality. The (RIOT) thread API (core/inclide/thread.h) is very light weight and stripped down to the most essential -> use this for when writing SW from scratch or if you want to be efficient. Posix threads (pthreads) implement a wrapper on top of this API to be consistent with the Posix API -> use this when you want to port existing libraries to RIOT.

3) I was a little confused while exploring the timers libraries.

Understandable - this is why we currently switch to a new timer system: the xtimer. For a better understanding a short overview: we have two timer layers that work together: the peripheral timer abstracts the CPUs timers - it basically gives a unified access to the timers your MCU provides, without any multiplexing, chaining and so on. The xtimer is put on top of this and takes care of multiplexing, overflows and all this stuff. The xtimer is also build in a way, so that it can cope with low-level timers of different width, e.g. 16-bit, 24-bit, 32-bit peripheral timers.

Previously we had a 3-layer architecture, with periph timer -> hwtimer -> vtimer. But this is deprecated now and is in the process of being removed...

a) hwtimer is essential to Kernel. It is responsible for delays and so on. Hardware timer speed is initialized to 1MHz, tell me what is the longest period needed by it? For example 16 bit timers maximum delay will be around 64ms - it seems to be insufficient. May this timer be clocked much slower, f.e. 36kHz?

hwtimer is deprecated and will be removed this week :-). This is taken care of by the xtimer...

b) Why we have double wrapper to hwtimer? Some processors have directly implemented hwtimer functions and the rest is done through RIOT/sys/compat/hwtimer_arch.c.

all deprecated code, is being cleaned up as we speek. As mentioned above: all you need is the xtimer and the periph timer.

c) What is going on in situation where we have 1 hw timer with 3 compare registers but it will be insufficient for networking algorithm to work properly?

xtimer takes care of this.

d) Is there any possibility to initialize not one, but f.e. 4 hwtimers on 4 peripheral timers? I have 4 timers in EFM32WG990, so why use a cpu consuming vtimer wrapper working on one hwtimer while we could make use of MCU peripherals?

ne need for this, the multiplexing of xtimer on 1 periph timer is more power efficient then letting run 4 periph timers in parallel

e) Does RIOT support absolute time? I could make use of RTC peripheral clock for this, in EFM32 MCU, it is not power consuming.

yes. At the moment you can use the RTT and RTC interfaces directly, and these will also be integrated in the xtimer. The idea is, to use a slow timer (e.g. RTT or RTC) for long running timers, and enable and use the periph timer only for the last part of those intervals. This allows the CPU to go to lower sleep modes while timers are active...

4) Could anyone explain me the power stages used in RIOT:
    - ON
    - IDLE
    - ACTIVE
    - POWERDOWN
    - OFF

Not sure, there were some issues and PRs that discussed these in more detail -> @Oleg, @Kaspar do you remember these discussions?

EFM32 has 5 energy modes and a couple of peripherals functioning well in low power modes. How can I make use of them in RIOT? Here is a short description:
https://www.silabs.com/Support%20Documents/TechnicalDocs/AN0007.pdf

The really important question here is: do you really need them all? Before you focus on them in detail, it is really important, that when using an OS like RIOT, you have to make always compromises between portability to other X platforms (as RIOT does), and the specialized features of your 1 platform. We will of course never find a hardware abstraction for different MCU families and even architectures, that is portable and can cope with all the small details of one platform!

So back to your question: Try to find which of the 5 energy modes are actually useful and map RIOTs power modes to these in a sensible matter for now. Once the release is done, we will have a more extensive discussion and might be updating the lpm module slightly - feel free to join that discussion and share your experiences!



It’smy first letter here. I am not used to mailing list, so in case I misunderstood the form or chose the wrong place to post my questions write me about it.

This is the perfect for this kind of questions - welcome agian to the list!

Cheers,
Hauke

[1] https://github.com/RIOT-OS/RIOT/pull/3571
[2] https://github.com/RIOT-OS/RIOT/pull/3265


_______________________________________________
devel mailing list
devel@riot-os.org
https://lists.riot-os.org/mailman/listinfo/devel

_______________________________________________
devel mailing list
devel@riot-os.org
https://lists.riot-os.org/mailman/listinfo/devel

Reply via email to