You can chat about native SDK questions and issues here.

User avatar
By Rosend
#57048 Hello my friend, dont give up, its fun when you get it.

i upload my project with the correct makefiles and script to build. its a webserver with relay, temp sensor, and upload to Azure you can ingnore all of this and only use the makefile and the structure of the proyect.



https://www.dropbox.com/s/zrhcsv3adb8l675/app.rar?dl=0
if you dont want then this is my makefile, its in the root folder app

Code: Select all#############################################################
# Required variables for each makefile
# Discard this section from all parent makefiles
# Expected variables (with automatic defaults):
#   CSRCS (all "C" files in the dir)
#   SUBDIRS (all subdirs with a Makefile)
#   GEN_LIBS - list of libs to be generated ()
#   GEN_IMAGES - list of object file images to be generated ()
#   GEN_BINS - list of binaries to be generated ()
#   COMPONENTS_xxx - a list of libs/objs in the form
#     subdir/lib to be extracted and rolled up into
#     a generated lib/image xxx.a ()
#
TARGET = eagle
#FLAVOR = release
FLAVOR = debug

#EXTRA_CCFLAGS += -u

ifndef PDIR # {
GEN_IMAGES= eagle.app.v6.out
GEN_BINS= eagle.app.v6.bin
SPECIAL_MKTARGETS=$(APP_MKTARGETS)
SUBDIRS=    \
   user    \
   driver

endif # } PDIR

APPDIR = .
LDDIR = ../ld

CCFLAGS += -Os

TARGET_LDFLAGS =      \
   -nostdlib      \
   -Wl,-EL \
   --longcalls \
   --text-section-literals

ifeq ($(FLAVOR),debug)
    TARGET_LDFLAGS += -g -O2
endif

ifeq ($(FLAVOR),release)
    TARGET_LDFLAGS += -g -O0
endif

COMPONENTS_eagle.app.v6 = \
   user/libuser.a  \
   driver/libdriver.a

LINKFLAGS_eagle.app.v6 = \
   -L../lib        \
   -nostdlib   \
    -T$(LD_FILE)   \
   -Wl,--no-check-sections   \
    -u call_user_start   \
   -Wl,-static                  \
   -Wl,--start-group               \
   -lc               \
   -lgcc               \
   -lhal               \
   -lphy   \
   -lpp   \
   -lnet80211   \
   -llwip   \
   -lwpa   \
   -lcrypto   \
   -lmain   \
   -ljson   \
   -lupgrade\
   -lssl   \
   -lpwm   \
   -lsmartconfig \
   $(DEP_LIBS_eagle.app.v6)               \
   -Wl,--end-group

DEPENDS_eagle.app.v6 = \
                $(LD_FILE) \
                $(LDDIR)/eagle.rom.addr.v6.ld

#############################################################
# Configuration i.e. compile options etc.
# Target specific stuff (defines etc.) goes in here!
# Generally values applying to a tree are captured in the
#   makefile at its root level - these are then overridden
#   for a subtree within the makefile rooted therein
#

#UNIVERSAL_TARGET_DEFINES =      \

# Other potential configuration flags include:
#   -DTXRX_TXBUF_DEBUG
#   -DTXRX_RXBUF_DEBUG
#   -DWLAN_CONFIG_CCX
CONFIGURATION_DEFINES =   -DICACHE_FLASH

DEFINES +=            \
   $(UNIVERSAL_TARGET_DEFINES)   \
   $(CONFIGURATION_DEFINES)

DDEFINES +=            \
   $(UNIVERSAL_TARGET_DEFINES)   \
   $(CONFIGURATION_DEFINES)


#############################################################
# Recursion Magic - Don't touch this!!
#
# Each subtree potentially has an include directory
#   corresponding to the common APIs applicable to modules
#   rooted at that subtree. Accordingly, the INCLUDE PATH
#   of a module can only contain the include directories up
#   its parent path, and not its siblings
#
# Required for each makefile to inherit from the parent
#

INCLUDES := $(INCLUDES) -I $(PDIR)include
PDIR := ../$(PDIR)
sinclude $(PDIR)Makefile

.PHONY: FORCE
FORCE:




and the script to build its like :

Code: Select all#!/bin/bash

echo "gen_misc.sh version 20150511"
echo ""

echo "Please follow below steps(1-5) to generate specific bin(s):"
echo "STEP 1: choose boot version(0=boot_v1.1, 1=boot_v1.2+, 2=none)"
echo "enter(0/1/2, default 2):"
read input

if [ -z "$input" ]; then
    boot=none
elif [ $input == 0 ]; then
   boot=old
elif [ $input == 1 ]; then
    boot=new
else
    boot=none
fi

echo "boot mode: $boot"
echo ""

echo "STEP 2: choose bin generate(0=eagle.flash.bin+eagle.irom0text.bin, 1=user1.bin, 2=user2.bin)"
echo "enter (0/1/2, default 0):"
read input

if [ -z "$input" ]; then
    if [ $boot != none ]; then
       boot=none
   echo "ignore boot"
    fi
    app=0
    echo "generate bin: eagle.flash.bin+eagle.irom0text.bin"
elif [ $input == 1 ]; then
    if [ $boot == none ]; then
       app=0
   echo "choose no boot before"
   echo "generate bin: eagle.flash.bin+eagle.irom0text.bin"
    else
   app=1
        echo "generate bin: user1.bin"
    fi
