diff --git a/StateOS/README b/StateOS/README index 77bcdd18..2ce12a26 100644 --- a/StateOS/README +++ b/StateOS/README @@ -44,7 +44,6 @@ Features: - modified context structures - added dynamic tasks - added create/destroy functions to c++ wrapper -- used flexible array members --------- 6.3 - merged test branch diff --git a/StateOS/kernel/inc/oseventqueue.h b/StateOS/kernel/inc/oseventqueue.h index d6008b8f..785a2f66 100644 --- a/StateOS/kernel/inc/oseventqueue.h +++ b/StateOS/kernel/inc/oseventqueue.h @@ -2,7 +2,7 @@ @file StateOS: oseventqueue.h @author Rajmund Szymanski - @date 16.11.2018 + @date 17.11.2018 @brief This file contains definitions for StateOS. ****************************************************************************** @@ -56,6 +56,8 @@ struct __evq unsigned head; // first element to read from data buffer unsigned tail; // first element to write into data buffer unsigned*data; // data buffer + + unsigned :0; }; /****************************************************************************** @@ -506,8 +508,7 @@ struct EventQueueT : public __evq static EventQueueT *create( void ) { - struct __evq_data { evq_t evq; unsigned data[limit_]; }; - static_assert(sizeof(__evq_data) == sizeof(EventQueueT), "unexpected error!"); + static_assert(sizeof(__evq) + limit_ * sizeof(unsigned) == sizeof(EventQueueT), "unexpected error!"); return reinterpret_cast *>(evq_create(limit_)); } diff --git a/StateOS/kernel/inc/osjobqueue.h b/StateOS/kernel/inc/osjobqueue.h index 95932cdb..cb0e451a 100644 --- a/StateOS/kernel/inc/osjobqueue.h +++ b/StateOS/kernel/inc/osjobqueue.h @@ -2,7 +2,7 @@ @file StateOS: osjobqueue.h @author Rajmund Szymanski - @date 16.11.2018 + @date 17.11.2018 @brief This file contains definitions for StateOS. ****************************************************************************** @@ -57,6 +57,8 @@ struct __job unsigned head; // first element to read from data buffer unsigned tail; // first element to write into data buffer fun_t ** data; // data buffer + + intptr_t :0; }; /****************************************************************************** @@ -505,8 +507,7 @@ struct JobQueueT : public __box static JobQueueT *create( void ) { - struct __box_data { __box box; char data[limit_ * sizeof(FUN_t)]; }; - static_assert(sizeof(__box_data) == sizeof(JobQueueT), "unexpected error!"); + static_assert(sizeof(__box) + limit_ * sizeof(FUN_t) == sizeof(JobQueueT), "unexpected error!"); return reinterpret_cast *>(box_create(limit_, sizeof(FUN_t))); } @@ -548,8 +549,7 @@ struct JobQueueT : public __job static JobQueueT *create( void ) { - struct __job_data { __job job; FUN_t data[limit_]; }; - static_assert(sizeof(__job_data) == sizeof(JobQueueT), "unexpected error!"); + static_assert(sizeof(__job) + limit_ * sizeof(FUN_t) == sizeof(JobQueueT), "unexpected error!"); return reinterpret_cast *>(job_create(limit_)); } diff --git a/StateOS/kernel/inc/osmailboxqueue.h b/StateOS/kernel/inc/osmailboxqueue.h index a8f3199e..3c565a1d 100644 --- a/StateOS/kernel/inc/osmailboxqueue.h +++ b/StateOS/kernel/inc/osmailboxqueue.h @@ -2,7 +2,7 @@ @file StateOS: osmailboxqueue.h @author Rajmund Szymanski - @date 16.11.2018 + @date 17.11.2018 @brief This file contains definitions for StateOS. ****************************************************************************** @@ -57,6 +57,8 @@ struct __box unsigned head; // first element to read from data buffer unsigned tail; // first element to write into data buffer char * data; // data buffer + + char :0; }; /****************************************************************************** @@ -554,8 +556,7 @@ struct MailBoxQueueT : public __box static MailBoxQueueT *create( void ) { - struct __box_data { __box box; char data[limit_ * size_]; }; - static_assert(sizeof(__box_data) == sizeof(MailBoxQueueT), "unexpected error!"); + static_assert(sizeof(__box) + limit_ * size_ == sizeof(MailBoxQueueT), "unexpected error!"); return reinterpret_cast *>(box_create(limit_, size_)); } @@ -606,8 +607,7 @@ struct MailBoxQueueTT : public MailBoxQueueT static MailBoxQueueTT *create( void ) { - struct __box_data { __box box; char data[limit_ * sizeof(T)]; }; - static_assert(sizeof(__box_data) == sizeof(MailBoxQueueTT), "unexpected error!"); + static_assert(sizeof(__box) + limit_ * sizeof(T) == sizeof(MailBoxQueueTT), "unexpected error!"); return reinterpret_cast *>(box_create(limit_, sizeof(T))); } diff --git a/StateOS/kernel/inc/osmemorypool.h b/StateOS/kernel/inc/osmemorypool.h index f43a0a6c..1a0d546e 100644 --- a/StateOS/kernel/inc/osmemorypool.h +++ b/StateOS/kernel/inc/osmemorypool.h @@ -2,7 +2,7 @@ @file StateOS: osmemorypool.h @author Rajmund Szymanski - @date 16.11.2018 + @date 17.11.2018 @brief This file contains definitions for StateOS. ****************************************************************************** @@ -59,6 +59,8 @@ struct __mem unsigned limit; // size of a memory pool (max number of objects) unsigned size; // size of memory object (in sizeof(que_t) units) que_t * data; // pointer to memory pool buffer + + intptr_t :0; }; /****************************************************************************** @@ -440,8 +442,7 @@ struct MemoryPoolT : public __mem static MemoryPoolT *create( void ) { - struct __mem_data { __mem mem; que_t data[limit_ * (1 + MEM_SIZE(size_))]; }; - static_assert(sizeof(__mem_data) == sizeof(MemoryPoolT), "unexpected error!"); + static_assert(sizeof(__mem) + limit_ * (1 + MEM_SIZE(size_)) * sizeof(que_t) == sizeof(MemoryPoolT), "unexpected error!"); return reinterpret_cast *>(mem_create(limit_, size_)); } @@ -481,8 +482,7 @@ struct MemoryPoolTT : public MemoryPoolT static MemoryPoolTT *create( void ) { - struct __mem_data { __mem mem; que_t data[limit_ * (1 + MEM_SIZE(sizeof(T)))]; }; - static_assert(sizeof(__mem_data) == sizeof(MemoryPoolTT), "unexpected error!"); + static_assert(sizeof(__mem) + limit_ * (1 + MEM_SIZE(sizeof(T))) * sizeof(que_t) == sizeof(MemoryPoolTT), "unexpected error!"); return reinterpret_cast *>(mem_create(limit_, sizeof(T))); } diff --git a/StateOS/kernel/inc/osmessagebuffer.h b/StateOS/kernel/inc/osmessagebuffer.h index 4fd0e08e..290dcdd5 100644 --- a/StateOS/kernel/inc/osmessagebuffer.h +++ b/StateOS/kernel/inc/osmessagebuffer.h @@ -2,7 +2,7 @@ @file StateOS: osmessagebuffer.h @author Rajmund Szymanski - @date 16.11.2018 + @date 17.11.2018 @brief This file contains definitions for StateOS. ****************************************************************************** @@ -56,6 +56,8 @@ struct __msg unsigned head; // inherited from stream buffer unsigned tail; // inherited from stream buffer char * data; // inherited from stream buffer + + char :0; }; /****************************************************************************** @@ -621,8 +623,7 @@ struct MessageBufferT : public __msg static MessageBufferT *create( void ) { - struct __msg_data { __msg msg; char data[limit_]; }; - static_assert(sizeof(__msg_data) == sizeof(MessageBufferT), "unexpected error!"); + static_assert(sizeof(__msg) + limit_ == sizeof(MessageBufferT), "unexpected error!"); return reinterpret_cast *>(msg_create(limit_)); } @@ -675,8 +676,7 @@ struct MessageBufferTT : public MessageBufferT *create( void ) { - struct __msg_data { __msg msg; char data[limit_ * (sizeof(unsigned) + sizeof(T))]; }; - static_assert(sizeof(__msg_data) == sizeof(MessageBufferTT), "unexpected error!"); + static_assert(sizeof(__msg) + limit_ * (sizeof(unsigned) + sizeof(T)) == sizeof(MessageBufferTT), "unexpected error!"); return reinterpret_cast *>(msg_create(limit_ * (sizeof(unsigned) + sizeof(T)))); } diff --git a/StateOS/kernel/inc/osstreambuffer.h b/StateOS/kernel/inc/osstreambuffer.h index a88df9bb..f8341549 100644 --- a/StateOS/kernel/inc/osstreambuffer.h +++ b/StateOS/kernel/inc/osstreambuffer.h @@ -2,7 +2,7 @@ @file StateOS: osstreambuffer.h @author Rajmund Szymanski - @date 16.11.2018 + @date 17.11.2018 @brief This file contains definitions for StateOS. ****************************************************************************** @@ -56,6 +56,8 @@ struct __stm unsigned head; // first element to read from data buffer unsigned tail; // first element to write into data buffer char * data; // data buffer + + char :0; }; /****************************************************************************** @@ -596,8 +598,7 @@ struct StreamBufferT : public __stm static StreamBufferT *create( void ) { - struct __stm_data { __stm stm; char data[limit_]; }; - static_assert(sizeof(__stm_data) == sizeof(StreamBufferT), "unexpected error!"); + static_assert(sizeof(__stm) + limit_ == sizeof(StreamBufferT), "unexpected error!"); return reinterpret_cast *>(stm_create(limit_)); } @@ -648,8 +649,7 @@ struct StreamBufferTT : public StreamBufferT static StreamBufferTT *create( void ) { - struct __stm_data { __stm stm; char data[limit_ * sizeof(T)]; }; - static_assert(sizeof(__stm_data) == sizeof(StreamBufferTT), "unexpected error!"); + static_assert(sizeof(__stm) + limit_ * sizeof(T) == sizeof(StreamBufferTT), "unexpected error!"); return reinterpret_cast *>(stm_create(limit_ * sizeof(T))); } diff --git a/StateOS/kernel/inc/ostask.h b/StateOS/kernel/inc/ostask.h index 097a467d..4d42797b 100644 --- a/StateOS/kernel/inc/ostask.h +++ b/StateOS/kernel/inc/ostask.h @@ -2,7 +2,7 @@ @file StateOS: ostask.h @author Rajmund Szymanski - @date 16.11.2018 + @date 17.11.2018 @brief This file contains definitions for StateOS. ****************************************************************************** @@ -180,6 +180,7 @@ struct __tsk #else #define _TSK_EXTRA #endif + stk_t :0; }; /****************************************************************************** @@ -1316,8 +1317,7 @@ struct TaskT : public baseTask { CriticalSection cs; TaskT *tsk; - struct __tsk_data { tsk_t tsk; stk_t data[STK_SIZE(size_)]; }; - static_assert(sizeof(__tsk_data) == sizeof(TaskT), "unexpected error!"); + static_assert(sizeof(__tsk) + STK_SIZE(size_) * sizeof(stk_t) == sizeof(TaskT), "unexpected error!"); #if OS_FUNCTIONAL tsk = reinterpret_cast *>(wrk_create(_prio, baseTask::fun_, size_)); tsk->__tsk::fun = _state; @@ -1332,8 +1332,7 @@ struct TaskT : public baseTask { CriticalSection cs; TaskT *tsk; - struct __tsk_data { tsk_t tsk; stk_t data[STK_SIZE(size_)]; }; - static_assert(sizeof(__tsk_data) == sizeof(TaskT), "unexpected error!"); + static_assert(sizeof(__tsk) + STK_SIZE(size_) * sizeof(stk_t) == sizeof(TaskT), "unexpected error!"); #if OS_FUNCTIONAL tsk = reinterpret_cast *>(wrk_detached(_prio, baseTask::fun_, size_)); tsk->__tsk::fun = _state; diff --git a/StateOS/kernel/src/osbarrier.c b/StateOS/kernel/src/osbarrier.c index bf0e30a6..75f051b3 100644 --- a/StateOS/kernel/src/osbarrier.c +++ b/StateOS/kernel/src/osbarrier.c @@ -2,7 +2,7 @@ @file StateOS: osbarrier.c @author Rajmund Szymanski - @date 16.11.2018 + @date 17.11.2018 @brief This file provides set of functions for StateOS. ****************************************************************************** @@ -63,7 +63,7 @@ bar_t *bar_create( unsigned limit ) sys_lock(); { - bar = sys_alloc(sizeof(struct __bar)); + bar = sys_alloc(sizeof(bar_t)); bar_init(bar, limit); bar->obj.res = bar; } diff --git a/StateOS/kernel/src/osconditionvariable.c b/StateOS/kernel/src/osconditionvariable.c index 86d42a24..91e5c639 100644 --- a/StateOS/kernel/src/osconditionvariable.c +++ b/StateOS/kernel/src/osconditionvariable.c @@ -2,7 +2,7 @@ @file StateOS: osconditionvariable.c @author Rajmund Szymanski - @date 16.11.2018 + @date 17.11.2018 @brief This file provides set of functions for StateOS. ****************************************************************************** @@ -59,7 +59,7 @@ cnd_t *cnd_create( void ) sys_lock(); { - cnd = sys_alloc(sizeof(struct __cnd)); + cnd = sys_alloc(sizeof(cnd_t)); cnd_init(cnd); cnd->obj.res = cnd; } diff --git a/StateOS/kernel/src/osevent.c b/StateOS/kernel/src/osevent.c index 25fa9ede..42478bf0 100644 --- a/StateOS/kernel/src/osevent.c +++ b/StateOS/kernel/src/osevent.c @@ -2,7 +2,7 @@ @file StateOS: osevent.c @author Rajmund Szymanski - @date 16.11.2018 + @date 17.11.2018 @brief This file provides set of functions for StateOS. ****************************************************************************** @@ -58,7 +58,7 @@ evt_t *evt_create( void ) sys_lock(); { - evt = sys_alloc(sizeof(struct __evt)); + evt = sys_alloc(sizeof(evt_t)); evt_init(evt); evt->obj.res = evt; } diff --git a/StateOS/kernel/src/oseventqueue.c b/StateOS/kernel/src/oseventqueue.c index 2943da95..207eb350 100644 --- a/StateOS/kernel/src/oseventqueue.c +++ b/StateOS/kernel/src/oseventqueue.c @@ -2,7 +2,7 @@ @file StateOS: oseventqueue.c @author Rajmund Szymanski - @date 16.11.2018 + @date 17.11.2018 @brief This file provides set of functions for StateOS. ****************************************************************************** @@ -61,7 +61,6 @@ evq_t *evq_create( unsigned limit ) { evq_t * evq; unsigned bufsize; - struct __evq_data { evq_t evq; unsigned data[]; } *tmp; assert_tsk_context(); assert(limit); @@ -69,10 +68,9 @@ evq_t *evq_create( unsigned limit ) sys_lock(); { bufsize = limit * sizeof(unsigned); - tmp = sys_alloc(sizeof(struct __evq_data) + bufsize); - evq = &tmp->evq; - evq_init(evq, tmp->data, bufsize); - evq->obj.res = tmp; + evq = sys_alloc(sizeof(evq_t) + bufsize); + evq_init(evq, (void *)(evq + 1), bufsize); + evq->obj.res = evq; } sys_unlock(); diff --git a/StateOS/kernel/src/osfastmutex.c b/StateOS/kernel/src/osfastmutex.c index 5ac3e15f..64b160cd 100644 --- a/StateOS/kernel/src/osfastmutex.c +++ b/StateOS/kernel/src/osfastmutex.c @@ -2,7 +2,7 @@ @file StateOS: osfastmutex.c @author Rajmund Szymanski - @date 16.11.2018 + @date 17.11.2018 @brief This file provides set of functions for StateOS. ****************************************************************************** @@ -59,7 +59,7 @@ mut_t *mut_create( void ) sys_lock(); { - mut = sys_alloc(sizeof(struct __mut)); + mut = sys_alloc(sizeof(mut_t)); mut_init(mut); mut->obj.res = mut; } diff --git a/StateOS/kernel/src/osflag.c b/StateOS/kernel/src/osflag.c index dd6ec831..d011abdd 100644 --- a/StateOS/kernel/src/osflag.c +++ b/StateOS/kernel/src/osflag.c @@ -2,7 +2,7 @@ @file StateOS: osflag.c @author Rajmund Szymanski - @date 16.11.2018 + @date 17.11.2018 @brief This file provides set of functions for StateOS. ****************************************************************************** @@ -62,7 +62,7 @@ flg_t *flg_create( unsigned init ) sys_lock(); { - flg = sys_alloc(sizeof(struct __flg)); + flg = sys_alloc(sizeof(flg_t)); flg_init(flg, init); flg->obj.res = flg; } diff --git a/StateOS/kernel/src/osjobqueue.c b/StateOS/kernel/src/osjobqueue.c index 491353ed..74bbd054 100644 --- a/StateOS/kernel/src/osjobqueue.c +++ b/StateOS/kernel/src/osjobqueue.c @@ -2,7 +2,7 @@ @file StateOS: osjobqueue.c @author Rajmund Szymanski - @date 16.11.2018 + @date 17.11.2018 @brief This file provides set of functions for StateOS. ****************************************************************************** @@ -61,7 +61,6 @@ job_t *job_create( unsigned limit ) { job_t * job; unsigned bufsize; - struct __job_data { job_t job; fun_t *data[]; } *tmp; assert_tsk_context(); assert(limit); @@ -69,10 +68,9 @@ job_t *job_create( unsigned limit ) sys_lock(); { bufsize = limit * sizeof(fun_t *); - tmp = sys_alloc(sizeof(struct __job_data) + bufsize); - job = &tmp->job; - job_init(job, tmp->data, bufsize); - job->obj.res = tmp; + job = sys_alloc(sizeof(job_t) + bufsize); + job_init(job, (void *)(job + 1), bufsize); + job->obj.res = job; } sys_unlock(); diff --git a/StateOS/kernel/src/oslist.c b/StateOS/kernel/src/oslist.c index 081da222..3c09e6ae 100644 --- a/StateOS/kernel/src/oslist.c +++ b/StateOS/kernel/src/oslist.c @@ -2,7 +2,7 @@ @file StateOS: oslist.c @author Rajmund Szymanski - @date 16.11.2018 + @date 17.11.2018 @brief This file provides set of functions for StateOS. ****************************************************************************** @@ -60,7 +60,7 @@ lst_t *lst_create( void ) sys_lock(); { - lst = sys_alloc(sizeof(struct __lst)); + lst = sys_alloc(sizeof(lst_t)); lst_init(lst); lst->obj.res = lst; } diff --git a/StateOS/kernel/src/osmailboxqueue.c b/StateOS/kernel/src/osmailboxqueue.c index 1393f49d..f44cd39d 100644 --- a/StateOS/kernel/src/osmailboxqueue.c +++ b/StateOS/kernel/src/osmailboxqueue.c @@ -2,7 +2,7 @@ @file StateOS: osmailboxqueue.c @author Rajmund Szymanski - @date 16.11.2018 + @date 17.11.2018 @brief This file provides set of functions for StateOS. ****************************************************************************** @@ -63,7 +63,6 @@ box_t *box_create( unsigned limit, unsigned size ) { box_t * box; unsigned bufsize; - struct __box_data { box_t box; char data[]; } *tmp; assert_tsk_context(); assert(limit); @@ -72,10 +71,9 @@ box_t *box_create( unsigned limit, unsigned size ) sys_lock(); { bufsize = limit * size; - tmp = sys_alloc(sizeof(struct __box_data) + bufsize); - box = &tmp->box; - box_init(box, size, tmp->data, bufsize); - box->obj.res = tmp; + box = sys_alloc(sizeof(box_t) + bufsize); + box_init(box, size, (void *)(box + 1), bufsize); + box->obj.res = box; } sys_unlock(); diff --git a/StateOS/kernel/src/osmemorypool.c b/StateOS/kernel/src/osmemorypool.c index ee140889..cef0e8b8 100644 --- a/StateOS/kernel/src/osmemorypool.c +++ b/StateOS/kernel/src/osmemorypool.c @@ -2,7 +2,7 @@ @file StateOS: osmemorypool.c @author Rajmund Szymanski - @date 16.11.2018 + @date 17.11.2018 @brief This file provides set of functions for StateOS. ****************************************************************************** @@ -89,7 +89,6 @@ mem_t *mem_create( unsigned limit, unsigned size ) { mem_t * mem; unsigned bufsize; - struct __mem_data { mem_t mem; que_t data[]; } *tmp; assert_tsk_context(); assert(limit); @@ -98,10 +97,9 @@ mem_t *mem_create( unsigned limit, unsigned size ) sys_lock(); { bufsize = limit * (1 + MEM_SIZE(size)) * sizeof(que_t); - tmp = sys_alloc(sizeof(struct __mem_data) + bufsize); - mem = &tmp->mem; - mem_init(mem, size, tmp->data, bufsize); - mem->lst.obj.res = tmp; + mem = sys_alloc(sizeof(mem_t) + bufsize); + mem_init(mem, size, (void *)(mem + 1), bufsize); + mem->lst.obj.res = mem; } sys_unlock(); diff --git a/StateOS/kernel/src/osmessagebuffer.c b/StateOS/kernel/src/osmessagebuffer.c index 56a92e18..95fa9bf5 100644 --- a/StateOS/kernel/src/osmessagebuffer.c +++ b/StateOS/kernel/src/osmessagebuffer.c @@ -2,7 +2,7 @@ @file StateOS: osmessagebuffer.c @author Rajmund Szymanski - @date 16.11.2018 + @date 17.11.2018 @brief This file provides set of functions for StateOS. ****************************************************************************** @@ -61,7 +61,6 @@ msg_t *msg_create( unsigned limit ) { msg_t * msg; unsigned bufsize; - struct __msg_data { msg_t msg; char data[]; } *tmp; assert_tsk_context(); assert(limit); @@ -69,10 +68,9 @@ msg_t *msg_create( unsigned limit ) sys_lock(); { bufsize = limit; - tmp = sys_alloc(sizeof(struct __msg_data) + bufsize); - msg = &tmp->msg; - msg_init(msg, tmp->data, bufsize); - msg->obj.res = tmp; + msg = sys_alloc(sizeof(msg_t) + bufsize); + msg_init(msg, (void *)(msg + 1), bufsize); + msg->obj.res = msg; } sys_unlock(); diff --git a/StateOS/kernel/src/osmutex.c b/StateOS/kernel/src/osmutex.c index d86ec4b8..ebf93bf5 100644 --- a/StateOS/kernel/src/osmutex.c +++ b/StateOS/kernel/src/osmutex.c @@ -2,7 +2,7 @@ @file StateOS: osmutex.c @author Rajmund Szymanski - @date 16.11.2018 + @date 17.11.2018 @brief This file provides set of functions for StateOS. ****************************************************************************** @@ -66,7 +66,7 @@ mtx_t *mtx_create( unsigned mode, unsigned prio ) sys_lock(); { - mtx = sys_alloc(sizeof(struct __mtx)); + mtx = sys_alloc(sizeof(mtx_t)); mtx_init(mtx, mode, prio); mtx->obj.res = mtx; } diff --git a/StateOS/kernel/src/ossemaphore.c b/StateOS/kernel/src/ossemaphore.c index 32d1d98a..f971b847 100644 --- a/StateOS/kernel/src/ossemaphore.c +++ b/StateOS/kernel/src/ossemaphore.c @@ -2,7 +2,7 @@ @file StateOS: ossemaphore.c @author Rajmund Szymanski - @date 16.11.2018 + @date 17.11.2018 @brief This file provides set of functions for StateOS. ****************************************************************************** @@ -63,7 +63,7 @@ sem_t *sem_create( unsigned init, unsigned limit ) sys_lock(); { - sem = sys_alloc(sizeof(struct __sem)); + sem = sys_alloc(sizeof(sem_t)); sem_init(sem, init, limit); sem->obj.res = sem; } diff --git a/StateOS/kernel/src/ossignal.c b/StateOS/kernel/src/ossignal.c index fb8fe29a..45988aef 100644 --- a/StateOS/kernel/src/ossignal.c +++ b/StateOS/kernel/src/ossignal.c @@ -2,7 +2,7 @@ @file StateOS: ossignal.c @author Rajmund Szymanski - @date 16.11.2018 + @date 17.11.2018 @brief This file provides set of functions for StateOS. ****************************************************************************** @@ -62,7 +62,7 @@ sig_t *sig_create( unsigned mask ) sys_lock(); { - sig = sys_alloc(sizeof(struct __sig)); + sig = sys_alloc(sizeof(sig_t)); sig_init(sig, mask); sig->obj.res = sig; } diff --git a/StateOS/kernel/src/osstreambuffer.c b/StateOS/kernel/src/osstreambuffer.c index 591ef6f0..413120ca 100644 --- a/StateOS/kernel/src/osstreambuffer.c +++ b/StateOS/kernel/src/osstreambuffer.c @@ -2,7 +2,7 @@ @file StateOS: osstreambuffer.c @author Rajmund Szymanski - @date 16.11.2018 + @date 17.11.2018 @brief This file provides set of functions for StateOS. ****************************************************************************** @@ -61,7 +61,6 @@ stm_t *stm_create( unsigned limit ) { stm_t * stm; unsigned bufsize; - struct __stm_data { stm_t stm; char data[]; } *tmp; assert_tsk_context(); assert(limit); @@ -69,10 +68,9 @@ stm_t *stm_create( unsigned limit ) sys_lock(); { bufsize = limit; - tmp = sys_alloc(sizeof(struct __stm_data) + bufsize); - stm = &tmp->stm; - stm_init(stm, tmp->data, bufsize); - stm->obj.res = tmp; + stm = sys_alloc(sizeof(stm_t) + bufsize); + stm_init(stm, (void *)(stm + 1), bufsize); + stm->obj.res = stm; } sys_unlock(); diff --git a/StateOS/kernel/src/ostask.c b/StateOS/kernel/src/ostask.c index ce8a84fa..7987e288 100644 --- a/StateOS/kernel/src/ostask.c +++ b/StateOS/kernel/src/ostask.c @@ -2,7 +2,7 @@ @file StateOS: ostask.c @author Rajmund Szymanski - @date 16.11.2018 + @date 17.11.2018 @brief This file provides set of functions for StateOS. ****************************************************************************** @@ -68,7 +68,6 @@ tsk_t *wrk_create( unsigned prio, fun_t *state, unsigned size ) { tsk_t * tsk; unsigned bufsize; - struct __tsk_data { tsk_t tsk; stk_t data[]; } *tmp; assert_tsk_context(); assert(state); @@ -77,10 +76,9 @@ tsk_t *wrk_create( unsigned prio, fun_t *state, unsigned size ) sys_lock(); { bufsize = STK_SIZE(size) * sizeof(stk_t); - tmp = sys_alloc(sizeof(struct __tsk_data) + bufsize); - tsk = &tmp->tsk; - tsk_init(tsk, prio, state, tmp->data, bufsize); - tsk->hdr.obj.res = tmp; + tsk = sys_alloc(sizeof(tsk_t) + bufsize); + tsk_init(tsk, prio, state, (void *)(tsk + 1), bufsize); + tsk->hdr.obj.res = tsk; } sys_unlock(); diff --git a/StateOS/kernel/src/ostimer.c b/StateOS/kernel/src/ostimer.c index 88c1466b..b3304d66 100644 --- a/StateOS/kernel/src/ostimer.c +++ b/StateOS/kernel/src/ostimer.c @@ -2,7 +2,7 @@ @file StateOS: ostimer.c @author Rajmund Szymanski - @date 16.11.2018 + @date 17.11.2018 @brief This file provides set of functions for StateOS. ****************************************************************************** @@ -61,7 +61,7 @@ tmr_t *tmr_create( fun_t *state ) sys_lock(); { - tmr = sys_alloc(sizeof(struct __tmr)); + tmr = sys_alloc(sizeof(tmr_t)); tmr_init(tmr, state); tmr->hdr.obj.res = tmr; }