这是否是 avr-gcc 11.1.0(来自 Zak Kemble)中可能存在的编译器错误?

发布于 01-13 21:56 字数 27601 浏览 4 评论 0原文

这是一个复杂的问题,我不确定其原因。

对我来说如此裸露是因为,我的英语(写作)很生疏,而且我的技术语言(术语)也不是很好。

开发者:Atmega1284P 编译器:AVR-GCC 11.1.0,来自 Zak 的电子博客

我使用的所有库我用的是我写的。它们都按预期工作,包括我的 UART 和它的“姐妹”UART 调试器。 下面是其中的一部分,以便更好地理解其他代码段:

void USART0_TX_Flash_String(const unsigned char* text)
{
    while(pgm_read_byte(text)>0)
    {
        USART0_TXD(pgm_read_byte(text++));
    }
}

#define DEBUGGER_UART_TXFS(string)          USART0_TX_Flash_String(string)

void Print_Value_General(unsigned char* string, unsigned int value, unsigned char mode)
{
    unsigned char StringA[8] = {};
    DEBUGGER_UART_TX_String(string);
    DEBUGGER_UART_TXD(tab_txt);
    Convert_Value(value, mode, StringA);        // basicly itoa()
    DEBUGGER_UART_TX_String(StringA);
    DEBUGGER_UART_TX_String(enter_txt);
}

#define Print_Value_DEC(string, value)      Print_Value_General(string, value, 10)

下一段只是 ESP8266 库的一小部分,即变量:

// ESP8266 Messages
const unsigned char flash_str_msg_report_wait_for_data[] PROGMEM = ">";

//  Basic AT Commands
const unsigned char flash_str_at[] PROGMEM = "AT";

// Software Access Point Settings
// TCP/IP AT Commands
const unsigned char flash_str_cipclose[] PROGMEM = "CIPCLOSE";
const unsigned char flash_str_cifsr[] PROGMEM = "CIFSR";
const unsigned char flash_str_cipdns[] PROGMEM = "CIPDNS";


typedef struct td_esp8266_cmd_ptr
{
    unsigned char* cmd_ptr;
    void(*fp)(unsigned char array[]);
}td_esp8266_cmd_ptr;

void UnDefinedEmptyFoo(unsigned char string[])
{
    DEBUGGER_UART_TX_String("void UnDefinedEmptyFoo(void) is Callled\r\n");
}


td_esp8266_cmd_ptr esp8266_cmd_ptr[6] = {
    {
        flash_str_msg_report_wait_for_data,     //  [] PROGMEM = ">";
        UnDefinedEmptyFoo,
    },
    {   
        flash_str_at,                           //  [] PROGMEM = "AT";
        UnDefinedEmptyFoo,
    },
    {
        flash_str_msg_report_busy,              //  [] PROGMEM = "busy p...";
        UnDefinedEmptyFoo,
    },
    {
        flash_str_cifsr,                        //  [] PROGMEM = "CIFSR";
        UnDefinedEmptyFoo,
    },
    {
        flash_str_cipclose,                     //  [] PROGMEM = "CIPCLOSE";
        UnDefinedEmptyFoo,
    },
    {
        flash_str_cipdns,                       //  [] PROGMEM = "CIPDNS";
        UnDefinedEmptyFoo,
    }
};
const td_esp8266_cmd_ptr esp8266_cmd_flash_ptr[6] PROGMEM = {
    {
        flash_str_msg_report_wait_for_data,     //  [] PROGMEM = ">";
        UnDefinedEmptyFoo,
    },
    {   
        flash_str_at,                           //  [] PROGMEM = "AT";
        UnDefinedEmptyFoo,
    },
    {
        flash_str_msg_report_busy,              //  [] PROGMEM = "busy p...";
        UnDefinedEmptyFoo,
    },
    {
        flash_str_cifsr,                        //  [] PROGMEM = "CIFSR";
        UnDefinedEmptyFoo,
    },
    {
        flash_str_cipclose,                     //  [] PROGMEM = "CIPCLOSE";
        UnDefinedEmptyFoo,
    },
    {
        flash_str_cipdns,                       //  [] PROGMEM = "CIPDNS";
        UnDefinedEmptyFoo,
    }
};

在这里您可以看到两个几乎相同的结构数组,还是数组结构? 为了清楚起见,我引用的是:

td_esp8266_cmd_ptr esp8266_cmd_ptr[6] = {};
const td_esp8266_cmd_ptr esp8266_cmd_flash_ptr[6] PROGMEM = {};

第一个存储在 RAM 中,第二个存储在闪存中。 问题出在第二个。

这是示例代码,看看问题从哪里开始:

void MXA_Test(void)
{
    DEBUGGER_UART_TX_String("void MXA_Test(void) Start");
    DEBUGGER_UART_TX_String(enter_txt);
    DEBUGGER_UART_TX_String("For Loop Start for(u8b i = 0; i < 6; i++)");
    DEBUGGER_UART_TX_String(enter_txt);
    for(u8b i = 0; i < 6; i++)
    {
        Print_Value_DEC("esp8266_cmd_ptr[i].cmd_ptr:    ", i);
        DEBUGGER_UART_TXFS(esp8266_cmd_ptr[i].cmd_ptr);
        DEBUGGER_UART_TX_String(enter_txt); 
    }
    DEBUGGER_UART_TX_String("For Loop End");
    DEBUGGER_UART_TX_String(enter_txt);
    
    u8b var_name_str_start[] = {"\r\nesp8266_cmd_flash_ptr["};
    u8b var_name_str_end[] = {"]:   "};
    
    DEBUGGER_UART_TX_String("Usig esp8266_cmd_flash_ptr (stored in FLASH):");
    DEBUGGER_UART_TX_String(enter_txt);
    DEBUGGER_UART_TX_String("Geting Var directly:   esp8266_cmd_flash_ptr[0].cmd_ptr");
    DEBUGGER_UART_TX_String(enter_txt);
    
    DEBUGGER_UART_TX_String(var_name_str_start);
    DEBUGGER_UART_TXD(0x30);
    DEBUGGER_UART_TX_String(var_name_str_end);
    DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[0].cmd_ptr);
    
    DEBUGGER_UART_TX_String(var_name_str_start);
    DEBUGGER_UART_TXD(0x31);
    DEBUGGER_UART_TX_String(var_name_str_end);
    DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[1].cmd_ptr);
    
    DEBUGGER_UART_TX_String(var_name_str_start);
    DEBUGGER_UART_TXD(0x32);
    DEBUGGER_UART_TX_String(var_name_str_end);
    DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[2].cmd_ptr);
    
    DEBUGGER_UART_TX_String(var_name_str_start);
    DEBUGGER_UART_TXD(0x33);
    DEBUGGER_UART_TX_String(var_name_str_end);
    DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[3].cmd_ptr);

    DEBUGGER_UART_TX_String(var_name_str_start);
    DEBUGGER_UART_TXD(0x34);
    DEBUGGER_UART_TX_String(var_name_str_end);
    DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[4].cmd_ptr);
    
    DEBUGGER_UART_TX_String(var_name_str_start);
    DEBUGGER_UART_TXD(0x35);
    DEBUGGER_UART_TX_String(var_name_str_end);
    DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[5].cmd_ptr);
    
    DEBUGGER_UART_TX_String(enter_txt);
    DEBUGGER_UART_TX_String("Geting Var INdirectly: esp8266_cmd_flash_ptr[i].cmd_ptr");
    DEBUGGER_UART_TX_String(enter_txt);
    u8b i = 0;
    DEBUGGER_UART_TX_String(var_name_str_start);
    DEBUGGER_UART_TXD(i+0x30);
    DEBUGGER_UART_TX_String(var_name_str_end);
    DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
    i++;
    DEBUGGER_UART_TX_String(var_name_str_start);
    DEBUGGER_UART_TXD(i+0x30);
    DEBUGGER_UART_TX_String(var_name_str_end);
    DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
    i++;
    DEBUGGER_UART_TX_String(var_name_str_start);
    DEBUGGER_UART_TXD(i+0x30);
    DEBUGGER_UART_TX_String(var_name_str_end);
    DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
    i++;
    DEBUGGER_UART_TX_String(var_name_str_start);
    DEBUGGER_UART_TXD(i+0x30);
    DEBUGGER_UART_TX_String(var_name_str_end);
    DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
    i++;
    DEBUGGER_UART_TX_String(var_name_str_start);
    DEBUGGER_UART_TXD(i+0x30);
    DEBUGGER_UART_TX_String(var_name_str_end);
    DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
    i++;
    DEBUGGER_UART_TX_String(var_name_str_start);
    DEBUGGER_UART_TXD(i+0x30);
    DEBUGGER_UART_TX_String(var_name_str_end);
    DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
    i++;
    
    DEBUGGER_UART_TX_String(enter_txt);
    DEBUGGER_UART_TX_String("For Loop Start for(u8b i = 0; i < 3; i++)");
    DEBUGGER_UART_TX_String(enter_txt);
    for(i = 0; i < 3; i++)
    {
        Print_Value_DEC("esp8266_cmd_flash_ptr[i].cmd_ptr:  ", i);
        DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
        DEBUGGER_UART_TX_String(enter_txt); 
    }
    DEBUGGER_UART_TX_String("For Loop End");
    DEBUGGER_UART_TX_String(enter_txt);
    
    DEBUGGER_UART_TX_String("For Loop Start for(u8b i = 0; i < 6; i++)");
    DEBUGGER_UART_TX_String(enter_txt);
    for(i = 0; i < 6; i++)
    {
        Print_Value_DEC("esp8266_cmd_flash_ptr[i].cmd_ptr:  ", i);
        DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
        DEBUGGER_UART_TX_String(enter_txt); 
    }
    DEBUGGER_UART_TX_String("For Loop End");
    DEBUGGER_UART_TX_String(enter_txt);
    
    DEBUGGER_UART_TX_String("do while Loop End");
    DEBUGGER_UART_TX_String(enter_txt);
    
    i = 0;
    DEBUGGER_UART_TX_String("Loop Start while(i < 3)");
    DEBUGGER_UART_TX_String(enter_txt);
    while(i < 3)
    {
        Print_Value_DEC("esp8266_cmd_flash_ptr[i].cmd_ptr:  ", i);
        DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
        DEBUGGER_UART_TX_String(enter_txt); 
        i++;
    }
    DEBUGGER_UART_TX_String("while Loop End");
    DEBUGGER_UART_TX_String(enter_txt);
    
    DEBUGGER_UART_TX_String("void MXA_Test(void) End");
    DEBUGGER_UART_TX_String(enter_txt);
}

