Jump to content

    
Sign in to follow this  
jenya7

Строка - хранить или нет

Recommended Posts

Я могу сохранить строку
 

static const char* const ok = "Data Save OK\r";

static const char* const err = "Data Save ERROR\r";

и потом использовать в функции.

или создать строку динамически в функции

uint32_t COM_Save(uint32_t argc, char** args)
{
    int status;
    
    char ok[] = "Data Save OK\r";
    char err[] = "Data Save ERROR\r";
    
    status = FLASH_WriteSerializedData(FLASH_PARAM_PAGE);
     
    if (status == 0)  
        SYS_SendData(ok);
    else
       SYS_SendData(err);
    
    return MSG_OK;
}

что лучше? прогрузить стак или флэш?

Share this post


Link to post
Share on other sites
2 minutes ago, aaarrr said:

Странный вопрос. А в стек строка откуда загрузится?

во втором случае она будет создана динамически на стеке я думаю. и при выходе из функции удалиться. как любая локальная переменная.

Share this post


Link to post
Share on other sites

Думать надо регулярно.

Данные в переменную на стеке кто будет загружать и откуда ?

P.S. Из приведенного фрагмента понятно, что думать надо больше.

Share this post


Link to post
Share on other sites
12 minutes ago, jenya7 said:

что лучше? прогрузить стак или флэш?

Странный вопрос. Флеш вы и так "прогрузите".

5 minutes ago, jenya7 said:

и при выходе из функции удалиться

Скажем так, указатель стэка будет прирощен на размер вашей строки, а данные ещё какое-то время побудут там (озу), пока эта область памяти не понадобится другой задаче.

Share this post


Link to post
Share on other sites
24 minutes ago, haker_fox said:

Странный вопрос. Флеш вы и так "прогрузите".

Скажем так, указатель стэка будет прирощен на размер вашей строки, а данные ещё какое-то время побудут там (озу), пока эта область памяти не понадобится другой задаче.

в листинге вижу

849              char ok[] = "Data Save OK\r";
   \        0xC   0x4668             MOV      R0,SP
   \        0xE   0x....             LDR.N    R1,??DataTable16_50
   \       0x10   0x2210             MOVS     R2,#+16
   \       0x12   0x....'....        BL       __aeabi_memcpy4

но я не вижу чтоб DataTable16_50 где то освобождался.

Share this post


Link to post
Share on other sites

Женя, подумайте о том, где хранятся строки, пока контроллер отключен от питания, и о том, откуда они загружаются в ОЗУ...

Share this post


Link to post
Share on other sites
8 minutes ago, demiurg_spb said:

Женя, подумайте о том, где хранятся строки, пока контроллер отключен от питания, и о том, откуда они загружаются в ОЗУ...

Подумал :). Рабочий регистр не может хранить строку, он может получить только указатель на строку.

Share this post


Link to post
Share on other sites
16 minutes ago, jenya7 said:

то есть мы приходим к первому варианту?

Внезапно, да! То есть второй вариант подобен первому, но с копированием строки из флеш в ОЗУ и повышенным расходом стека.

 

2 minutes ago, jenya7 said:

Рабочий регистр не может хранить строку, он может получить только указатель на строку.

Ой! Зря я сорвал покровы и открыл тайное знание в предыдущем сообщении.

Share this post


Link to post
Share on other sites
10 hours ago, jenya7 said:

или создать строку динамически в функции

... или создать статическую константную строку внутри функции и использовать её там. Ограничив тем самым область видимости строки телом функции и не расходуя впустую стек.

uint32_t COM_Save(uint32_t argc, char** args)
{
    int status;
    
    static const char ok[] = "Data Save OK\r";
    static const char err[] = "Data Save ERROR\r";
    
    status = FLASH_WriteSerializedData(FLASH_PARAM_PAGE);
     
    if (status == 0)  
        SYS_SendData(ok);
    else
       SYS_SendData(err);
    
    return MSG_OK;
}

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this