aboutsummaryrefslogtreecommitdiffstats
path: root/os/rt/src/chheap.c
diff options
context:
space:
mode:
authorGiovanni Di Sirio <gdisirio@gmail.com>2015-03-03 11:01:09 +0000
committerGiovanni Di Sirio <gdisirio@gmail.com>2015-03-03 11:01:09 +0000
commitfbd65c1f6ae3c802467ab99f4b2fe9c7c084972e (patch)
treecafc124edd19ce4f3b676a9de703f7a0aefed409 /os/rt/src/chheap.c
parent3d1a86e9fb0b9495a726dab534e97c063b5f368b (diff)
downloadChibiOS-fbd65c1f6ae3c802467ab99f4b2fe9c7c084972e.tar.gz
ChibiOS-fbd65c1f6ae3c802467ab99f4b2fe9c7c084972e.tar.bz2
ChibiOS-fbd65c1f6ae3c802467ab99f4b2fe9c7c084972e.zip
MISRA-related fixes.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@7711 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/rt/src/chheap.c')
-rw-r--r--os/rt/src/chheap.c24
1 files changed, 14 insertions, 10 deletions
diff --git a/os/rt/src/chheap.c b/os/rt/src/chheap.c
index 9e39951ab..305b88795 100644
--- a/os/rt/src/chheap.c
+++ b/os/rt/src/chheap.c
@@ -83,6 +83,7 @@ static memory_heap_t default_heap;
* @notapi
*/
void _heap_init(void) {
+
default_heap.h_provider = chCoreAlloc;
default_heap.h_free.h.u.next = (union heap_header *)NULL;
default_heap.h_free.h.size = 0;
@@ -145,8 +146,8 @@ void *chHeapAlloc(memory_heap_t *heapp, size_t size) {
size = MEM_ALIGN_NEXT(size);
qp = &heapp->h_free;
- H_LOCK(heapp);
+ H_LOCK(heapp);
while (qp->h.u.next != NULL) {
hp = qp->h.u.next;
if (hp->h.size >= size) {
@@ -165,13 +166,12 @@ void *chHeapAlloc(memory_heap_t *heapp, size_t size) {
hp->h.size = size;
}
hp->h.u.heap = heapp;
-
H_UNLOCK(heapp);
+
return (void *)(hp + 1);
}
qp = hp;
}
-
H_UNLOCK(heapp);
/* More memory is required, tries to get it from the associated provider
@@ -182,9 +182,11 @@ void *chHeapAlloc(memory_heap_t *heapp, size_t size) {
hp->h.u.heap = heapp;
hp->h.size = size;
hp++;
+
return (void *)hp;
}
}
+
return NULL;
}
@@ -208,8 +210,8 @@ void chHeapFree(void *p) {
hp = (union heap_header *)p - 1;
heapp = hp->h.u.heap;
qp = &heapp->h_free;
- H_LOCK(heapp);
+ H_LOCK(heapp);
while (true) {
chDbgAssert((hp < qp) || (hp >= LIMIT(qp)), "within free block");
@@ -233,8 +235,8 @@ void chHeapFree(void *p) {
}
qp = qp->h.u.next;
}
-
H_UNLOCK(heapp);
+
return;
}
@@ -255,18 +257,20 @@ size_t chHeapStatus(memory_heap_t *heapp, size_t *sizep) {
union heap_header *qp;
size_t n, sz;
- if (heapp == NULL)
+ if (heapp == NULL) {
heapp = &default_heap;
+ }
H_LOCK(heapp);
-
sz = 0;
- for (n = 0, qp = &heapp->h_free; qp->h.u.next; n++, qp = qp->h.u.next)
+ for (n = 0, qp = &heapp->h_free; qp->h.u.next; n++, qp = qp->h.u.next) {
sz += qp->h.u.next->h.size;
- if (sizep)
+ }
+ if (sizep) {
*sizep = sz;
-
+ }
H_UNLOCK(heapp);
+
return n;
}