From 1866ef0c9829083d2ac73b5bd96edc7b4f1262be Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Sat, 11 Apr 2015 10:59:36 +0800 Subject: [PATCH] Move some functions to .irom0.text --- cores/esp8266/i2c.cpp | 14 ++++----- cores/esp8266/libc_replacements.c | 50 +++++++++++++++---------------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/cores/esp8266/i2c.cpp b/cores/esp8266/i2c.cpp index 8f14a350a..e5510add4 100644 --- a/cores/esp8266/i2c.cpp +++ b/cores/esp8266/i2c.cpp @@ -66,13 +66,13 @@ static inline void i2c_wait() { delayMicroseconds(s_i2c_delay); } -void i2c_freq(int freq_hz) { +void ICACHE_FLASH_ATTR i2c_freq(int freq_hz) { s_i2c_delay = 1000000 / freq_hz / 4 - 1; if(s_i2c_delay < 0) s_i2c_delay = 0; } -void i2c_init(int sda_pin, int scl_pin) { +void ICACHE_FLASH_ATTR i2c_init(int sda_pin, int scl_pin) { s_sda_pin = sda_pin; s_scl_pin = scl_pin; pinMode(ESP_PINS_OFFSET + sda_pin, OUTPUT_OPEN_DRAIN); @@ -81,7 +81,7 @@ void i2c_init(int sda_pin, int scl_pin) { i2c_wait(); } -void i2c_release() { +void ICACHE_FLASH_ATTR i2c_release() { pinMode(ESP_PINS_OFFSET + s_sda_pin, INPUT); pinMode(ESP_PINS_OFFSET + s_scl_pin, INPUT); } @@ -151,7 +151,7 @@ void i2c_write(uint8_t val) { i2c_set_sda(1); } -size_t i2c_master_read_from(int address, uint8_t* data, size_t size, bool sendStop) { +size_t ICACHE_FLASH_ATTR i2c_master_read_from(int address, uint8_t* data, size_t size, bool sendStop) { i2c_start(); i2c_write(address << 1 | 1); int ack = i2c_get_ack(); @@ -171,7 +171,7 @@ size_t i2c_master_read_from(int address, uint8_t* data, size_t size, bool sendSt return size; } -size_t i2c_master_write_to(int address, const uint8_t* data, size_t size, bool sendStop) { +size_t ICACHE_FLASH_ATTR i2c_master_write_to(int address, const uint8_t* data, size_t size, bool sendStop) { i2c_start(); i2c_write(address << 1); int ack = i2c_get_ack(); @@ -193,11 +193,11 @@ void twi_init(void) { void twi_setAddress(uint8_t) { } -uint8_t twi_readFrom(uint8_t addr, uint8_t* data, uint8_t size, uint8_t sendStop) { +uint8_t ICACHE_FLASH_ATTR twi_readFrom(uint8_t addr, uint8_t* data, uint8_t size, uint8_t sendStop) { return i2c_master_read_from(addr, data, size, sendStop); } -uint8_t twi_writeTo(uint8_t addr, uint8_t* data, uint8_t size, uint8_t wait, uint8_t sendStop) { +uint8_t ICACHE_FLASH_ATTR twi_writeTo(uint8_t addr, uint8_t* data, uint8_t size, uint8_t wait, uint8_t sendStop) { return i2c_master_write_to(addr, data, size, sendStop); } diff --git a/cores/esp8266/libc_replacements.c b/cores/esp8266/libc_replacements.c index a8dfa5e8d..baeb63fee 100644 --- a/cores/esp8266/libc_replacements.c +++ b/cores/esp8266/libc_replacements.c @@ -111,15 +111,15 @@ int strncmp(const char *s1, const char *s2, size_t len) { return ets_strncmp(s1, s2, len); } -char *strncpy(char * dest, const char * src, size_t n) { +char* strncpy(char * dest, const char * src, size_t n) { return ets_strncpy(dest, src, n); } -char *ets_strstr(const char *haystack, const char *needle) { - return strstr(haystack, needle); +char* strstr(const char *haystack, const char *needle) { + return ets_strstr(haystack, needle); } -char * strchr(const char * str, int character) { +char* strchr(const char * str, int character) { while(1) { if(*str == 0x00) { return NULL; @@ -144,11 +144,11 @@ char * strrchr(const char * str, int character) { } } -char * strcat(char * dest, const char * src) { +char* ICACHE_FLASH_ATTR strcat(char * dest, const char * src) { return strncat(dest, src, strlen(src)); } -char * strncat(char * dest, const char * src, size_t n) { +char* ICACHE_FLASH_ATTR strncat(char * dest, const char * src, size_t n) { uint32_t offset = strlen(dest); for(uint32_t i = 0; i < n; i++) { *(dest + i + offset) = *(src + i); @@ -159,7 +159,7 @@ char * strncat(char * dest, const char * src, size_t n) { return dest; } -char * strtok_r(char * str, const char * delimiters, char ** temp) { +char* ICACHE_FLASH_ATTR strtok_r(char * str, const char * delimiters, char ** temp) { static char * ret = NULL; char * start = NULL; char * end = NULL; @@ -213,7 +213,7 @@ int strcasecmp(const char * str1, const char * str2) { return d; } -char * strdup(const char *str) { +char* ICACHE_FLASH_ATTR strdup(const char *str) { size_t len = strlen(str) + 1; char *cstr = malloc(len); if(cstr) { @@ -441,7 +441,7 @@ int isblank(int c) { static int errno_var = 0; -int * __errno(void) { +int* ICACHE_FLASH_ATTR __errno(void) { os_printf("__errno is called last error: %d (not current)\n", errno_var); return &errno_var; } @@ -450,67 +450,67 @@ int * __errno(void) { // __ieee754 functions // ########################################################################## -double __ieee754_sinh(double x) { +double ICACHE_FLASH_ATTR __ieee754_sinh(double x) { return sinh(x); } -double __ieee754_hypot(double x, double y) { +double ICACHE_FLASH_ATTR __ieee754_hypot(double x, double y) { return hypot(x, y); } -float __ieee754_hypotf(float x, float y) { +float ICACHE_FLASH_ATTR __ieee754_hypotf(float x, float y) { return hypotf(x, y); } -float __ieee754_logf(float x) { +float ICACHE_FLASH_ATTR __ieee754_logf(float x) { return logf(x); } -double __ieee754_log10(double x) { +double ICACHE_FLASH_ATTR __ieee754_log10(double x) { return log10(x); } -double __ieee754_exp(double x) { +double ICACHE_FLASH_ATTR __ieee754_exp(double x) { return exp(x); } -double __ieee754_cosh(double x) { +double ICACHE_FLASH_ATTR __ieee754_cosh(double x) { return cosh(x); } -float __ieee754_expf(float x) { +float ICACHE_FLASH_ATTR __ieee754_expf(float x) { return expf(x); } -float __ieee754_log10f(float x) { +float ICACHE_FLASH_ATTR __ieee754_log10f(float x) { return log10f(x); } -double __ieee754_atan2(double x, double y) { +double ICACHE_FLASH_ATTR __ieee754_atan2(double x, double y) { return atan2(x, y); } -float __ieee754_sqrtf(float x) { +float ICACHE_FLASH_ATTR __ieee754_sqrtf(float x) { return sqrtf(x); } -float __ieee754_sinhf(float x) { +float ICACHE_FLASH_ATTR __ieee754_sinhf(float x) { return sinhf(x); } -double __ieee754_log(double x) { +double ICACHE_FLASH_ATTR __ieee754_log(double x) { return log(x); } -double __ieee754_sqrt(double x) { +double ICACHE_FLASH_ATTR __ieee754_sqrt(double x) { return sqrt(x); } -float __ieee754_coshf(float x) { +float ICACHE_FLASH_ATTR __ieee754_coshf(float x) { return coshf(x); } -float __ieee754_atan2f(float x, float y) { +float ICACHE_FLASH_ATTR __ieee754_atan2f(float x, float y) { return atan2f(x, y); }