elif [ $input == 2 ]; then
    if [ $boot == none ]; then
       app=0
   echo "choose no boot before"
   echo "generate bin: eagle.flash.bin+eagle.irom0text.bin"
    else
       app=2
       echo "generate bin: user2.bin"
    fi
else
    if [ $boot != none ]; then
       boot=none
   echo "ignore boot"
    fi
    app=0
    echo "generate bin: eagle.flash.bin+eagle.irom0text.bin"
fi

echo ""

echo "STEP 3: choose spi speed(0=20MHz, 1=26.7MHz, 2=40MHz, 3=80MHz)"
echo "enter (0/1/2/3, default 2):"
read input

if [ -z "$input" ]; then
    spi_speed=40
elif [ $input == 0 ]; then
    spi_speed=20
elif [ $input == 1 ]; then
    spi_speed=26.7
elif [ $input == 3 ]; then
    spi_speed=80
else
    spi_speed=40
fi

echo "spi speed: $spi_speed MHz"
echo ""

echo "STEP 4: choose spi mode(0=QIO, 1=QOUT, 2=DIO, 3=DOUT)"
echo "enter (0/1/2/3, default 0):"
read input

if [ -z "$input" ]; then
    spi_mode=QIO
elif [ $input == 1 ]; then
    spi_mode=QOUT
elif [ $input == 2 ]; then
    spi_mode=DIO
elif [ $input == 3 ]; then
    spi_mode=DOUT
else
    spi_mode=QIO
fi

echo "spi mode: $spi_mode"
echo ""

echo "STEP 5: choose spi size and map"
echo "    0= 512KB( 256KB+ 256KB)"
echo "    2=1024KB( 512KB+ 512KB)"
echo "    3=2048KB( 512KB+ 512KB)"
echo "    4=4096KB( 512KB+ 512KB)"
echo "    5=2048KB(1024KB+1024KB)"
echo "    6=4096KB(1024KB+1024KB)"
echo "enter (0/2/3/4/5/6, default 0):"
read input

if [ -z "$input" ]; then
    spi_size_map=0
    echo "spi size: 512KB"
    echo "spi ota map:  256KB + 256KB"
elif [ $input == 2 ]; then
    spi_size_map=2
    echo "spi size: 1024KB"
    echo "spi ota map:  512KB + 512KB"
elif [ $input == 3 ]; then
    spi_size_map=3
    echo "spi size: 2048KB"
    echo "spi ota map:  512KB + 512KB"
elif [ $input == 4 ]; then
    spi_size_map=4
    echo "spi size: 4096KB"
    echo "spi ota map:  512KB + 512KB"
elif [ $input == 5 ]; then
    spi_size_map=5
    echo "spi size: 2048KB"
    echo "spi ota map:  1024KB + 1024KB"
elif [ $input == 6 ]; then
    spi_size_map=6
    echo "spi size: 4096KB"
    echo "spi ota map:  1024KB + 1024KB"
else
    spi_size_map=0
    echo "spi size: 512KB"
    echo "spi ota map:  256KB + 256KB"
fi

echo ""

touch user/user_main.c

echo ""
echo "start..."
echo ""

make COMPILE=gcc BOOT=$boot APP=$app SPI_SPEED=$spi_speed SPI_MODE=$spi_mode SPI_SIZE_MAP=$spi_size_map


i use this:

Code: Select all#!/bin/bash

echo "gen_misc.sh version 20150511"
echo ""

echo "done"

touch user/user_main.c

echo ""
echo "start..."
echo ""

make COMPILE=gcc BOOT=new APP=0 SPI_SPEED=26.7 SPI_MODE=1 SPI_SIZE_MAP=6

if you want i can share all the docs and examples in C/c++ that i had
User avatar
By cmarrin
#57799 Welcome to my world!

I posted to this board a few weeks ago lamenting about the lack of a place to ask "native SDK" questions, so they started this "Native SDK" topic.

I get why so many experimenters are gravitating to the higher level systems. They make it easy to get started. My problem with them is that they add an incredible amount of overhead and a tiny part like the ESP8266 just can't afford it.

But remember that ESP8266 is very new, so patience is in order. My project is m8rscript (https://github.com/cmarrin/m8rscript) which is using the native SDK to minimize RAM usage and make the system as efficient as possible. I've made much progress, but still have far to go. My current problem is viewtopic.php?f=159&t=12430, but I'm determined to get past this and all the other problems to get to a working system.

Don't give up, post everything you can so we can all learn, and we'll eventually we'll tame this beast.
User avatar
By efess
#61524
cmarrin wrote:I get why so many experimenters are gravitating to the higher level systems. They make it easy to get started. My problem with them is that they add an incredible amount of overhead and a tiny part like the ESP8266 just can't afford it.


I agree, I too prefer to keep my firmware as lean as possible, and yeah it's hard to find information that's NOT arduino related. I'll try to share my knowledge and answer questions on this forum if I can.
User avatar
By Joaohcca
#61961
SteveBaker wrote:There is no doubt that working with the native SDK is hard.



Googling for information is incredibly difficult because 99% of the hits are from people using the ESP as a serial=>WiFi interface on Arduino...which is very different from what we're trying to do here. The remaining 1% seems to mostly be Lua folks...which makes finding information on native coding exceedingly frustrating!

So is there a better place to ask questions about the native SDK code?


Have you tried bbs.espressif.com? they have a forum and some people who works at Espressif seem to reply there in a relative short time. Is not always a great answer but It could help you out