这是通过 UART 的输出:

void MXA_Test(void) Start
For Loop Start for(u8b i = 0; i < 6; i++)
esp8266_cmd_ptr[i].cmd_ptr:     00
>
esp8266_cmd_ptr[i].cmd_ptr:     01
AT
esp8266_cmd_ptr[i].cmd_ptr:     02
busy p...
esp8266_cmd_ptr[i].cmd_ptr:     03
CIFSR
esp8266_cmd_ptr[i].cmd_ptr:     04
CIPCLOSE
esp8266_cmd_ptr[i].cmd_ptr:     05
CIPDNS
For Loop End
Usig esp8266_cmd_flash_ptr (stored in FLASH):
Geting Var directly:    esp8266_cmd_flash_ptr[0].cmd_ptr

esp8266_cmd_flash_ptr[0]:   >
esp8266_cmd_flash_ptr[1]:   AT
esp8266_cmd_flash_ptr[2]:   busy p...
esp8266_cmd_flash_ptr[3]:   CIFSR
esp8266_cmd_flash_ptr[4]:   CIPCLOSE
esp8266_cmd_flash_ptr[5]:   CIPDNS
Geting Var INdirectly:  esp8266_cmd_flash_ptr[i].cmd_ptr

esp8266_cmd_flash_ptr[0]:   >
esp8266_cmd_flash_ptr[1]:   AT
esp8266_cmd_flash_ptr[2]:   busy p...
esp8266_cmd_flash_ptr[3]:   CIFSR
esp8266_cmd_flash_ptr[4]:   CIPCLOSE
esp8266_cmd_flash_ptr[5]:   CIPDNS
For Loop Start for(u8b i = 0; i < 3; i++)
esp8266_cmd_flash_ptr[i].cmd_ptr:       00
K?\?m?~???????&? ?1?B?S?d?u??????^???
???
...
esp8266_cmd_flash_ptr[i].cmd_ptr:       01
??
...
esp8266_cmd_flash_ptr[i].cmd_ptr:       02
??
...
For Loop End
For Loop Start for(u8b i = 0; i < 6; i++)
esp8266_cmd_flash_ptr[i].cmd_ptr:       00
K?\?m?~???????&? ?1?B?S?d?u??????^???
???
...
esp8266_cmd_flash_ptr[i].cmd_ptr:       01
??
...
esp8266_cmd_flash_ptr[i].cmd_ptr:       02
??
...
esp8266_cmd_flash_ptr[i].cmd_ptr:       03
??
...
esp8266_cmd_flash_ptr[i].cmd_ptr:       04
K?\?m?~???????&? ?1?B?S?d?u??????^???
???
...
esp8266_cmd_flash_ptr[i].cmd_ptr:       05
K?\?m?~???????&? ?1?B?S?d?u??????^???
...
For Loop End
Loop Start while(i < 3)
esp8266_cmd_flash_ptr[i].cmd_ptr:       00
K?\?m?~???????&? ?1?B?S?d?u??????^???
???
...
esp8266_cmd_flash_ptr[i].cmd_ptr:       01
??
...
\
esp8266_cmd_flash_ptr[i].cmd_ptr:       02
??
...
\
while Loop End
void MXA_Test(void) End

我已经把它做得更短了,所以无论你在哪里看到......这都等于大量的垃圾数据。 因此,只有当我尝试获取带有存储在 Flash 中的指针的字符串时,才会出现问题,如下所示:

 for(i = 0; i < 6; i++)
    {
        Print_Value_DEC("esp8266_cmd_flash_ptr[i].cmd_ptr:  ", i);
        DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
        DEBUGGER_UART_TX_String(enter_txt); 
    }

但所有其他方法都可以正常工作。 这是我今天最后一次也是最大的代码转储,即 .lss 文件:

0000a752 <MXA_Test>:

void MXA_Test(void)
{
    a752:   cf 92           push    r12
    a754:   df 92           push    r13
    a756:   ef 92           push    r14
    a758:   ff 92           push    r15
    a75a:   0f 93           push    r16
    a75c:   1f 93           push    r17
    a75e:   cf 93           push    r28
    a760:   df 93           push    r29
    a762:   cd b7           in  r28, 0x3d   ; 61
    a764:   de b7           in  r29, 0x3e   ; 62
    a766:   6d 97           sbiw    r28, 0x1d   ; 29
    a768:   0f b6           in  r0, 0x3f    ; 63
    a76a:   f8 94           cli
    a76c:   de bf           out 0x3e, r29   ; 62
    a76e:   0f be           out 0x3f, r0    ; 63
    a770:   cd bf           out 0x3d, r28   ; 61
    DEBUGGER_UART_TX_String("void MXA_Test(void) Start");
    a772:   81 e6           ldi r24, 0x61   ; 97
    a774:   95 e0           ldi r25, 0x05   ; 5
    a776:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String(enter_txt);
    a77a:   8f e9           ldi r24, 0x9F   ; 159
    a77c:   94 e1           ldi r25, 0x14   ; 20
    a77e:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String("For Loop Start for(u8b i = 0; i < 6; i++)");
    a782:   8b e7           ldi r24, 0x7B   ; 123
    a784:   95 e0           ldi r25, 0x05   ; 5
    a786:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String(enter_txt);
    a78a:   8f e9           ldi r24, 0x9F   ; 159
    a78c:   94 e1           ldi r25, 0x14   ; 20
    a78e:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    for(u8b i = 0; i < 6; i++)
    a792:   30 e0           ldi r19, 0x00   ; 0
    a794:   e3 2e           mov r14, r19
    a796:   31 e0           ldi r19, 0x01   ; 1
    a798:   f3 2e           mov r15, r19
    DEBUGGER_UART_TX_String(enter_txt);
    a79a:   10 e0           ldi r17, 0x00   ; 0
    a79c:   00 e0           ldi r16, 0x00   ; 0
    {
        Print_Value_DEC("esp8266_cmd_ptr[i].cmd_ptr:    ", i);
    a79e:   4a e0           ldi r20, 0x0A   ; 10
    a7a0:   b8 01           movw    r22, r16
    a7a2:   86 eb           ldi r24, 0xB6   ; 182
    a7a4:   95 e0           ldi r25, 0x05   ; 5
    a7a6:   0e 94 64 14     call    0x28c8  ; 0x28c8 <Print_Value_General>
        DEBUGGER_UART_TXFS(esp8266_cmd_ptr[i].cmd_ptr);
    a7aa:   f7 01           movw    r30, r14
    a7ac:   80 81           ld  r24, Z
    a7ae:   91 81           ldd r25, Z+1    ; 0x01
    a7b0:   0e 94 78 10     call    0x20f0  ; 0x20f0 <USART0_TX_Flash_String>
        DEBUGGER_UART_TX_String(enter_txt); 
    a7b4:   8f e9           ldi r24, 0x9F   ; 159
    a7b6:   94 e1           ldi r25, 0x14   ; 20
    a7b8:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    for(u8b i = 0; i < 6; i++)
    a7bc:   0f 5f           subi    r16, 0xFF   ; 255
    a7be:   1f 4f           sbci    r17, 0xFF   ; 255
    a7c0:   f4 e0           ldi r31, 0x04   ; 4
    a7c2:   ef 0e           add r14, r31
    a7c4:   f1 1c           adc r15, r1
    a7c6:   0a 32           cpi r16, 0x06   ; 6
    a7c8:   11 05           cpc r17, r1
    a7ca:   49 f7           brne    .-46        ; 0xa79e <MXA_Test+0x4c>
    }
    DEBUGGER_UART_TX_String("For Loop End");
    a7cc:   83 ed           ldi r24, 0xD3   ; 211
    a7ce:   95 e0           ldi r25, 0x05   ; 5
    a7d0:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String(enter_txt);
    a7d4:   8f e9           ldi r24, 0x9F   ; 159
    a7d6:   94 e1           ldi r25, 0x14   ; 20
    a7d8:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    
    u8b var_name_str_start[] = {"\r\nesp8266_cmd_flash_ptr["};
    a7dc:   89 e1           ldi r24, 0x19   ; 25
    a7de:   e5 e5           ldi r30, 0x55   ; 85
    a7e0:   f7 e0           ldi r31, 0x07   ; 7
    a7e2:   de 01           movw    r26, r28
    a7e4:   11 96           adiw    r26, 0x01   ; 1
    a7e6:   01 90           ld  r0, Z+
    a7e8:   0d 92           st  X+, r0
    a7ea:   8a 95           dec r24
    a7ec:   e1 f7           brne    .-8         ; 0xa7e6 <MXA_Test+0x94>
    u8b var_name_str_end[] = {"]:   "};
    a7ee:   80 91 6e 07     lds r24, 0x076E ; 0x80076e <esp8266_cmd_ptr+0x66e>
    a7f2:   90 91 6f 07     lds r25, 0x076F ; 0x80076f <esp8266_cmd_ptr+0x66f>
    a7f6:   a0 91 70 07     lds r26, 0x0770 ; 0x800770 <esp8266_cmd_ptr+0x670>
    a7fa:   b0 91 71 07     lds r27, 0x0771 ; 0x800771 <esp8266_cmd_ptr+0x671>
    a7fe:   8a 8f           std Y+26, r24   ; 0x1a
    a800:   9b 8f           std Y+27, r25   ; 0x1b
    a802:   ac 8f           std Y+28, r26   ; 0x1c
    a804:   bd 8f           std Y+29, r27   ; 0x1d
    
    DEBUGGER_UART_TX_String("Usig esp8266_cmd_flash_ptr (stored in FLASH):");
    a806:   80 ee           ldi r24, 0xE0   ; 224
    a808:   95 e0           ldi r25, 0x05   ; 5
    a80a:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String(enter_txt);
    a80e:   8f e9           ldi r24, 0x9F   ; 159
    a810:   94 e1           ldi r25, 0x14   ; 20
    a812:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String("Geting Var directly:   esp8266_cmd_flash_ptr[0].cmd_ptr");
    a816:   8e e0           ldi r24, 0x0E   ; 14
    a818:   96 e0           ldi r25, 0x06   ; 6
    a81a:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String(enter_txt);
    a81e:   8f e9           ldi r24, 0x9F   ; 159
    a820:   94 e1           ldi r25, 0x14   ; 20
    a822:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    

    DEBUGGER_UART_TX_String(var_name_str_start);
    a880:   ce 01           movw    r24, r28
    a882:   01 96           adiw    r24, 0x01   ; 1
    a884:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TXD(0x33);
    a888:   83 e3           ldi r24, 0x33   ; 51
    a88a:   0e 94 2a 0f     call    0x1e54  ; 0x1e54 <USART0_TXD>
    DEBUGGER_UART_TX_String(var_name_str_end);
    a88e:   ce 01           movw    r24, r28
    a890:   4a 96           adiw    r24, 0x1a   ; 26
    a892:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[3].cmd_ptr);
    a896:   81 e6           ldi r24, 0x61   ; 97
    a898:   91 e0           ldi r25, 0x01   ; 1
    a89a:   0e 94 78 10     call    0x20f0  ; 0x20f0 <USART0_TX_Flash_String>

    DEBUGGER_UART_TX_String(enter_txt);
    a8da:   8f e9           ldi r24, 0x9F   ; 159
    a8dc:   94 e1           ldi r25, 0x14   ; 20
    a8de:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String("Geting Var INdirectly: esp8266_cmd_flash_ptr[i].cmd_ptr");
    a8e2:   84 e4           ldi r24, 0x44   ; 68
    a8e4:   96 e0           ldi r25, 0x06   ; 6
    a8e6:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String(enter_txt);
    a8ea:   8f e9           ldi r24, 0x9F   ; 159
    a8ec:   94 e1           ldi r25, 0x14   ; 20
    a8ee:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    u8b i = 0;
    DEBUGGER_UART_TX_String(var_name_str_start);
    a8f2:   ce 01           movw    r24, r28
    a8f4:   01 96           adiw    r24, 0x01   ; 1
    a8f6:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TXD(i+0x30);
    a8fa:   80 e3           ldi r24, 0x30   ; 48
    a8fc:   0e 94 2a 0f     call    0x1e54  ; 0x1e54 <USART0_TXD>
    DEBUGGER_UART_TX_String(var_name_str_end);
    a900:   ce 01           movw    r24, r28
    a902:   4a 96           adiw    r24, 0x1a   ; 26
    a904:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
    a908:   8f e1           ldi r24, 0x1F   ; 31
    a90a:   92 e0           ldi r25, 0x02   ; 2
    a90c:   0e 94 78 10     call    0x20f0  ; 0x20f0 <USART0_TX_Flash_String>
    i++;

    DEBUGGER_UART_TX_String(enter_txt);
    a9a6:   8f e9           ldi r24, 0x9F   ; 159
    a9a8:   94 e1           ldi r25, 0x14   ; 20
    a9aa:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String("For Loop Start for(u8b i = 0; i < 3; i++)");
    a9ae:   8c e7           ldi r24, 0x7C   ; 124
    a9b0:   96 e0           ldi r25, 0x06   ; 6
    a9b2:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String(enter_txt);
    a9b6:   8f e9           ldi r24, 0x9F   ; 159
    a9b8:   94 e1           ldi r25, 0x14   ; 20
    a9ba:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    for(i = 0; i < 3; i++)
    a9be:   2c e8           ldi r18, 0x8C   ; 140
    a9c0:   e2 2e           mov r14, r18
    a9c2:   20 e0           ldi r18, 0x00   ; 0
    a9c4:   f2 2e           mov r15, r18
    DEBUGGER_UART_TX_String(enter_txt);
    a9c6:   67 01           movw    r12, r14
    a9c8:   10 e0           ldi r17, 0x00   ; 0
    a9ca:   00 e0           ldi r16, 0x00   ; 0
    {
        Print_Value_DEC("esp8266_cmd_flash_ptr[i].cmd_ptr:  ", i);
    a9cc:   4a e0           ldi r20, 0x0A   ; 10
    a9ce:   b8 01           movw    r22, r16
    a9d0:   86 ea           ldi r24, 0xA6   ; 166
    a9d2:   96 e0           ldi r25, 0x06   ; 6
    a9d4:   0e 94 64 14     call    0x28c8  ; 0x28c8 <Print_Value_General>
        DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
    a9d8:   f6 01           movw    r30, r12
    a9da:   80 81           ld  r24, Z
    a9dc:   91 81           ldd r25, Z+1    ; 0x01
    a9de:   0e 94 78 10     call    0x20f0  ; 0x20f0 <USART0_TX_Flash_String>
        DEBUGGER_UART_TX_String(enter_txt); 
    a9e2:   8f e9           ldi r24, 0x9F   ; 159
    a9e4:   94 e1           ldi r25, 0x14   ; 20
    a9e6:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    for(i = 0; i < 3; i++)
    a9ea:   0f 5f           subi    r16, 0xFF   ; 255
    a9ec:   1f 4f           sbci    r17, 0xFF   ; 255
    a9ee:   f4 e0           ldi r31, 0x04   ; 4
    a9f0:   cf 0e           add r12, r31
    a9f2:   d1 1c           adc r13, r1
    a9f4:   03 30           cpi r16, 0x03   ; 3
    a9f6:   11 05           cpc r17, r1
    a9f8:   49 f7           brne    .-46        ; 0xa9cc <MXA_Test+0x27a>
    }
    DEBUGGER_UART_TX_String("For Loop End");
    a9fa:   83 ed           ldi r24, 0xD3   ; 211
    a9fc:   95 e0           ldi r25, 0x05   ; 5
    a9fe:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String(enter_txt);
    aa02:   8f e9           ldi r24, 0x9F   ; 159
    aa04:   94 e1           ldi r25, 0x14   ; 20
    aa06:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    
    DEBUGGER_UART_TX_String("For Loop Start for(u8b i = 0; i < 6; i++)");
    aa0a:   89 ec           ldi r24, 0xC9   ; 201
    aa0c:   96 e0           ldi r25, 0x06   ; 6
    aa0e:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String(enter_txt);
    aa12:   8f e9           ldi r24, 0x9F   ; 159
    aa14:   94 e1           ldi r25, 0x14   ; 20
    aa16:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    aa1a:   9c e8           ldi r25, 0x8C   ; 140
    aa1c:   c9 2e           mov r12, r25
    aa1e:   90 e0           ldi r25, 0x00   ; 0
    aa20:   d9 2e           mov r13, r25
    aa22:   10 e0           ldi r17, 0x00   ; 0
    aa24:   00 e0           ldi r16, 0x00   ; 0
    for(i = 0; i < 6; i++)
    {
        Print_Value_DEC("esp8266_cmd_flash_ptr[i].cmd_ptr:  ", i);
    aa26:   4a e0           ldi r20, 0x0A   ; 10
    aa28:   b8 01           movw    r22, r16
    aa2a:   86 ea           ldi r24, 0xA6   ; 166
    aa2c:   96 e0           ldi r25, 0x06   ; 6
    aa2e:   0e 94 64 14     call    0x28c8  ; 0x28c8 <Print_Value_General>
        DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
    aa32:   f6 01           movw    r30, r12
    aa34:   80 81           ld  r24, Z
    aa36:   91 81           ldd r25, Z+1    ; 0x01
    aa38:   0e 94 78 10     call    0x20f0  ; 0x20f0 <USART0_TX_Flash_String>
        DEBUGGER_UART_TX_String(enter_txt); 
    aa3c:   8f e9           ldi r24, 0x9F   ; 159
    aa3e:   94 e1           ldi r25, 0x14   ; 20
    aa40:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    for(i = 0; i < 6; i++)
    aa44:   0f 5f           subi    r16, 0xFF   ; 255
    aa46:   1f 4f           sbci    r17, 0xFF   ; 255
    aa48:   f4 e0           ldi r31, 0x04   ; 4
    aa4a:   cf 0e           add r12, r31
    aa4c:   d1 1c           adc r13, r1
    aa4e:   06 30           cpi r16, 0x06   ; 6
    aa50:   11 05           cpc r17, r1
    aa52:   49 f7           brne    .-46        ; 0xaa26 <MXA_Test+0x2d4>
    }
    DEBUGGER_UART_TX_String("For Loop End");
    aa54:   83 ed           ldi r24, 0xD3   ; 211
    aa56:   95 e0           ldi r25, 0x05   ; 5
    aa58:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String(enter_txt);
    aa5c:   8f e9           ldi r24, 0x9F   ; 159
    aa5e:   94 e1           ldi r25, 0x14   ; 20
    aa60:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>

    i = 0;
    DEBUGGER_UART_TX_String("Loop Start while(i < 3)");
    aabe:   85 e2           ldi r24, 0x25   ; 37
    aac0:   97 e0           ldi r25, 0x07   ; 7
    aac2:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String(enter_txt);
    aac6:   8f e9           ldi r24, 0x9F   ; 159
    aac8:   94 e1           ldi r25, 0x14   ; 20
    aaca:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    aace:   10 e0           ldi r17, 0x00   ; 0
    aad0:   00 e0           ldi r16, 0x00   ; 0
    while(i < 3)
    {
        Print_Value_DEC("esp8266_cmd_flash_ptr[i].cmd_ptr:  ", i);
    aad2:   4a e0           ldi r20, 0x0A   ; 10
    aad4:   b8 01           movw    r22, r16
    aad6:   86 ea           ldi r24, 0xA6   ; 166
    aad8:   96 e0           ldi r25, 0x06   ; 6
    aada:   0e 94 64 14     call    0x28c8  ; 0x28c8 <Print_Value_General>
        DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
    aade:   f7 01           movw    r30, r14
    aae0:   80 81           ld  r24, Z
    aae2:   91 81           ldd r25, Z+1    ; 0x01
    aae4:   0e 94 78 10     call    0x20f0  ; 0x20f0 <USART0_TX_Flash_String>
        DEBUGGER_UART_TX_String(enter_txt); 
    aae8:   8f e9           ldi r24, 0x9F   ; 159
    aaea:   94 e1           ldi r25, 0x14   ; 20
    aaec:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    while(i < 3)
    aaf0:   0f 5f           subi    r16, 0xFF   ; 255
    aaf2:   1f 4f           sbci    r17, 0xFF   ; 255
    aaf4:   f4 e0           ldi r31, 0x04   ; 4
    aaf6:   ef 0e           add r14, r31
    aaf8:   f1 1c           adc r15, r1
    aafa:   03 30           cpi r16, 0x03   ; 3
    aafc:   11 05           cpc r17, r1
    aafe:   49 f7           brne    .-46        ; 0xaad2 <MXA_Test+0x380>
        i++;
    }
    DEBUGGER_UART_TX_String("while Loop End");
    ab00:   86 e1           ldi r24, 0x16   ; 22
    ab02:   97 e0           ldi r25, 0x07   ; 7
    ab04:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String(enter_txt);
    ab08:   8f e9           ldi r24, 0x9F   ; 159
    ab0a:   94 e1           ldi r25, 0x14   ; 20
    ab0c:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    
    DEBUGGER_UART_TX_String("void MXA_Test(void) End");
    ab10:   8d e3           ldi r24, 0x3D   ; 61
    ab12:   97 e0           ldi r25, 0x07   ; 7
    ab14:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String(enter_txt);
    ab18:   8f e9           ldi r24, 0x9F   ; 159
    ab1a:   94 e1           ldi r25, 0x14   ; 20
    ab1c:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
}
    ab20:   6d 96           adiw    r28, 0x1d   ; 29
    ab22:   0f b6           in  r0, 0x3f    ; 63
    ab24:   f8 94           cli
    ab26:   de bf           out 0x3e, r29   ; 62
    ab28:   0f be           out 0x3f, r0    ; 63
    ab2a:   cd bf           out 0x3d, r28   ; 61
    ab2c:   df 91           pop r29
    ab2e:   cf 91           pop r28
    ab30:   1f 91           pop r17
    ab32:   0f 91           pop r16
    ab34:   ff 90           pop r15
    ab36:   ef 90           pop r14
    ab38:   df 90           pop r13
    ab3a:   cf 90           pop r12
    ab3c:   08 95           ret

