NEW VERSION: 1.0.4

1. memory optimize;
2. add irom version libm.a: libmirom.a;
3. more apis are supported in libcirom.a, such as sscanf, sprintf, etc;
4. add c++ support in Makefile;
5. put functions to iRAM default, don't need ICACHE_FLASH_ATTR anymore;
6. remove -O2 in Makefile;
7. fix some fatal exception bugs;
8. update smartconfig to version 2.4.7;
9. update some open source files and header files;
10.use os_printf can save memory;
11.add new apis: os_random and os_get_random;
12.bug fix in lwip/net80211/wpa modules;
13.other minor changes;
This commit is contained in:
Espressif Systems
2015-07-31 21:07:07 +08:00
parent 76a22b42c6
commit a6d4f57172
38 changed files with 99 additions and 46 deletions

View File

@ -8,7 +8,7 @@ ifeq ($(COMPILE), gcc)
AR = xtensa-lx106-elf-ar
CC = xtensa-lx106-elf-gcc
NM = xtensa-lx106-elf-nm
CPP = xtensa-lx106-elf-cpp
CPP = xtensa-lx106-elf-g++
OBJCOPY = xtensa-lx106-elf-objcopy
OBJDUMP = xtensa-lx106-elf-objdump
else
@ -162,6 +162,7 @@ else
endif
CSRCS ?= $(wildcard *.c)
CPPSRCS ?= $(wildcard *.cpp)
ASRCs ?= $(wildcard *.s)
ASRCS ?= $(wildcard *.S)
SUBDIRS ?= $(patsubst %/,%,$(dir $(wildcard */Makefile)))
@ -170,10 +171,12 @@ ODIR := .output
OBJODIR := $(ODIR)/$(TARGET)/$(FLAVOR)/obj
OBJS := $(CSRCS:%.c=$(OBJODIR)/%.o) \
$(CPPSRCS:%.cpp=$(OBJODIR)/%.o) \
$(ASRCs:%.s=$(OBJODIR)/%.o) \
$(ASRCS:%.S=$(OBJODIR)/%.o)
DEPS := $(CSRCS:%.c=$(OBJODIR)/%.d) \
$(CPPSRCS:%.cpp=$(OBJODIR)/%.d) \
$(ASRCs:%.s=$(OBJODIR)/%.d) \
$(ASRCS:%.S=$(OBJODIR)/%.d)
@ -188,7 +191,6 @@ OBINS := $(GEN_BINS:%=$(BINODIR)/%)
CCFLAGS += \
-g \
-O2 \
-Wpointer-arith \
-Wundef \
-Werror \
@ -196,7 +198,9 @@ CCFLAGS += \
-fno-inline-functions \
-nostdlib \
-mlongcalls \
-mtext-section-literals
-mtext-section-literals \
-ffunction-sections \
-fdata-sections
# -Wall
CFLAGS = $(CCFLAGS) $(DEFINES) $(EXTRA_CCFLAGS) $(INCLUDES)
@ -328,6 +332,18 @@ $(OBJODIR)/%.d: %.c
sed 's,\($*\.o\)[ :]*,$(OBJODIR)/\1 $@ : ,g' < $@.$$$$ > $@; \
rm -f $@.$$$$
$(OBJODIR)/%.o: %.cpp
@mkdir -p $(OBJODIR);
$(CPP) $(if $(findstring $<,$(DSRCS)),$(DFLAGS),$(CFLAGS)) $(COPTS_$(*F)) -o $@ -c $<
$(OBJODIR)/%.d: %.cpp
@mkdir -p $(OBJODIR);
@echo DEPEND: $(CPP) -M $(CFLAGS) $<
@set -e; rm -f $@; \
$(CPP) -M $(CFLAGS) $< > $@.$$$$; \
sed 's,\($*\.o\)[ :]*,$(OBJODIR)/\1 $@ : ,g' < $@.$$$$ > $@; \
rm -f $@.$$$$
$(OBJODIR)/%.o: %.s
@mkdir -p $(OBJODIR);
$(CC) $(CFLAGS) -o $@ -c $<

View File

@ -50,6 +50,7 @@ COMPONENTS_eagle.app.v6 = \
LINKFLAGS_eagle.app.v6 = \
-L../lib \
-Wl,--gc-sections \
-nostdlib \
-T$(LD_FILE) \
-Wl,--no-check-sections \

