瀏覽代碼

add reentrance check for lwip arch/ethernetif; convert an example to utf-8 format.

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1495 bbd45198-f89e-11dd-88c7-29a3b14d5316
mbbill@gmail.com 14 年之前
父節點
當前提交
8e8fa0035d

+ 24 - 2
components/net/lwip-1.4.0/src/arch/sys_arch.c

@@ -27,6 +27,8 @@ err_t sys_sem_new(sys_sem_t *sem, u8_t count)
 	char tname[RT_NAME_MAX];
 	sys_sem_t tmpsem;
 
+	RT_DEBUG_NOT_REENT
+
 	rt_snprintf(tname, RT_NAME_MAX, "%s%d", SYS_LWIP_SEM_NAME, counter);
 
 #if SYS_DEBUG
@@ -53,6 +55,8 @@ err_t sys_sem_new(sys_sem_t *sem, u8_t count)
 
 void sys_sem_free(sys_sem_t *sem)
 {
+	RT_DEBUG_NOT_REENT
+
 #if SYS_DEBUG
 	{
 		struct rt_thread *thread;
@@ -90,6 +94,8 @@ u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout)
 	s32_t t;
 	u32_t tick;
 
+	RT_DEBUG_NOT_REENT
+	
 	/* get the begin tick */
 	tick = rt_tick_get();
 #if SYS_DEBUG
@@ -161,6 +167,8 @@ err_t sys_mutex_new(sys_mutex_t *mutex)
 	char tname[RT_NAME_MAX];
 	sys_mutex_t tmpmutex;
 
+	RT_DEBUG_NOT_REENT
+
 	rt_snprintf(tname, RT_NAME_MAX, "%s%d", SYS_LWIP_MUTEX_NAME, counter);
 
 #if SYS_DEBUG
@@ -189,6 +197,8 @@ err_t sys_mutex_new(sys_mutex_t *mutex)
 void sys_mutex_lock(sys_mutex_t *mutex)
 {
 
+	RT_DEBUG_NOT_REENT
+
 #if SYS_DEBUG
 	{
 		struct rt_thread *thread;
@@ -226,6 +236,8 @@ void sys_mutex_unlock(sys_mutex_t *mutex)
  * @param mutex the mutex to delete */
 void sys_mutex_free(sys_mutex_t *mutex)
 {
+	RT_DEBUG_NOT_REENT
+
 #if SYS_DEBUG
 	{
 		struct rt_thread *thread;
@@ -263,6 +275,8 @@ err_t sys_mbox_new(sys_mbox_t *mbox, int size)
 	char tname[RT_NAME_MAX];
 	sys_mbox_t tmpmbox;
 
+	RT_DEBUG_NOT_REENT
+
 	rt_snprintf(tname, RT_NAME_MAX, "%s%d", SYS_LWIP_MBOX_NAME, counter);
 
 #if SYS_DEBUG
@@ -288,6 +302,8 @@ err_t sys_mbox_new(sys_mbox_t *mbox, int size)
 
 void sys_mbox_free(sys_mbox_t *mbox)
 {
+	RT_DEBUG_NOT_REENT
+
 #if SYS_DEBUG
 	{
 		struct rt_thread *thread;
@@ -309,6 +325,8 @@ void sys_mbox_free(sys_mbox_t *mbox)
  * @param msg message to post (ATTENTION: can be NULL) */
 void sys_mbox_post(sys_mbox_t *mbox, void *msg)
 {
+	RT_DEBUG_NOT_REENT
+
 #if SYS_DEBUG
 	{
 		struct rt_thread *thread;
@@ -319,8 +337,8 @@ void sys_mbox_post(sys_mbox_t *mbox, void *msg)
 	}
 #endif
 
-	//rt_mb_send_wait(*mbox, (rt_uint32_t)msg,RT_WAITING_FOREVER);
-	rt_mb_send(*mbox, (rt_uint32_t)msg);
+	rt_mb_send_wait(*mbox, (rt_uint32_t)msg,RT_WAITING_FOREVER);
+
 	return;
 }
 
@@ -355,6 +373,8 @@ u32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, u32_t timeout)
 	s32_t t;
 	u32_t tick;
 
+	RT_DEBUG_NOT_REENT
+
 	/* get the begin tick */
 	tick = rt_tick_get();
 
@@ -457,6 +477,8 @@ sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread, void *arg,
 {
 	rt_thread_t t;
 
+	RT_DEBUG_NOT_REENT
+
 	/* create thread */
 	t = rt_thread_create(name, thread, arg, stacksize, prio, 20);
 	RT_ASSERT(t != RT_NULL);

+ 7 - 0
components/net/lwip-1.4.0/src/netif/ethernetif.c

@@ -94,6 +94,8 @@ static err_t ethernetif_linkoutput(struct netif *netif, struct pbuf *p)
 	struct eth_tx_msg msg;
 	struct eth_device* enetif;
 
+	RT_DEBUG_NOT_REENT
+
 	enetif = (struct eth_device*)netif->state;
 
 	/* send a message to eth tx thread */
@@ -117,6 +119,8 @@ static struct eth_device* eth_dev;
 static err_t ethernetif_init(struct netif *netif)
 {
 
+	RT_DEBUG_NOT_REENT
+
 	if( (eth_dev == RT_NULL) || (eth_dev->netif != netif) )
 		return ERR_MEM;
 
@@ -159,6 +163,9 @@ static err_t ethernetif_init(struct netif *netif)
 rt_err_t eth_device_init(struct eth_device* dev, const char* name)
 {
 	struct netif* pnetif;
+
+	RT_DEBUG_NOT_REENT
+
 	/* allocate memory */
 	pnetif = (struct netif*) rt_malloc (sizeof(struct netif));
 	if (pnetif == RT_NULL)

+ 30 - 30
examples/kernel/mbox_send_wait.c

@@ -1,43 +1,43 @@
 /*
- * 程序清单:邮箱例程_发送阻塞
+ * 绋嬪簭娓呭崟锛氶偖绠变緥绋媉鍙戦€侀樆濉�
  *
- * 这个程序用来测试邮箱发送时候的阻塞情况。
+ * 杩欎釜绋嬪簭鐢ㄦ潵娴嬭瘯閭��鍙戦€佹椂鍊欑殑闃诲�鎯呭喌銆�
  *
  */
 #include <rtthread.h>
 #include "tc_comm.h"
 
-/* 指向线程控制块的指针 */
+/* 鎸囧悜绾跨▼鎺у埗鍧楃殑鎸囬拡 */
 static rt_thread_t tid1 = RT_NULL;
 static rt_thread_t tid2 = RT_NULL;
 
-/* 邮箱控制块 */
+/* 閭��鎺у埗鍧� */
 static struct rt_mailbox mb;
-/* 用于放邮件的内存池 */
+/* 鐢ㄤ簬鏀鹃偖浠剁殑鍐呭瓨姹� */
 static char mb_pool[32];
 
 static char mb_str1[] = "I'm a mail!";
 static char mb_str2[] = "this is another mail!";
 
-/* 线程1入口 */
+/* 绾跨▼1鍏ュ彛 */
 static void thread1_entry(void* parameter)
 {
 	unsigned char* str;
 
 	while (1)
 	{
-		/* 从邮箱中收取邮件 */
+		/* 浠庨偖绠变腑鏀跺彇閭�欢 */
 		if (rt_mb_recv(&mb, (rt_uint32_t*)&str, RT_WAITING_FOREVER) == RT_EOK)
 		{
 			rt_kprintf("thread1: get a mail from mailbox, the content:%s\n", str);
 
-			/* 延时20个OS Tick */
+			/* 寤舵椂20涓狾S Tick */
 			rt_thread_delay(50);
 		}
 	}
 }
 
-/* 线程2入口 */
+/* 绾跨▼2鍏ュ彛 */
 static void thread2_entry(void* parameter)
 {
 	rt_uint8_t count;
@@ -49,16 +49,16 @@ static void thread2_entry(void* parameter)
 		count ++;
 		if (count & 0x1)
 		{
-			/* 发送mb_str1地址到邮箱中 */
+			/* 鍙戦€乵b_str1鍦板潃鍒伴偖绠变腑 */
             str = mb_str1;
 		}
 		else
 		{
-			/* 发送mb_str2地址到邮箱中 */
+			/* 鍙戦€乵b_str2鍦板潃鍒伴偖绠变腑 */
             str = mb_str2;
 		}
 
-        /* 不停的发送邮件,如果满了则等待10个tick,然后超时 */
+        /* 涓嶅仠鐨勫彂閫侀偖浠讹紝濡傛灉婊′簡鍒欑瓑寰�10涓猼ick锛岀劧鍚庤秴鏃� */
         if( rt_mb_send_wait(&mb, (rt_uint32_t)str,10) == RT_EOK )
             rt_kprintf("thread2: sent a mail to mailbox, the content:%s\n", str);
         else
@@ -68,25 +68,25 @@ static void thread2_entry(void* parameter)
 
 int mbox_send_wait_init()
 {
-	/* 初始化一个mailbox */
+	/* 鍒濆�鍖栦竴涓猰ailbox */
 	rt_mb_init(&mb,
-		"mbt",             /* 名称是mbt */
-		&mb_pool[0],       /* 邮箱用到的内存池是mb_pool */
-		sizeof(mb_pool)/4,   /* 大小是mb_pool大小除以4,因为一封邮件的大小是4字节 */
-		RT_IPC_FLAG_FIFO); /* 采用FIFO方式进行线程等待 */
+		"mbt",             /* 鍚嶇О鏄痬bt */
+		&mb_pool[0],       /* 閭��鐢ㄥ埌鐨勫唴瀛樻睜鏄痬b_pool */
+		sizeof(mb_pool)/4,   /* 澶у皬鏄痬b_pool澶у皬闄や互4锛屽洜涓轰竴灏侀偖浠剁殑澶у皬鏄�4瀛楄妭 */
+		RT_IPC_FLAG_FIFO); /* 閲囩敤FIFO鏂瑰紡杩涜�绾跨▼绛夊緟 */
 
-	/* 创建线程1 */
+	/* 鍒涘缓绾跨▼1 */
 	tid1 = rt_thread_create("t1",
-		thread1_entry, RT_NULL, /* 线程入口是thread1_entry, 入口参数是RT_NULL */
+		thread1_entry, RT_NULL, /* 绾跨▼鍏ュ彛鏄痶hread1_entry, 鍏ュ彛鍙傛暟鏄疪T_NULL */
 		THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE);
 	if (tid1 != RT_NULL)
 		rt_thread_startup(tid1);
 	else
 		tc_stat(TC_STAT_END | TC_STAT_FAILED);
 
-	/* 创建线程2 */
+	/* 鍒涘缓绾跨▼2 */
 	tid2 = rt_thread_create("t2",
-		thread2_entry, RT_NULL, /* 线程入口是thread2_entry, 入口参数是RT_NULL */
+		thread2_entry, RT_NULL, /* 绾跨▼鍏ュ彛鏄痶hread2_entry, 鍏ュ彛鍙傛暟鏄疪T_NULL */
 		THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE);
 	if (tid2 != RT_NULL)
 		rt_thread_startup(tid2);
@@ -99,38 +99,38 @@ int mbox_send_wait_init()
 #ifdef RT_USING_TC
 static void _tc_cleanup()
 {
-	/* 调度器上锁,上锁后,将不再切换到其他线程,仅响应中断 */
+	/* 璋冨害鍣ㄤ笂閿侊紝涓婇攣鍚庯紝灏嗕笉鍐嶅垏鎹㈠埌鍏朵粬绾跨▼锛屼粎鍝嶅簲涓�柇 */
 	rt_enter_critical();
 
-	/* 删除线程 */
+	/* 鍒犻櫎绾跨▼ */
 	if (tid1 != RT_NULL && tid1->stat != RT_THREAD_CLOSE)
 		rt_thread_delete(tid1);
 	if (tid2 != RT_NULL && tid2->stat != RT_THREAD_CLOSE)
 		rt_thread_delete(tid2);
 
-	/* 执行邮箱对象脱离 */
+	/* 鎵ц�閭��瀵硅薄鑴辩� */
 	rt_mb_detach(&mb);
 
-	/* 调度器解锁 */
+	/* 璋冨害鍣ㄨВ閿� */
 	rt_exit_critical();
 
-	/* 设置TestCase状态 */
+	/* 璁剧疆TestCase鐘舵€� */
 	tc_done(TC_STAT_PASSED);
 }
 
 int _tc_mbox_send_wait()
 {
-	/* 设置TestCase清理回调函数 */
+	/* 璁剧疆TestCase娓呯悊鍥炶皟鍑芥暟 */
 	tc_cleanup(_tc_cleanup);
 	mbox_send_wait_init();
 
-	/* 返回TestCase运行的最长时间 */
+	/* 杩斿洖TestCase杩愯�鐨勬渶闀挎椂闂� */
 	return 300;
 }
-/* 输出函数命令到finsh shell中 */
+/* 杈撳嚭鍑芥暟鍛戒护鍒癴insh shell涓� */
 FINSH_FUNCTION_EXPORT(_tc_mbox_send_wait, a example of mailbox send wait);
 #else
-/* 用户应用入口 */
+/* 鐢ㄦ埛搴旂敤鍏ュ彛 */
 int rt_application_init()
 {
 	mbox_send_wait_init();