那么任何人都可以从中弄清楚吗?

This is kind of a complex problem, that I'm unsure of it's cause.

So bare with me because, my English(writing) is rusty, and my Technial Language(terminology) is not so good either.

Dev: Atmega1284P
Compiler: AVR-GCC 11.1.0 from Zak's Electronics Blog

All the libraries that I'm using are written by me. They all work as expected, that includes my UART and it's "sister" UART Debugger.
Here's a part of it to better understand the other code segments:

void USART0_TX_Flash_String(const unsigned char* text)
{
    while(pgm_read_byte(text)>0)
    {
        USART0_TXD(pgm_read_byte(text++));
    }
}

#define DEBUGGER_UART_TXFS(string)          USART0_TX_Flash_String(string)

void Print_Value_General(unsigned char* string, unsigned int value, unsigned char mode)
{
    unsigned char StringA[8] = {};
    DEBUGGER_UART_TX_String(string);
    DEBUGGER_UART_TXD(tab_txt);
    Convert_Value(value, mode, StringA);        // basicly itoa()
    DEBUGGER_UART_TX_String(StringA);
    DEBUGGER_UART_TX_String(enter_txt);
}

#define Print_Value_DEC(string, value)      Print_Value_General(string, value, 10)

This next segment is just a fraction of the ESP8266 library, namely the variables:

