提交 1cb9b10d 编写于 作者: B Bernard Xiong

Merge pull request #501 from armink/master

[Kernel] 为RT_ASSERT添加了钩子方法
......@@ -84,8 +84,13 @@ while (0)
if (!(EX)) \
{ \
volatile char dummy = 0; \
rt_kprintf("(%s) assert failed at %s:%d \n", #EX, __FUNCTION__, __LINE__);\
while (dummy == 0); \
if (rt_assert_hook == RT_NULL) \
{ \
rt_kprintf("(%s) assert failed at %s:%d \n", #EX, __FUNCTION__, __LINE__);\
while (dummy == 0); \
} else { \
rt_assert_hook(#EX, __FUNCTION__, __LINE__); \
} \
}
/* Macro to check current context */
......
......@@ -515,6 +515,11 @@ rt_uint32_t rt_strcasecmp(const char *a, const char *b);
void rt_show_version(void);
#ifdef RT_DEBUG
extern void (*rt_assert_hook)(const char* ex, const char* func, rt_size_t line);
void rt_assert_set_hook(void (*hook)(const char* ex, const char* func, rt_size_t line));
#endif /* RT_DEBUG */
/*@}*/
#ifdef __cplusplus
......
......@@ -1237,6 +1237,19 @@ int __rt_ffs(int value)
}
#endif
#ifdef RT_DEBUG
/* RT_ASSERT(EX)'s hook */
void (*rt_assert_hook)(const char* ex, const char* func, rt_size_t line);
/**
* This function will set a hook function to RT_ASSERT(EX). It will run when the expression is false.
*
* @param hook the hook function
*/
void rt_assert_set_hook(void (*hook)(const char* ex, const char* func, rt_size_t line)) {
rt_assert_hook = hook;
}
#endif /* RT_DEBUG */
#if !defined (RT_USING_NEWLIB) && defined (RT_USING_MINILIBC) && defined (__GNUC__)
#include <sys/types.h>
void *memcpy(void *dest, const void *src, size_t n) __attribute__((weak, alias("rt_memcpy")));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册