View File

@ -148,8 +148,7 @@ void task3(void *pvParameters)
* Parameters : none
* Returns : none
*******************************************************************************/
void ICACHE_FLASH_ATTR
user_init(void)
void user_init(void)
{
printf("SDK version:%s\n", system_get_sdk_version());

View File

@ -20,8 +20,6 @@
#define server_ip "192.168.101.142"
#define server_port 9669
sc_type SC_Type = 0;
void ICACHE_FLASH_ATTR
smartconfig_done(sc_status status, void *pdata)
{
@ -34,6 +32,12 @@ smartconfig_done(sc_status status, void *pdata)
break;
case SC_STATUS_GETTING_SSID_PSWD:
printf("SC_STATUS_GETTING_SSID_PSWD\n");
sc_type *type = pdata;
if (*type == SC_TYPE_ESPTOUCH) {
printf("SC_TYPE:SC_TYPE_ESPTOUCH\n");
} else {
printf("SC_TYPE:SC_TYPE_AIRKISS\n");
}
break;
case SC_STATUS_LINK:
printf("SC_STATUS_LINK\n");
@ -45,7 +49,7 @@ smartconfig_done(sc_status status, void *pdata)
break;
case SC_STATUS_LINK_OVER:
printf("SC_STATUS_LINK_OVER\n");
if (SC_Type == SC_TYPE_ESPTOUCH) {
if (pdata != NULL) {
uint8 phone_ip[4] = {0};
memcpy(phone_ip, (uint8*)pdata, 4);
@ -60,9 +64,7 @@ smartconfig_done(sc_status status, void *pdata)
void ICACHE_FLASH_ATTR
smartconfig_task(void *pvParameters)
{
SC_Type = SC_TYPE_ESPTOUCH;
smartconfig_start(SC_Type, smartconfig_done);//SC_TYPE_AIRKISS
smartconfig_start(smartconfig_done);
vTaskDelete(NULL);
}

View File

@ -72,12 +72,12 @@ typedef enum {
#define DMEM_ATTR __attribute__((section(".bss")))
#define SHMEM_ATTR
#ifdef ICACHE_FLASH
#define ICACHE_FLASH_ATTR __attribute__((section(".irom0.text")))
#define ICACHE_RODATA_ATTR __attribute__((section(".irom.text")))
#else
#define IRAM_ATTR __attribute__((section(".text")))
#define ICACHE_FLASH_ATTR
#endif /* ICACHE_FLASH */
#define ICACHE_RODATA_ATTR __attribute__((section(".irom.text")))
#define STORE_ATTR __attribute__((aligned(4)))
#ifndef __cplusplus
typedef unsigned char bool;

View File

@ -36,7 +36,6 @@ int printf(const char *format, ...);
int sprintf(char *out, const char *format, ...);
int snprintf(char *buf, unsigned int count, const char *format, ...);
int puts(const char *str);
int putchar(int c);
void *malloc(size_t n);
void free(void *p);
@ -47,16 +46,13 @@ void *realloc(void *p, size_t n);
int atoi(const char *s);
long atol(const char *s);
unsigned long os_random(void);
int os_get_random(unsigned char *buf, size_t len);
/* NOTE: don't use printf_opt in irq handler, for test */
#define printf_opt(fmt, ...) do { \
static const char flash_str[] ICACHE_RODATA_ATTR = fmt; \
#define os_printf(fmt, ...) do { \
static const char flash_str[] ICACHE_RODATA_ATTR STORE_ATTR = fmt; \
printf(flash_str, ##__VA_ARGS__); \
} while(0)
/* NOTE: don't use printf_opt in irq handler, for test */
#define sprintf_opt(out, fmt, ...) do { \
static const char flash_str[] ICACHE_RODATA_ATTR = fmt; \
sprintf(out, flash_str, ##__VA_ARGS__); \
} while(0)
#endif /* __LIBC_H__ */

View File

@ -22,7 +22,7 @@ typedef enum {
typedef void (*sc_callback_t)(sc_status status, void *pdata);
const char *smartconfig_get_version(void);
bool smartconfig_start(sc_type type, sc_callback_t cb, ...);
bool smartconfig_start(sc_callback_t cb, ...);
bool smartconfig_stop(void);
bool esptouch_set_timeout(uint8 time_s);//15s~255s, offset:45s

View File

@ -83,7 +83,7 @@
#define configCPU_CLOCK_HZ ( ( unsigned long ) 80000000 )
#define configTICK_RATE_HZ ( ( portTickType ) 100 )
#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 15 )
#define configMINIMAL_STACK_SIZE ( ( unsigned short )156 )
#define configMINIMAL_STACK_SIZE ( ( unsigned short )176 )
//#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 17 * 1024 ) )
#define configMAX_TASK_NAME_LEN ( 16 )
#define configUSE_TRACE_FACILITY 0

View File

@ -73,6 +73,13 @@ typedef int sys_prot_t;
//#define LWIP_DEBUG
#ifdef LWIP_DEBUG
#include <stdio.h>
#define os_printf(fmt, ...) do { \
static const char flash_str[] ICACHE_RODATA_ATTR STORE_ATTR = fmt; \
printf(flash_str, ##__VA_ARGS__); \
} while(0)
#define LWIP_PLATFORM_DIAG(x) do {os_printf x;} while(0)
#define LWIP_PLATFORM_ASSERT(x) do {os_printf(x); sys_arch_assert(__FILE__, __LINE__);} while(0)
#else

View File

@ -206,6 +206,18 @@ void dhcp_fine_tmr(void);
#define DHCP_OPTION_TCP_TTL 37
#define DHCP_OPTION_END 255
/**add options for support more router by liuHan**/
#ifdef LWIP_ESP8266
#define DHCP_OPTION_DOMAIN_NAME 15
#define DHCP_OPTION_PRD 31
#define DHCP_OPTION_STATIC_ROUTER 33
#define DHCP_OPTION_VSN 43
#define DHCP_OPTION_NB_TINS 44
#define DHCP_OPTION_NB_TINT 46
#define DHCP_OPTION_NB_TIS 47
#define DHCP_OPTION_CLASSLESS_STATIC_ROUTER 121
#endif
/** DHCP options */
#define DHCP_OPTION_REQUESTED_IP 50 /* RFC 2132 9.1, requested IP address */
#define DHCP_OPTION_LEASE_TIME 51 /* RFC 2132 9.2, time in seconds, in 4 bytes */

View File

@ -76,7 +76,7 @@ typedef enum {
#endif /* MEM_USE_POOLS */
#if MEMP_MEM_MALLOC || MEM_USE_POOLS
extern const u16_t memp_sizes[MEMP_MAX];
extern const u32_t memp_sizes[MEMP_MAX];
#endif /* MEMP_MEM_MALLOC || MEM_USE_POOLS */
#if MEMP_MEM_MALLOC

View File

@ -250,6 +250,13 @@
---------- Network Interfaces options ----------
------------------------------------------------
*/
/**
* LWIP_NETIF_HOSTNAME==1: use DHCP_OPTION_HOSTNAME with netif's hostname
* field.
*/
#define LWIP_NETIF_HOSTNAME 1
/**
* LWIP_NETIF_TX_SINGLE_PBUF: if this is set to 1, lwIP tries to put all data
* to be sent into one single pbuf. This is for compatibility with DMA-enabled
@ -336,7 +343,7 @@
* LWIP_TCPIP_CORE_LOCKING: (EXPERIMENTAL!)
* Don't use it if you're not an active lwIP project member
*/
#define LWIP_TCPIP_CORE_LOCKING 1
#define LWIP_TCPIP_CORE_LOCKING 0
/*
------------------------------------

View File

@ -188,7 +188,7 @@ SECTIONS
*(.entry.text)
*(.init.literal)
*(.init)
*(.literal .text .literal.* .text.* .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
*(.literal .text .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
*(.fini.literal)
*(.fini)
*(.gnu.version)
@ -209,6 +209,7 @@ SECTIONS
{
_irom0_text_start = ABSOLUTE(.);
*(.irom0.literal .irom.literal .irom.text.literal .irom0.text .irom.text)
*(.literal.* .text.*)
_irom0_text_end = ABSOLUTE(.);
} >irom0_0_seg :irom0_0_phdr
}

View File

@ -188,7 +188,7 @@ SECTIONS
*(.entry.text)
*(.init.literal)
*(.init)
*(.literal .text .literal.* .text.* .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
*(.literal .text .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
*(.fini.literal)
*(.fini)
*(.gnu.version)
@ -209,6 +209,7 @@ SECTIONS
{
_irom0_text_start = ABSOLUTE(.);
*(.irom0.literal .irom.literal .irom.text.literal .irom0.text .irom.text)
*(.literal.* .text.*)
_irom0_text_end = ABSOLUTE(.);
} >irom0_0_seg :irom0_0_phdr
}

View File

@ -188,7 +188,7 @@ SECTIONS
*(.entry.text)
*(.init.literal)
*(.init)
*(.literal .text .literal.* .text.* .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
*(.literal .text .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
*(.fini.literal)
*(.fini)
*(.gnu.version)
@ -209,6 +209,7 @@ SECTIONS
{
_irom0_text_start = ABSOLUTE(.);
*(.irom0.literal .irom.literal .irom.text.literal .irom0.text .irom.text)
*(.literal.* .text.*)
_irom0_text_end = ABSOLUTE(.);
} >irom0_0_seg :irom0_0_phdr
}

View File

@ -188,7 +188,7 @@ SECTIONS
*(.entry.text)
*(.init.literal)
*(.init)
*(.literal .text .literal.* .text.* .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
*(.literal .text .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
*(.fini.literal)
*(.fini)
*(.gnu.version)
@ -209,6 +209,7 @@ SECTIONS
{
_irom0_text_start = ABSOLUTE(.);
*(.irom0.literal .irom.literal .irom.text.literal .irom0.text .irom.text)
*(.literal.* .text.*)
_irom0_text_end = ABSOLUTE(.);
} >irom0_0_seg :irom0_0_phdr
}

View File

@ -188,7 +188,7 @@ SECTIONS
*(.entry.text)
*(.init.literal)
*(.init)
*(.literal .text .literal.* .text.* .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
*(.literal .text .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
*(.fini.literal)
*(.fini)
*(.gnu.version)
@ -209,6 +209,7 @@ SECTIONS
{
_irom0_text_start = ABSOLUTE(.);
*(.irom0.literal .irom.literal .irom.text.literal .irom0.text .irom.text)
*(.literal.* .text.*)
_irom0_text_end = ABSOLUTE(.);
} >irom0_0_seg :irom0_0_phdr
}

View File

@ -188,7 +188,7 @@ SECTIONS
*(.entry.text)
*(.init.literal)
*(.init)
*(.literal .text .literal.* .text.* .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
*(.literal .text .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
*(.fini.literal)
*(.fini)
*(.gnu.version)
@ -209,6 +209,7 @@ SECTIONS
{
_irom0_text_start = ABSOLUTE(.);
*(.irom0.literal .irom.literal .irom.text.literal .irom0.text .irom.text)
*(.literal.* .text.*)
_irom0_text_end = ABSOLUTE(.);
} >irom0_0_seg :irom0_0_phdr
}

View File

@ -188,7 +188,7 @@ SECTIONS
*(.entry.text)
*(.init.literal)
*(.init)
*(.literal .text .literal.* .text.* .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
*(.literal .text .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
*(.fini.literal)
*(.fini)
*(.gnu.version)
@ -209,6 +209,7 @@ SECTIONS
{
_irom0_text_start = ABSOLUTE(.);
*(.irom0.literal .irom.literal .irom.text.literal .irom0.text .irom.text)
*(.literal.* .text.*)
_irom0_text_end = ABSOLUTE(.);
} >irom0_0_seg :irom0_0_phdr
}

View File

@ -188,7 +188,7 @@ SECTIONS
*(.entry.text)
*(.init.literal)
*(.init)
*(.literal .text .literal.* .text.* .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
*(.literal .text .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
*(.fini.literal)
*(.fini)
*(.gnu.version)
@ -209,6 +209,7 @@ SECTIONS
{
_irom0_text_start = ABSOLUTE(.);
*(.irom0.literal .irom.literal .irom.text.literal .irom0.text .irom.text)
*(.literal.* .text.*)
_irom0_text_end = ABSOLUTE(.);
} >irom0_0_seg :irom0_0_phdr
}

View File

@ -188,7 +188,7 @@ SECTIONS
*(.entry.text)
*(.init.literal)
*(.init)
*(.literal .text .literal.* .text.* .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
*(.literal .text .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
*(.fini.literal)
*(.fini)
*(.gnu.version)
@ -209,6 +209,7 @@ SECTIONS
{
_irom0_text_start = ABSOLUTE(.);
*(.irom0.literal .irom.literal .irom.text.literal .irom0.text .irom.text)
*(.literal.* .text.*)
_irom0_text_end = ABSOLUTE(.);
} >irom0_0_seg :irom0_0_phdr
}

View File

@ -188,7 +188,7 @@ SECTIONS
*(.entry.text)
*(.init.literal)
*(.init)
*(.literal .text .literal.* .text.* .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
*(.literal .text .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
*(.fini.literal)
*(.fini)
*(.gnu.version)
@ -209,6 +209,7 @@ SECTIONS
{
_irom0_text_start = ABSOLUTE(.);
*(.irom0.literal .irom.literal .irom.text.literal .irom0.text .irom.text)
*(.literal.* .text.*)
_irom0_text_end = ABSOLUTE(.);
} >irom0_0_seg :irom0_0_phdr
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
lib/libmirom.a Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -320,7 +320,7 @@ PortDisableInt_NoNest( void )
void
PortEnableInt_NoNest( void )
{
printf("ERRRRR\n");
// printf("ERRRRR\n");
if(NMIIrqIsOn == 0)
{
@ -335,6 +335,7 @@ PortEnableInt_NoNest( void )
/*-----------------------------------------------------------*/
_xt_isr_entry isr[16];
char _xt_isr_status = 0;
void ICACHE_FLASH_ATTR
_xt_isr_attach(uint8 i, _xt_isr func, void *arg)
@ -364,7 +365,9 @@ uint16 _xt_isr_handler(uint16 i)
_xt_clear_ints(1<<index);
_xt_isr_status = 1;
isr[index].handler(isr[index].arg);
_xt_isr_status = 0;
return i & ~(1 << index);
}

View File

@ -1350,7 +1350,7 @@ unsigned portBASE_TYPE uxReturn;
} /*lint !e818 Pointer cannot be declared const as xQueue is a typedef not pointer. */
/*-----------------------------------------------------------*/
unsigned portBASE_TYPE ICACHE_FLASH_ATTR
unsigned portBASE_TYPE
uxQueueMessagesWaitingFromISR( const xQueueHandle xQueue )
{
unsigned portBASE_TYPE uxReturn;
@ -1822,7 +1822,7 @@ PortEnableInt_NoNest();
#if ( configUSE_CO_ROUTINES == 1 )
signed portBASE_TYPE
signed portBASE_TYPE ICACHE_FLASH_ATTR
xQueueCRSendFromISR( xQueueHandle xQueue, const void *pvItemToQueue, signed portBASE_TYPE xCoRoutinePreviouslyWoken )
{
xQUEUE * const pxQueue = ( xQUEUE * ) xQueue;
@ -1855,7 +1855,7 @@ PortEnableInt_NoNest();
#if ( configUSE_CO_ROUTINES == 1 )
signed portBASE_TYPE
signed portBASE_TYPE ICACHE_FLASH_ATTR
xQueueCRReceiveFromISR( xQueueHandle xQueue, void *pvBuffer, signed portBASE_TYPE *pxCoRoutineWoken )
{
signed portBASE_TYPE xReturn;
@ -2081,7 +2081,7 @@ PortEnableInt_NoNest();
#if ( configUSE_QUEUE_SETS == 1 )
xQueueSetMemberHandle
xQueueSetMemberHandle ICACHE_FLASH_ATTR
xQueueSelectFromSetFromISR( xQueueSetHandle xQueueSet )
{
xQueueSetMemberHandle xReturn = NULL;

View File

@ -217,7 +217,7 @@ void ICACHE_FLASH_ATTR get_random_NZ(int num_rand_bytes, uint8_t *rand_data)
for (i = 0; i < num_rand_bytes; i++)
{
while (rand_data[i] == 0) /* can't be 0 */
rand_data[i] = (uint8_t)(rand());
rand_data[i] = (uint8_t)(os_random());
}
}