// ESP8266 Messages
const unsigned char flash_str_msg_report_wait_for_data[] PROGMEM = ">";

//  Basic AT Commands
const unsigned char flash_str_at[] PROGMEM = "AT";

// Software Access Point Settings
// TCP/IP AT Commands
const unsigned char flash_str_cipclose[] PROGMEM = "CIPCLOSE";
const unsigned char flash_str_cifsr[] PROGMEM = "CIFSR";
const unsigned char flash_str_cipdns[] PROGMEM = "CIPDNS";


typedef struct td_esp8266_cmd_ptr
{
    unsigned char* cmd_ptr;
    void(*fp)(unsigned char array[]);
}td_esp8266_cmd_ptr;

void UnDefinedEmptyFoo(unsigned char string[])
{
    DEBUGGER_UART_TX_String("void UnDefinedEmptyFoo(void) is Callled\r\n");
}


td_esp8266_cmd_ptr esp8266_cmd_ptr[6] = {
    {
        flash_str_msg_report_wait_for_data,     //  [] PROGMEM = ">";
        UnDefinedEmptyFoo,
    },
    {   
        flash_str_at,                           //  [] PROGMEM = "AT";
        UnDefinedEmptyFoo,
    },
    {
        flash_str_msg_report_busy,              //  [] PROGMEM = "busy p...";
        UnDefinedEmptyFoo,
    },
    {
        flash_str_cifsr,                        //  [] PROGMEM = "CIFSR";
        UnDefinedEmptyFoo,
    },
    {
        flash_str_cipclose,                     //  [] PROGMEM = "CIPCLOSE";
        UnDefinedEmptyFoo,
    },
    {
        flash_str_cipdns,                       //  [] PROGMEM = "CIPDNS";
        UnDefinedEmptyFoo,
    }
};
const td_esp8266_cmd_ptr esp8266_cmd_flash_ptr[6] PROGMEM = {
    {
        flash_str_msg_report_wait_for_data,     //  [] PROGMEM = ">";
        UnDefinedEmptyFoo,
    },
    {   
        flash_str_at,                           //  [] PROGMEM = "AT";
        UnDefinedEmptyFoo,
    },
    {
        flash_str_msg_report_busy,              //  [] PROGMEM = "busy p...";
        UnDefinedEmptyFoo,
    },
    {
        flash_str_cifsr,                        //  [] PROGMEM = "CIFSR";
        UnDefinedEmptyFoo,
    },
    {
        flash_str_cipclose,                     //  [] PROGMEM = "CIPCLOSE";
        UnDefinedEmptyFoo,
    },
    {
        flash_str_cipdns,                       //  [] PROGMEM = "CIPDNS";
        UnDefinedEmptyFoo,
    }
};

Here you can see two almost identical arrays of structure, or structure of arrays?
To bee clear, I'm referencing:

td_esp8266_cmd_ptr esp8266_cmd_ptr[6] = {};
const td_esp8266_cmd_ptr esp8266_cmd_flash_ptr[6] PROGMEM = {};

The first one is stored in RAM, and the second one in Flash.
The problem is with the second one.

This is the example code, to see where the problem starts:

void MXA_Test(void)
{
    DEBUGGER_UART_TX_String("void MXA_Test(void) Start");
    DEBUGGER_UART_TX_String(enter_txt);
    DEBUGGER_UART_TX_String("For Loop Start for(u8b i = 0; i < 6; i++)");
    DEBUGGER_UART_TX_String(enter_txt);
    for(u8b i = 0; i < 6; i++)
    {
        Print_Value_DEC("esp8266_cmd_ptr[i].cmd_ptr:    ", i);
        DEBUGGER_UART_TXFS(esp8266_cmd_ptr[i].cmd_ptr);
        DEBUGGER_UART_TX_String(enter_txt); 
    }
    DEBUGGER_UART_TX_String("For Loop End");
    DEBUGGER_UART_TX_String(enter_txt);
    
    u8b var_name_str_start[] = {"\r\nesp8266_cmd_flash_ptr["};
    u8b var_name_str_end[] = {"]:   "};
    
    DEBUGGER_UART_TX_String("Usig esp8266_cmd_flash_ptr (stored in FLASH):");
    DEBUGGER_UART_TX_String(enter_txt);
    DEBUGGER_UART_TX_String("Geting Var directly:   esp8266_cmd_flash_ptr[0].cmd_ptr");
    DEBUGGER_UART_TX_String(enter_txt);
    
    DEBUGGER_UART_TX_String(var_name_str_start);
    DEBUGGER_UART_TXD(0x30);
    DEBUGGER_UART_TX_String(var_name_str_end);
    DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[0].cmd_ptr);
    
    DEBUGGER_UART_TX_String(var_name_str_start);
    DEBUGGER_UART_TXD(0x31);
    DEBUGGER_UART_TX_String(var_name_str_end);
    DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[1].cmd_ptr);
    
    DEBUGGER_UART_TX_String(var_name_str_start);
    DEBUGGER_UART_TXD(0x32);
    DEBUGGER_UART_TX_String(var_name_str_end);
    DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[2].cmd_ptr);
    
    DEBUGGER_UART_TX_String(var_name_str_start);
    DEBUGGER_UART_TXD(0x33);
    DEBUGGER_UART_TX_String(var_name_str_end);
    DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[3].cmd_ptr);

    DEBUGGER_UART_TX_String(var_name_str_start);
    DEBUGGER_UART_TXD(0x34);
    DEBUGGER_UART_TX_String(var_name_str_end);
    DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[4].cmd_ptr);
    
    DEBUGGER_UART_TX_String(var_name_str_start);
    DEBUGGER_UART_TXD(0x35);
    DEBUGGER_UART_TX_String(var_name_str_end);
    DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[5].cmd_ptr);
    
    DEBUGGER_UART_TX_String(enter_txt);
    DEBUGGER_UART_TX_String("Geting Var INdirectly: esp8266_cmd_flash_ptr[i].cmd_ptr");
    DEBUGGER_UART_TX_String(enter_txt);
    u8b i = 0;
    DEBUGGER_UART_TX_String(var_name_str_start);
    DEBUGGER_UART_TXD(i+0x30);
    DEBUGGER_UART_TX_String(var_name_str_end);
    DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
    i++;
    DEBUGGER_UART_TX_String(var_name_str_start);
    DEBUGGER_UART_TXD(i+0x30);
    DEBUGGER_UART_TX_String(var_name_str_end);
    DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
    i++;
    DEBUGGER_UART_TX_String(var_name_str_start);
    DEBUGGER_UART_TXD(i+0x30);
    DEBUGGER_UART_TX_String(var_name_str_end);
    DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
    i++;
    DEBUGGER_UART_TX_String(var_name_str_start);
    DEBUGGER_UART_TXD(i+0x30);
    DEBUGGER_UART_TX_String(var_name_str_end);
    DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
    i++;
    DEBUGGER_UART_TX_String(var_name_str_start);
    DEBUGGER_UART_TXD(i+0x30);
    DEBUGGER_UART_TX_String(var_name_str_end);
    DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
    i++;
    DEBUGGER_UART_TX_String(var_name_str_start);
    DEBUGGER_UART_TXD(i+0x30);
    DEBUGGER_UART_TX_String(var_name_str_end);
    DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
    i++;
    
    DEBUGGER_UART_TX_String(enter_txt);
    DEBUGGER_UART_TX_String("For Loop Start for(u8b i = 0; i < 3; i++)");
    DEBUGGER_UART_TX_String(enter_txt);
    for(i = 0; i < 3; i++)
    {
        Print_Value_DEC("esp8266_cmd_flash_ptr[i].cmd_ptr:  ", i);
        DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
        DEBUGGER_UART_TX_String(enter_txt); 
    }
    DEBUGGER_UART_TX_String("For Loop End");
    DEBUGGER_UART_TX_String(enter_txt);
    
    DEBUGGER_UART_TX_String("For Loop Start for(u8b i = 0; i < 6; i++)");
    DEBUGGER_UART_TX_String(enter_txt);
    for(i = 0; i < 6; i++)
    {
        Print_Value_DEC("esp8266_cmd_flash_ptr[i].cmd_ptr:  ", i);
        DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
        DEBUGGER_UART_TX_String(enter_txt); 
    }
    DEBUGGER_UART_TX_String("For Loop End");
    DEBUGGER_UART_TX_String(enter_txt);
    
    DEBUGGER_UART_TX_String("do while Loop End");
    DEBUGGER_UART_TX_String(enter_txt);
    
    i = 0;
    DEBUGGER_UART_TX_String("Loop Start while(i < 3)");
    DEBUGGER_UART_TX_String(enter_txt);
    while(i < 3)
    {
        Print_Value_DEC("esp8266_cmd_flash_ptr[i].cmd_ptr:  ", i);
        DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
        DEBUGGER_UART_TX_String(enter_txt); 
        i++;
    }
    DEBUGGER_UART_TX_String("while Loop End");
    DEBUGGER_UART_TX_String(enter_txt);
    
    DEBUGGER_UART_TX_String("void MXA_Test(void) End");
    DEBUGGER_UART_TX_String(enter_txt);
}

