瀏覽代碼

semaphore结构中value仍改为uint16_t,加入对其设置范围的检测,加入对齐变量

shaojinchun 6 年之前
父節點
當前提交
7bcee9bcb1
共有 2 個文件被更改,包括 5 次插入2 次删除
  1. 2 1
      include/rtdef.h
  2. 3 1
      src/ipc.c

+ 2 - 1
include/rtdef.h

@@ -655,7 +655,8 @@ struct rt_semaphore
 {
     struct rt_ipc_object parent;                        /**< inherit from ipc_object */
 
-    rt_uint32_t          value;                         /**< value of semaphore. */
+    rt_uint16_t          value;                         /**< value of semaphore. */
+    rt_uint16_t          reserved;                      /**< reserved field */
 };
 typedef struct rt_semaphore *rt_sem_t;
 #endif

+ 3 - 1
src/ipc.c

@@ -201,6 +201,7 @@ rt_err_t rt_sem_init(rt_sem_t    sem,
                      rt_uint8_t  flag)
 {
     RT_ASSERT(sem != RT_NULL);
+    RT_ASSERT(value < 0x10000U);
 
     /* init object */
     rt_object_init(&(sem->parent.parent), RT_Object_Class_Semaphore, name);
@@ -209,7 +210,7 @@ rt_err_t rt_sem_init(rt_sem_t    sem,
     rt_ipc_object_init(&(sem->parent));
 
     /* set init value */
-    sem->value = value;
+    sem->value = (rt_uint16_t)value;
 
     /* set parent */
     sem->parent.parent.flag = flag;
@@ -261,6 +262,7 @@ rt_sem_t rt_sem_create(const char *name, rt_uint32_t value, rt_uint8_t flag)
     rt_sem_t sem;
 
     RT_DEBUG_NOT_IN_INTERRUPT;
+    RT_ASSERT(value < 0x10000U);
 
     /* allocate object */
     sem = (rt_sem_t)rt_object_allocate(RT_Object_Class_Semaphore, name);