summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMeco Man <[email protected]>2020-12-30 03:44:37 -0600
committerGitHub <[email protected]>2020-12-30 03:44:37 -0600
commit4a4f00de6bf553a7b047acb2f43b38693c0afaa2 (patch)
treea7db2443e8409bf1304291c583498340364ba6e8 /src
parent3bca2cfb418f03c529fc8563b62c19d391caf90b (diff)
parent4c399f88bb15416e833e9b86ad9de46807ca12e0 (diff)
Merge pull request #8 from RT-Thread/master
pr
Diffstat (limited to 'src')
-rw-r--r--src/clock.c17
-rw-r--r--src/ipc.c11
-rw-r--r--src/memheap.c14
-rw-r--r--src/scheduler.c2
4 files changed, 41 insertions, 3 deletions
diff --git a/src/clock.c b/src/clock.c
index 9fd276cf6f..66923e5c00 100644
--- a/src/clock.c
+++ b/src/clock.c
@@ -13,6 +13,7 @@
* 2010-07-13 Bernard fix rt_tick_from_millisecond issue found by kuronca
* 2011-06-26 Bernard add rt_tick_set function.
* 2018-11-22 Jesven add per cpu tick
+ * 2020-12-29 Meco Man add function rt_tick_get_millisecond()
*/
#include <rthw.h>
@@ -116,5 +117,21 @@ rt_tick_t rt_tick_from_millisecond(rt_int32_t ms)
}
RTM_EXPORT(rt_tick_from_millisecond);
+/**
+ * This function will provide the passed millisecond from boot.
+ *
+ * @return passed millisecond from boot
+ */
+RT_WEAK rt_tick_t rt_tick_get_millisecond(void)
+{
+#if 1000 % RT_TICK_PER_SECOND == 0u
+ return rt_tick_get() * (1000u / RT_TICK_PER_SECOND);
+#else
+ #warning "rt-thread cannot provide a correct 1ms-based tick any longer,\
+ please redefine this function in another file by using a high-precision hard-timer."
+ return 0;
+#endif
+}
+
/**@}*/
diff --git a/src/ipc.c b/src/ipc.c
index 454fcb5439..4261f617b0 100644
--- a/src/ipc.c
+++ b/src/ipc.c
@@ -1764,8 +1764,12 @@ rt_err_t rt_mb_recv(rt_mailbox_t mb, rt_ubase_t *value, rt_int32_t timeout)
++ mb->out_offset;
if (mb->out_offset >= mb->size)
mb->out_offset = 0;
+
/* decrease message entry */
- mb->entry --;
+ if(mb->entry > 0)
+ {
+ mb->entry --;
+ }
/* resume suspended thread */
if (!rt_list_isempty(&(mb->suspend_sender_thread)))
@@ -2439,7 +2443,10 @@ rt_err_t rt_mq_recv(rt_mq_t mq,
mq->msg_queue_tail = RT_NULL;
/* decrease message entry */
- mq->entry --;
+ if(mq->entry > 0)
+ {
+ mq->entry --;
+ }
/* enable interrupt */
rt_hw_interrupt_enable(temp);
diff --git a/src/memheap.c b/src/memheap.c
index 0ff6925696..afa06fb9bf 100644
--- a/src/memheap.c
+++ b/src/memheap.c
@@ -712,6 +712,20 @@ void *rt_calloc(rt_size_t count, rt_size_t size)
}
RTM_EXPORT(rt_calloc);
+void rt_memory_info(rt_uint32_t *total,
+ rt_uint32_t *used,
+ rt_uint32_t *max_used)
+{
+ if (total != RT_NULL)
+ *total = _heap.pool_size;
+
+ if (used != RT_NULL)
+ *used = _heap.pool_size - _heap.available_size;
+
+ if (max_used != RT_NULL)
+ *max_used = _heap.max_used_size;
+}
+
#endif
#endif
diff --git a/src/scheduler.c b/src/scheduler.c
index 677be6cff7..06f305ea0b 100644
--- a/src/scheduler.c
+++ b/src/scheduler.c
@@ -43,7 +43,7 @@ rt_uint8_t rt_thread_ready_table[32];
#ifndef RT_USING_SMP
extern volatile rt_uint8_t rt_interrupt_nest;
static rt_int16_t rt_scheduler_lock_nest;
-struct rt_thread *rt_current_thread;
+struct rt_thread *rt_current_thread = RT_NULL;
rt_uint8_t rt_current_priority;
#endif /*RT_USING_SMP*/