This is it's Output via UART:

void MXA_Test(void) Start
For Loop Start for(u8b i = 0; i < 6; i++)
esp8266_cmd_ptr[i].cmd_ptr:     00
>
esp8266_cmd_ptr[i].cmd_ptr:     01
AT
esp8266_cmd_ptr[i].cmd_ptr:     02
busy p...
esp8266_cmd_ptr[i].cmd_ptr:     03
CIFSR
esp8266_cmd_ptr[i].cmd_ptr:     04
CIPCLOSE
esp8266_cmd_ptr[i].cmd_ptr:     05
CIPDNS
For Loop End
Usig esp8266_cmd_flash_ptr (stored in FLASH):
Geting Var directly:    esp8266_cmd_flash_ptr[0].cmd_ptr

esp8266_cmd_flash_ptr[0]:   >
esp8266_cmd_flash_ptr[1]:   AT
esp8266_cmd_flash_ptr[2]:   busy p...
esp8266_cmd_flash_ptr[3]:   CIFSR
esp8266_cmd_flash_ptr[4]:   CIPCLOSE
esp8266_cmd_flash_ptr[5]:   CIPDNS
Geting Var INdirectly:  esp8266_cmd_flash_ptr[i].cmd_ptr

esp8266_cmd_flash_ptr[0]:   >
esp8266_cmd_flash_ptr[1]:   AT
esp8266_cmd_flash_ptr[2]:   busy p...
esp8266_cmd_flash_ptr[3]:   CIFSR
esp8266_cmd_flash_ptr[4]:   CIPCLOSE
esp8266_cmd_flash_ptr[5]:   CIPDNS
For Loop Start for(u8b i = 0; i < 3; i++)
esp8266_cmd_flash_ptr[i].cmd_ptr:       00
K?\?m?~???????&? ?1?B?S?d?u??????^???
???
...
esp8266_cmd_flash_ptr[i].cmd_ptr:       01
??
...
esp8266_cmd_flash_ptr[i].cmd_ptr:       02
??
...
For Loop End
For Loop Start for(u8b i = 0; i < 6; i++)
esp8266_cmd_flash_ptr[i].cmd_ptr:       00
K?\?m?~???????&? ?1?B?S?d?u??????^???
???
...
esp8266_cmd_flash_ptr[i].cmd_ptr:       01
??
...
esp8266_cmd_flash_ptr[i].cmd_ptr:       02
??
...
esp8266_cmd_flash_ptr[i].cmd_ptr:       03
??
...
esp8266_cmd_flash_ptr[i].cmd_ptr:       04
K?\?m?~???????&? ?1?B?S?d?u??????^???
???
...
esp8266_cmd_flash_ptr[i].cmd_ptr:       05
K?\?m?~???????&? ?1?B?S?d?u??????^???
...
For Loop End
Loop Start while(i < 3)
esp8266_cmd_flash_ptr[i].cmd_ptr:       00
K?\?m?~???????&? ?1?B?S?d?u??????^???
???
...
esp8266_cmd_flash_ptr[i].cmd_ptr:       01
??
...
\
esp8266_cmd_flash_ptr[i].cmd_ptr:       02
??
...
\
while Loop End
void MXA_Test(void) End

I've made it much shorter, so where ever you see ... that is equal to a ton of yunk data.
So the problem only occurres when I'm tring to get a string with a pointer that is stored in Flash, like so:

 for(i = 0; i < 6; i++)
    {
        Print_Value_DEC("esp8266_cmd_flash_ptr[i].cmd_ptr:  ", i);
        DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
        DEBUGGER_UART_TX_String(enter_txt); 
    }

But all other approaches work fine.
Here's my last and biggest code dump of the day, the .lss file:

0000a752 <MXA_Test>:

