把两个函数在不同文件下编译,整个工程编译后的大小相差差不多60kB!!!
1.把task_red_led()函数和task_green_led()放在app.c文件中的时候,工程编译结果为:
,code + RO+RW=73kb
2.把task_red_led()函数和task_green_led()放在main.c文件中的时候,工程编译结果为:
, code + RO+RW=13kb
另外,还有一种情况:
当把app.c中红色部分的代码注释掉的时候,编译结果又不一样了。请看下面,
3.把task_red_led()函数和task_green_led()放在app.c文件中的时候,工程编译结果为:
4.把task_red_led()函数和task_green_led()放在main.c文件中的时候,工程编译结果为:
在以上2,3,4的情况下,程序能够运行(板子上的红灯和绿灯闪烁),在1的情况下,则不能运行(灯不闪烁)。
有个疑问就是:
在1情况下,怎么会多出60kb左右的代码?
板子上的芯片为STM32F103RBT6,闪存有128kB,不应该是存储空间不够吧。
还请坛子里的朋友帮帮忙,看看这到底怎么回事啊?这问题真的很是莫名其妙!
main.c文件内容如下:
#include "includes.h"
#include "netbuf.h"
#include "tcpip.h"
#include "init.h"
/******************?è????????????********************/
#define STARTUP_TASK_PRIO 4
/******************?è?????ó??(??????OS_STK)**********************/
#define STARTUP_TASK_STK_SIZE 40
#define RED_LED_TASK_STK_SIZE 40
#define GREEN_LED_TASK_STK_SIZE 40
#define LWIP_ENTRY_TASK_STK_SIZE 80
static OS_STK startup_stk[STARTUP_TASK_STK_SIZE];
static OS_STK red_led_stk[RED_LED_TASK_STK_SIZE];
static OS_STK green_led_stk[GREEN_LED_TASK_STK_SIZE];
static OS_STK lwip_entry_stk[LWIP_ENTRY_TASK_STK_SIZE];
void task_red_led(void *p_arg)
{
(void)p_arg;
while (1)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
OSTimeDlyHMSM(0, 0,0,600);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
OSTimeDlyHMSM(0, 0,0,600);
}
}
void task_green_led(void *p_arg)
{
(void)p_arg;
while (1)
{
GPIO_ResetBits(GPIOD,GPIO_Pin_2);
OSTimeDlyHMSM(0, 0,1,000);
GPIO_SetBits(GPIOD,GPIO_Pin_2);
OSTimeDlyHMSM(0, 0,1,000);
}
}
void Task_Start(void *arg)
{
// OSTaskCreate(LwIPEntry,(void *)NULL,&lwip_entry_stk[LWIP_ENTRY_TASK_STK_SIZE - 1],STARTUP_TASK_PRIO + 1);
OSTaskCreate(task_green_led ,(void *)NULL,&green_led_stk[GREEN_LED_TASK_STK_SIZE - 1],STARTUP_TASK_PRIO + 2);
OSTaskCreate(task_red_led ,(void *)NULL,&red_led_stk[RED_LED_TASK_STK_SIZE - 1],STARTUP_TASK_PRIO + 3);
OSTaskDel(OS_PRIO_SELF);
}
int main(void)
{
BSP_Init();
OSInit();
OSTaskCreate(Task_Start,
(void *)0,
&startup_stk[STARTUP_TASK_STK_SIZE - 1],
STARTUP_TASK_PRIO);
OSStart();
return 0;
}
app.c文件内容如下:
#include "includes.h"
#include "netbuf.h"
#include "tcpip.h"
#include "init.h"
#if 1
void SetLwIP(void)
{
extern err_t ethernetif_init(struct netif *netif);
struct ip_addr IpAddr, NetMask, Gateway;
static struct netif EMACNetif;
netif_init();
IP4_ADDR(&IpAddr, 192, 168, 1, 16);
IP4_ADDR(&NetMask, 192, 168, 1, 1);
IP4_ADDR(&Gateway, 255, 255, 255, 0);
netif_add(&EMACNetif, &IpAddr, &NetMask, &Gateway, NULL, ethernetif_init, tcpip_input);
netif_set_default(&EMACNetif);
netif_set_up(&EMACNetif);
}
void LwIPEntry(void * pvArg)
{
struct netconn *Conn, *NewConn;
struct netbuf *Netbuf;
lwip_init();
tcpip_init(NULL , NULL);
SetLwIP();
Conn = netconn_new(NETCONN_TCP);
netconn_bind( Conn, NULL, 80);
netconn_listen( Conn);
while(TRUE)
{
netconn_accept( Conn,&NewConn);
if( NewConn != NULL)
{
netconn_recv( NewConn,&Netbuf);
if( Netbuf != NULL)
{
netconn_write( NewConn, "HTTP/1.1 200 OK\r\nContent-type: text/html\r\n\r\n", 44, NETCONN_COPY);
netconn_write( NewConn, "<body><h1>????LWIP TCP??????</h1></body>", 40, NETCONN_COPY);
netbuf_delete( Netbuf);
}
netconn_close( NewConn);
while(netconn_delete( NewConn) != ERR_OK)
OSTimeDlyHMSM(0, 0, 1, 0);
}
}
}
#endif
|