|
我就是想往10000端口发一个udp字符串。
出现的问题
1 udp任务可以进去( rt_kprintf("rt_udp_thread_entry entered\n");可以执行),但是udpclient()里面的打印一个也出不来
2 无论我怎么修改udp任务的优先级(比"init"的大或小),总是先调度udp任务(先打印rt_udp_thread_entry entered,后打印TCP/IP initialized!)
请各位高手指教
基本代码
udpclient.c 加了一些打印看执行情况
void udpclient(const char* url, int port, int count)
{
int x;
int sock;
struct hostent *host;
struct sockaddr_in server_addr;
host= (struct hostent *) gethostbyname(url);
if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
{
rt_kprintf("Socket error\n");
return;
}
rt_kprintf("step 1\n");
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port);
server_addr.sin_addr = *((struct in_addr *)host->h_addr);
rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero));
rt_kprintf("step 2\n");
while (count)
{
rt_kprintf("step 3\n");
sendto(sock, send_data, strlen(send_data), 0,
(struct sockaddr *)&server_addr, sizeof(struct sockaddr));
rt_kprintf("UDP transfer %d times\n",x++);
rt_thread_delay(100);
count --;
}
/* close socket */
lwip_close(sock);
}
---------------------------------------------------------------------------------------------
application.c 新建了一个udp任务,就是调用udpclient()函数
extern void udpclient(const char* url, int port, int count);
/* thread phase init */
void rt_init_thread_entry(void *parameter)
{
/* LwIP Initialization */
#ifdef RT_USING_LWIP
{
extern void lwip_sys_init(void);
extern void rt_hw_dm9000_init(void);
eth_system_device_init();
/* register ethernetif device */
rt_hw_dm9000_init();
/* init all device */
rt_device_init_all();
/* init lwip system */
lwip_sys_init();
rt_kprintf("TCP/IP initialized!\n");
}
#endif
}
const char url[] = "192.168.1.128";
void rt_udp_thread_entry(void *parameter)
{
rt_kprintf("rt_udp_thread_entry entered\n");
udpclient(url,10000,1000);
}
int rt_application_init()
{
rt_thread_t init_thread;
rt_thread_t udp_thread;
#if (RT_THREAD_PRIORITY_MAX == 32)
init_thread = rt_thread_create("init",
rt_init_thread_entry, RT_NULL,
2048, 8, 20);
#else
init_thread = rt_thread_create("init",
rt_init_thread_entry, RT_NULL,
2048, 8, 20);
#endif
if (init_thread != RT_NULL) rt_thread_startup(init_thread);
udp_thread = rt_thread_create("udp",
rt_udp_thread_entry, RT_NULL,
2048, 9, 20);
if (udp_thread != RT_NULL) rt_thread_startup(udp_thread);
return 0;
} |
|