void MXA_Test(void)
{
    a752:   cf 92           push    r12
    a754:   df 92           push    r13
    a756:   ef 92           push    r14
    a758:   ff 92           push    r15
    a75a:   0f 93           push    r16
    a75c:   1f 93           push    r17
    a75e:   cf 93           push    r28
    a760:   df 93           push    r29
    a762:   cd b7           in  r28, 0x3d   ; 61
    a764:   de b7           in  r29, 0x3e   ; 62
    a766:   6d 97           sbiw    r28, 0x1d   ; 29
    a768:   0f b6           in  r0, 0x3f    ; 63
    a76a:   f8 94           cli
    a76c:   de bf           out 0x3e, r29   ; 62
    a76e:   0f be           out 0x3f, r0    ; 63
    a770:   cd bf           out 0x3d, r28   ; 61
    DEBUGGER_UART_TX_String("void MXA_Test(void) Start");
    a772:   81 e6           ldi r24, 0x61   ; 97
    a774:   95 e0           ldi r25, 0x05   ; 5
    a776:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String(enter_txt);
    a77a:   8f e9           ldi r24, 0x9F   ; 159
    a77c:   94 e1           ldi r25, 0x14   ; 20
    a77e:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String("For Loop Start for(u8b i = 0; i < 6; i++)");
    a782:   8b e7           ldi r24, 0x7B   ; 123
    a784:   95 e0           ldi r25, 0x05   ; 5
    a786:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String(enter_txt);
    a78a:   8f e9           ldi r24, 0x9F   ; 159
    a78c:   94 e1           ldi r25, 0x14   ; 20
    a78e:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    for(u8b i = 0; i < 6; i++)
    a792:   30 e0           ldi r19, 0x00   ; 0
    a794:   e3 2e           mov r14, r19
    a796:   31 e0           ldi r19, 0x01   ; 1
    a798:   f3 2e           mov r15, r19
    DEBUGGER_UART_TX_String(enter_txt);
    a79a:   10 e0           ldi r17, 0x00   ; 0
    a79c:   00 e0           ldi r16, 0x00   ; 0
    {
        Print_Value_DEC("esp8266_cmd_ptr[i].cmd_ptr:    ", i);
    a79e:   4a e0           ldi r20, 0x0A   ; 10
    a7a0:   b8 01           movw    r22, r16
    a7a2:   86 eb           ldi r24, 0xB6   ; 182
    a7a4:   95 e0           ldi r25, 0x05   ; 5
    a7a6:   0e 94 64 14     call    0x28c8  ; 0x28c8 <Print_Value_General>
        DEBUGGER_UART_TXFS(esp8266_cmd_ptr[i].cmd_ptr);
    a7aa:   f7 01           movw    r30, r14
    a7ac:   80 81           ld  r24, Z
    a7ae:   91 81           ldd r25, Z+1    ; 0x01
    a7b0:   0e 94 78 10     call    0x20f0  ; 0x20f0 <USART0_TX_Flash_String>
        DEBUGGER_UART_TX_String(enter_txt); 
    a7b4:   8f e9           ldi r24, 0x9F   ; 159
    a7b6:   94 e1           ldi r25, 0x14   ; 20
    a7b8:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    for(u8b i = 0; i < 6; i++)
    a7bc:   0f 5f           subi    r16, 0xFF   ; 255
    a7be:   1f 4f           sbci    r17, 0xFF   ; 255
    a7c0:   f4 e0           ldi r31, 0x04   ; 4
    a7c2:   ef 0e           add r14, r31
    a7c4:   f1 1c           adc r15, r1
    a7c6:   0a 32           cpi r16, 0x06   ; 6
    a7c8:   11 05           cpc r17, r1
    a7ca:   49 f7           brne    .-46        ; 0xa79e <MXA_Test+0x4c>
    }
    DEBUGGER_UART_TX_String("For Loop End");
    a7cc:   83 ed           ldi r24, 0xD3   ; 211
    a7ce:   95 e0           ldi r25, 0x05   ; 5
    a7d0:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String(enter_txt);
    a7d4:   8f e9           ldi r24, 0x9F   ; 159
    a7d6:   94 e1           ldi r25, 0x14   ; 20
    a7d8:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    
    u8b var_name_str_start[] = {"\r\nesp8266_cmd_flash_ptr["};
    a7dc:   89 e1           ldi r24, 0x19   ; 25
    a7de:   e5 e5           ldi r30, 0x55   ; 85
    a7e0:   f7 e0           ldi r31, 0x07   ; 7
    a7e2:   de 01           movw    r26, r28
    a7e4:   11 96           adiw    r26, 0x01   ; 1
    a7e6:   01 90           ld  r0, Z+
    a7e8:   0d 92           st  X+, r0
    a7ea:   8a 95           dec r24
    a7ec:   e1 f7           brne    .-8         ; 0xa7e6 <MXA_Test+0x94>
    u8b var_name_str_end[] = {"]:   "};
    a7ee:   80 91 6e 07     lds r24, 0x076E ; 0x80076e <esp8266_cmd_ptr+0x66e>
    a7f2:   90 91 6f 07     lds r25, 0x076F ; 0x80076f <esp8266_cmd_ptr+0x66f>
    a7f6:   a0 91 70 07     lds r26, 0x0770 ; 0x800770 <esp8266_cmd_ptr+0x670>
    a7fa:   b0 91 71 07     lds r27, 0x0771 ; 0x800771 <esp8266_cmd_ptr+0x671>
    a7fe:   8a 8f           std Y+26, r24   ; 0x1a
    a800:   9b 8f           std Y+27, r25   ; 0x1b
    a802:   ac 8f           std Y+28, r26   ; 0x1c
    a804:   bd 8f           std Y+29, r27   ; 0x1d
    
    DEBUGGER_UART_TX_String("Usig esp8266_cmd_flash_ptr (stored in FLASH):");
    a806:   80 ee           ldi r24, 0xE0   ; 224
    a808:   95 e0           ldi r25, 0x05   ; 5
    a80a:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String(enter_txt);
    a80e:   8f e9           ldi r24, 0x9F   ; 159
    a810:   94 e1           ldi r25, 0x14   ; 20
    a812:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String("Geting Var directly:   esp8266_cmd_flash_ptr[0].cmd_ptr");
    a816:   8e e0           ldi r24, 0x0E   ; 14
    a818:   96 e0           ldi r25, 0x06   ; 6
    a81a:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String(enter_txt);
    a81e:   8f e9           ldi r24, 0x9F   ; 159
    a820:   94 e1           ldi r25, 0x14   ; 20
    a822:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    

    DEBUGGER_UART_TX_String(var_name_str_start);
    a880:   ce 01           movw    r24, r28
    a882:   01 96           adiw    r24, 0x01   ; 1
    a884:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TXD(0x33);
    a888:   83 e3           ldi r24, 0x33   ; 51
    a88a:   0e 94 2a 0f     call    0x1e54  ; 0x1e54 <USART0_TXD>
    DEBUGGER_UART_TX_String(var_name_str_end);
    a88e:   ce 01           movw    r24, r28
    a890:   4a 96           adiw    r24, 0x1a   ; 26
    a892:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[3].cmd_ptr);
    a896:   81 e6           ldi r24, 0x61   ; 97
    a898:   91 e0           ldi r25, 0x01   ; 1
    a89a:   0e 94 78 10     call    0x20f0  ; 0x20f0 <USART0_TX_Flash_String>

    DEBUGGER_UART_TX_String(enter_txt);
    a8da:   8f e9           ldi r24, 0x9F   ; 159
    a8dc:   94 e1           ldi r25, 0x14   ; 20
    a8de:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String("Geting Var INdirectly: esp8266_cmd_flash_ptr[i].cmd_ptr");
    a8e2:   84 e4           ldi r24, 0x44   ; 68
    a8e4:   96 e0           ldi r25, 0x06   ; 6
    a8e6:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String(enter_txt);
    a8ea:   8f e9           ldi r24, 0x9F   ; 159
    a8ec:   94 e1           ldi r25, 0x14   ; 20
    a8ee:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    u8b i = 0;
    DEBUGGER_UART_TX_String(var_name_str_start);
    a8f2:   ce 01           movw    r24, r28
    a8f4:   01 96           adiw    r24, 0x01   ; 1
    a8f6:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TXD(i+0x30);
    a8fa:   80 e3           ldi r24, 0x30   ; 48
    a8fc:   0e 94 2a 0f     call    0x1e54  ; 0x1e54 <USART0_TXD>
    DEBUGGER_UART_TX_String(var_name_str_end);
    a900:   ce 01           movw    r24, r28
    a902:   4a 96           adiw    r24, 0x1a   ; 26
    a904:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
    a908:   8f e1           ldi r24, 0x1F   ; 31
    a90a:   92 e0           ldi r25, 0x02   ; 2
    a90c:   0e 94 78 10     call    0x20f0  ; 0x20f0 <USART0_TX_Flash_String>
    i++;

    DEBUGGER_UART_TX_String(enter_txt);
    a9a6:   8f e9           ldi r24, 0x9F   ; 159
    a9a8:   94 e1           ldi r25, 0x14   ; 20
    a9aa:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String("For Loop Start for(u8b i = 0; i < 3; i++)");
    a9ae:   8c e7           ldi r24, 0x7C   ; 124
    a9b0:   96 e0           ldi r25, 0x06   ; 6
    a9b2:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String(enter_txt);
    a9b6:   8f e9           ldi r24, 0x9F   ; 159
    a9b8:   94 e1           ldi r25, 0x14   ; 20
    a9ba:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    for(i = 0; i < 3; i++)
    a9be:   2c e8           ldi r18, 0x8C   ; 140
    a9c0:   e2 2e           mov r14, r18
    a9c2:   20 e0           ldi r18, 0x00   ; 0
    a9c4:   f2 2e           mov r15, r18
    DEBUGGER_UART_TX_String(enter_txt);
    a9c6:   67 01           movw    r12, r14
    a9c8:   10 e0           ldi r17, 0x00   ; 0
    a9ca:   00 e0           ldi r16, 0x00   ; 0
    {
        Print_Value_DEC("esp8266_cmd_flash_ptr[i].cmd_ptr:  ", i);
    a9cc:   4a e0           ldi r20, 0x0A   ; 10
    a9ce:   b8 01           movw    r22, r16
    a9d0:   86 ea           ldi r24, 0xA6   ; 166
    a9d2:   96 e0           ldi r25, 0x06   ; 6
    a9d4:   0e 94 64 14     call    0x28c8  ; 0x28c8 <Print_Value_General>
        DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
    a9d8:   f6 01           movw    r30, r12
    a9da:   80 81           ld  r24, Z
    a9dc:   91 81           ldd r25, Z+1    ; 0x01
    a9de:   0e 94 78 10     call    0x20f0  ; 0x20f0 <USART0_TX_Flash_String>
        DEBUGGER_UART_TX_String(enter_txt); 
    a9e2:   8f e9           ldi r24, 0x9F   ; 159
    a9e4:   94 e1           ldi r25, 0x14   ; 20
    a9e6:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    for(i = 0; i < 3; i++)
    a9ea:   0f 5f           subi    r16, 0xFF   ; 255
    a9ec:   1f 4f           sbci    r17, 0xFF   ; 255
    a9ee:   f4 e0           ldi r31, 0x04   ; 4
    a9f0:   cf 0e           add r12, r31
    a9f2:   d1 1c           adc r13, r1
    a9f4:   03 30           cpi r16, 0x03   ; 3
    a9f6:   11 05           cpc r17, r1
    a9f8:   49 f7           brne    .-46        ; 0xa9cc <MXA_Test+0x27a>
    }
    DEBUGGER_UART_TX_String("For Loop End");
    a9fa:   83 ed           ldi r24, 0xD3   ; 211
    a9fc:   95 e0           ldi r25, 0x05   ; 5
    a9fe:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String(enter_txt);
    aa02:   8f e9           ldi r24, 0x9F   ; 159
    aa04:   94 e1           ldi r25, 0x14   ; 20
    aa06:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    
    DEBUGGER_UART_TX_String("For Loop Start for(u8b i = 0; i < 6; i++)");
    aa0a:   89 ec           ldi r24, 0xC9   ; 201
    aa0c:   96 e0           ldi r25, 0x06   ; 6
    aa0e:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String(enter_txt);
    aa12:   8f e9           ldi r24, 0x9F   ; 159
    aa14:   94 e1           ldi r25, 0x14   ; 20
    aa16:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    aa1a:   9c e8           ldi r25, 0x8C   ; 140
    aa1c:   c9 2e           mov r12, r25
    aa1e:   90 e0           ldi r25, 0x00   ; 0
    aa20:   d9 2e           mov r13, r25
    aa22:   10 e0           ldi r17, 0x00   ; 0
    aa24:   00 e0           ldi r16, 0x00   ; 0
    for(i = 0; i < 6; i++)
    {
        Print_Value_DEC("esp8266_cmd_flash_ptr[i].cmd_ptr:  ", i);
    aa26:   4a e0           ldi r20, 0x0A   ; 10
    aa28:   b8 01           movw    r22, r16
    aa2a:   86 ea           ldi r24, 0xA6   ; 166
    aa2c:   96 e0           ldi r25, 0x06   ; 6
    aa2e:   0e 94 64 14     call    0x28c8  ; 0x28c8 <Print_Value_General>
        DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
    aa32:   f6 01           movw    r30, r12
    aa34:   80 81           ld  r24, Z
    aa36:   91 81           ldd r25, Z+1    ; 0x01
    aa38:   0e 94 78 10     call    0x20f0  ; 0x20f0 <USART0_TX_Flash_String>
        DEBUGGER_UART_TX_String(enter_txt); 
    aa3c:   8f e9           ldi r24, 0x9F   ; 159
    aa3e:   94 e1           ldi r25, 0x14   ; 20
    aa40:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    for(i = 0; i < 6; i++)
    aa44:   0f 5f           subi    r16, 0xFF   ; 255
    aa46:   1f 4f           sbci    r17, 0xFF   ; 255
    aa48:   f4 e0           ldi r31, 0x04   ; 4
    aa4a:   cf 0e           add r12, r31
    aa4c:   d1 1c           adc r13, r1
    aa4e:   06 30           cpi r16, 0x06   ; 6
    aa50:   11 05           cpc r17, r1
    aa52:   49 f7           brne    .-46        ; 0xaa26 <MXA_Test+0x2d4>
    }
    DEBUGGER_UART_TX_String("For Loop End");
    aa54:   83 ed           ldi r24, 0xD3   ; 211
    aa56:   95 e0           ldi r25, 0x05   ; 5
    aa58:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String(enter_txt);
    aa5c:   8f e9           ldi r24, 0x9F   ; 159
    aa5e:   94 e1           ldi r25, 0x14   ; 20
    aa60:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>

    i = 0;
    DEBUGGER_UART_TX_String("Loop Start while(i < 3)");
    aabe:   85 e2           ldi r24, 0x25   ; 37
    aac0:   97 e0           ldi r25, 0x07   ; 7
    aac2:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String(enter_txt);
    aac6:   8f e9           ldi r24, 0x9F   ; 159
    aac8:   94 e1           ldi r25, 0x14   ; 20
    aaca:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    aace:   10 e0           ldi r17, 0x00   ; 0
    aad0:   00 e0           ldi r16, 0x00   ; 0
    while(i < 3)
    {
        Print_Value_DEC("esp8266_cmd_flash_ptr[i].cmd_ptr:  ", i);
    aad2:   4a e0           ldi r20, 0x0A   ; 10
    aad4:   b8 01           movw    r22, r16
    aad6:   86 ea           ldi r24, 0xA6   ; 166
    aad8:   96 e0           ldi r25, 0x06   ; 6
    aada:   0e 94 64 14     call    0x28c8  ; 0x28c8 <Print_Value_General>
        DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
    aade:   f7 01           movw    r30, r14
    aae0:   80 81           ld  r24, Z
    aae2:   91 81           ldd r25, Z+1    ; 0x01
    aae4:   0e 94 78 10     call    0x20f0  ; 0x20f0 <USART0_TX_Flash_String>
        DEBUGGER_UART_TX_String(enter_txt); 
    aae8:   8f e9           ldi r24, 0x9F   ; 159
    aaea:   94 e1           ldi r25, 0x14   ; 20
    aaec:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    while(i < 3)
    aaf0:   0f 5f           subi    r16, 0xFF   ; 255
    aaf2:   1f 4f           sbci    r17, 0xFF   ; 255
    aaf4:   f4 e0           ldi r31, 0x04   ; 4
    aaf6:   ef 0e           add r14, r31
    aaf8:   f1 1c           adc r15, r1
    aafa:   03 30           cpi r16, 0x03   ; 3
    aafc:   11 05           cpc r17, r1
    aafe:   49 f7           brne    .-46        ; 0xaad2 <MXA_Test+0x380>
        i++;
    }
    DEBUGGER_UART_TX_String("while Loop End");
    ab00:   86 e1           ldi r24, 0x16   ; 22
    ab02:   97 e0           ldi r25, 0x07   ; 7
    ab04:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String(enter_txt);
    ab08:   8f e9           ldi r24, 0x9F   ; 159
    ab0a:   94 e1           ldi r25, 0x14   ; 20
    ab0c:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    
    DEBUGGER_UART_TX_String("void MXA_Test(void) End");
    ab10:   8d e3           ldi r24, 0x3D   ; 61
    ab12:   97 e0           ldi r25, 0x07   ; 7
    ab14:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
    DEBUGGER_UART_TX_String(enter_txt);
    ab18:   8f e9           ldi r24, 0x9F   ; 159
    ab1a:   94 e1           ldi r25, 0x14   ; 20
    ab1c:   0e 94 50 10     call    0x20a0  ; 0x20a0 <USART0_TX_String>
}
    ab20:   6d 96           adiw    r28, 0x1d   ; 29
    ab22:   0f b6           in  r0, 0x3f    ; 63
    ab24:   f8 94           cli
    ab26:   de bf           out 0x3e, r29   ; 62
    ab28:   0f be           out 0x3f, r0    ; 63
    ab2a:   cd bf           out 0x3d, r28   ; 61
    ab2c:   df 91           pop r29
    ab2e:   cf 91           pop r28
    ab30:   1f 91           pop r17
    ab32:   0f 91           pop r16
    ab34:   ff 90           pop r15
    ab36:   ef 90           pop r14
    ab38:   df 90           pop r13
    ab3a:   cf 90           pop r12
    ab3c:   08 95           ret

