Re: What are the __retarget_lock functions?

Thomas Kindler <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <[email protected]>
Hi!

On 10.09.2018 10:53, Freddie Chopin wrote:
 > On Sun, 2018-09-09 at 10:59 +0200, Thomas Kindler wrote:
 >> 6. __retarget_lock_init() looks too complicated with the double
 >> pvPortMalloc/xSemaphoreCreate
 >
 > That's because the allocation step is useless. FreeRTOS handle is just
 > `void*`, you don't need to allocate that, just use `_LOCK_T*` directly.
 > FreeRTOS objects (with the standard API) are all dynamic anyway
 > (another very stupid decision).
 >

Unfortunateley, I found no way to get rid of the additional malloc().

Here it is again (slightly updated):

   https://gist.github.com/thomask77/3a2d54a482c294beec5d87730e163bdd

After fiddling around for a long time, I believe, there is no other way to make 
it work with FreeRTOS' dynamic allocation.

The problem is, that newlib uses _LOCK_T in __retarget_lock_acquire with the 
*address* of __lock___malloc_recursive_mutex.  For it to work with dynamic 
allocation, it would have to use the *value* of __lock___malloc_recursive_mutex.

So when implementing __retarget_lock_init, an intermediate pointer is needed (or 
all of the other functions would need to differentiate between the static 
__locks and the runtime allocated ones).

But maybe I overlooked something?


The alternative is to use the static FreeRTOS APIs:

   https://gist.github.com/thomask77/65591d78070ace68885d3fd05cdebe3a

this feels much more natural, and matches the newlib conventions.

The drawback is that it pulls in a lot of additional FreeRTOS functions that I 
don't need anywhere else.

best regards,
Thomas
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.