You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mynewt.apache.org by Sterling Hughes <st...@apache.org> on 2016/03/02 20:51:17 UTC

Re: our HAL and the new mbed-hal

Howdy,

On 2/29/16 7:43 AM, will sanfilippo wrote:
> Sterling (and all):
>
>>> I think we will need to: mbed-hal is being developed only for ARM processors.  If we want to use the HAL on other MCUs (MIPS, 8051, Intel, etc.) -- it would be good to have this mapped.
>
>
> I am probably getting confused by how you worded that statement but the hal they present is generic and would work for any MCU. Yes, only MCU vendors with cortex -M processors are mapping their HALs to mbed, but if we decided to adopt the mbed HAL it would be easy to map other MCU’s to the mbed hal. Pretty much exactly the same amount of work it would take to map mynewt to their HALs.
>
> I certainly understand why we might want to map the mynewt hal to mbed: do it once and then you get all the mbed hal ports for free but like I said; we should take a serious look at whether or not we just want to use the mbed hal in that case. Yes, I am repeating myself :-)
>

I chatted a bit with Will offline on this. Wanted to summarize our 
thoughts here.

First, both this mail and Paul's mail make it clear to me just how much 
work we need to do on our HAL / driver infrastructure.  We have a lot of 
this planned for v0.9-b1 (in mid-May), I think this needs to be clearly 
release noted in our next v0.8 release, just so folks know it's coming.

Anyhow:

- I (we?) think we can't rely on the APIs defined by mbed-hal, for a 
number of reasons

1: The APIs are listed as "do not rely": https://github.com/ARMmbed/mbed-hal

"mbed hal API is considered an internal interface. It is not recommended 
to depend on this module in an application. We are planning to improve 
mbed-hal in the future, which might require changes in API."

In order to provide API compatibility, ARM has a bunch of C++ APIs that 
are supposed to map into this HAL.

2: I'd be nervous about relying on a HAL for a project that clearly 
proclaims its just for ARM processors.  I don't have specific examples 
in the current HAL (it's reasonably generic), but that doesn't lessen my 
uneasiness much.  Especially given the level of competition between ARM 
& Intel, and Intel is launching its first Microcontroller soon.


3: ARM has their own mapping of these APIs that they expect their users 
to use.  But they are all C++, and don't look to be terribly efficient 
or fun.  Plus, you know, aherm, C++ on embedded microcontrollers-- 
because references are going to work great on systems where you can't 
restart processes.

- Therefore, we need to have our own mappings of these APIs.

- HOWEVER, given ARM's power within their ecosystem, and prevalence with 
32-bit MCUs, we'd obviously want to leverage any work done here.  So, 
when we work on the HAL in v0.9-b1, we should look at designing our HAL 
APIs such that it's efficient and easy to map into the ARM mbed HAL 
APIs.  That way, any abstraction we do, will hopefully not be that 
inefficient.

An example of this is GPIOs, we designed our GPIO API 
(https://github.com/apache/incubator-mynewt-larva/blob/master/hw/hal/include/hal/hal_gpio.h) 
not to require a structure for efficiencies sake, whereas MBed's APIs 
require a gpio_t * structure to be defined by implementations, and 
passed to the GPIO functions 
(https://github.com/ARMmbed/mbed-hal/blob/master/mbed-hal/gpio_api.h). 
While we like our approach a little more, we should make that decision 
within the context of efficiently mapping into mbed's APIs as well, so 
our abstraction layer becomes a bit cleaner.

Thoughts?

Sterling