So can anyone make heads or tails out of it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧伤慢歌2025-01-20 21:56:18

问题的解决方案在于,我正在使用指针......(Me Schoolbus - 指针......你知道)。

for(i = 0; i < 6; i++)
{
   Print_Value_DEC("esp8266_cmd_flash_ptr[i].cmd_ptr:  ", i);
   //DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
   DEBUGGER_UART_TXFS(pgm_read_word(&(esp8266_cmd_flash_ptr[i].cmd_ptr)));  // works
   DEBUGGER_UART_TX_String(enter_txt); 
}

因为

const td_esp8266_cmd_ptr esp8266_cmd_flash_ptr[6] PROGMEM = {};

包含指向字符串的指针,并且这些指针存储在Flash中,所以之前必须使用额外的pgm_read_word。

但话又说回来,如果这是在所有情况下都有效的代码(循环内和循环外),为什么“坏”代码在循环外工作?

The Solution to the problem lies in the fact, that I was using pointers... (Me Schoolbus - Pointer.... U know).

for(i = 0; i < 6; i++)
{
   Print_Value_DEC("esp8266_cmd_flash_ptr[i].cmd_ptr:  ", i);
   //DEBUGGER_UART_TXFS(esp8266_cmd_flash_ptr[i].cmd_ptr);
   DEBUGGER_UART_TXFS(pgm_read_word(&(esp8266_cmd_flash_ptr[i].cmd_ptr)));  // works
   DEBUGGER_UART_TX_String(enter_txt); 
}

Because

const td_esp8266_cmd_ptr esp8266_cmd_flash_ptr[6] PROGMEM = {};

contains pointers to the strings, and those pointers are stored in Flash, that is why an extra pgm_read_word has to be used before.

But then again, if this is the code that works in all cases,(in and outside of loops) why does the "bad" code work outside the loops?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文