ESP8266 stops working when I use 2x static const char(PROGMEM) *Sdk version: 2.2.2-dev(5ab15d1)
*Core Version: 2_6_1

This is the error returned:

Exception 3: LoadStoreError: Processor internal physical address or data error during load or store PC: 0x4000bf64 EXCVADDR: 0x4024e963
Decoding stack results 
0x4020175d: HTML1(String) at C:\Users\b.yuzo\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.1\cores\esp8266/WString.h line 128 
0x40238c26: umm_info(void*, int) at C:\Users\b.yuzo\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.1\cores\esp8266\umm_malloc/umm_info.c line 164 
0x40100278: millis() at C:\Users\b.yuzo\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.1\cores\esp8266\core_esp8266_wiring.cpp line 188 
0x40238c26: umm_info(void*, int) at C:\Users\b.yuzo\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.1\cores\esp8266\umm_malloc/umm_info.c line 164 
0x4020af74: String::copy(char const*, unsigned int) at C:\Users\b.yuzo\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.1\cores\esp8266\WString.cpp line 214 
0x40201a3c: 


Code: 

static const char HTML1[] PROGMEM = R"=====(
&lt;!DOCTYPE HTML&gt;&lt;html&gt;&lt;head&gt;
&lt;meta charset='utf-8' name='viewport' content='width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0'&gt;
)=====";

static const char HTML2[] PROGMEM = R"=====(
&lt;button type='button' onclick='sendData(2)'&gt;Test2&lt;/button&gt;
)=====";

String html_return = HTML1;
html_return += "&lt;button type='button' onclick='sendData(1)'&gt;Test&lt;/button&gt;";
Serial.println("Before Second Const Char");
html_return += HTML2; //&lt;&lt; ESP stops working here
See Guide to PROGMEM on ESP8266 and Arduino IDE. 

Since you put your char array into PROGMEM, special functions must be used to load it from flash into RAM; so to load it into a String object, the FlashHelper class must be used. You can simply use the macro FPSTR(progmem_ptr). 

#include &lt;Arduino.h&gt;

void setup() {
    Serial.begin(115200);
    Serial.println("\nStart firmware");

    static const char HTML1[] PROGMEM = R"=====(
    &lt;!DOCTYPE HTML&gt;&lt;html&gt;&lt;head&gt;
    &lt;meta charset='utf-8' name='viewport' content='width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0'&gt;
    )=====";

    static const char HTML2[] PROGMEM = R"=====(
    &lt;button type='button' onclick='sendData(2)'&gt;Test2&lt;/button&gt;
    )=====";

    String html_return = HTML1;
    html_return += "&lt;button type='button' onclick='sendData(1)'&gt;Test&lt;/button&gt;";
    Serial.println("Before Second Const Char");
    //html_return += HTML2; //crashes
    html_return += FPSTR(HTML2); //works
    Serial.println("Result");
    Serial.println(html_return);
}

void loop() {

}


Outputs

Start firmware
Before Second Const Char
Result

        &lt;!DOCTYPE HTML&gt;&lt;html&gt;&lt;head&gt;
        &lt;meta charset='utf-8' name='viewport' content='width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0'&gt;
        &lt;button type='button' onclick='sendData(1)'&gt;Test&lt;/button&gt;
        &lt;button type='button' onclick='sendData(2)'&gt;Test2&lt;/button&gt;