Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Глючит ли этот код?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
DMD
Всем привет
Компилятор CodeVision 1.28, платформа ATMega8535. Хочу в программе создать массив строк из флеша (строки хранятся во флеше). У меня получилось только так сделать почему-то, иначе мусор выдавался:
Код
#define MAX_NOTIF 4

flash byte * flash Notif[MAX_NOTIF] = {"NOTIF1",  "NOTIF2", "NOTIF3", "NOTIF4"};

Потом по коду я это все использую:
Код
byte phone[15];
for (i=0; i < MAX_NOTIF; i++)
    {                                                        
        strcpyf(phone, Notif[i]);        
                //...
             }

Это вообще правильный подход? Почему мне пришлось и указатель и данные размещать во флеше? Иначе у меня выводился мусор... А как сделать правильно?
И ещё: у меня подозрение, что функция копирования из строки в строку в такой конфигурации не работает (как у меня). Проверить не могу - ничего нет. Или я неправильно думаю?
Спасибо.
bzx
Например, так
Код
#define byte unsigned char
#define MAX_NOTIF 4
#define MAX_SIZE_NOTIF 6+1

const byte Notif2[MAX_NOTIF][MAX_SIZE_NOTIF] = {"NOTIF1",  "NOTIF2", "NOTIF3", "NOTIF4"};

byte test_buf[10];
byte i;

void main(void) {

  for(;;) {
   for (i=0; i < MAX_NOTIF; i++) {
      sprintf(test_buf, "%s", (char*)&Notif2[i][0]);
   }
  }
}

Так же будет работать и
Код
sprintf(test_buf, "%s", (char*)Notif[i]);

аналогично и с strcpy
DMD
Ну а мой код правилен или нет? Спасибо за ответы, я просто себя ещё проверяю...
vet
у меня подозрение, что копирование строковой константы в ОЗУ в данном случае - бесполезная трата памяти.
DMD
То есть можно использовать флешевые указатели прямо так, без копирования? А чем они отличаются от обычных? как с ними обращаться? И что они вообще такое? Я просто пока ещё плохо представляю, простите...
vet
да ничем абсолютно, кроме того, что указывают в другое адресное пространство. flash char *p; и вперёд.
указатели на eeprom описываются таким же образом ) см. хелп.
в string.h описаны версии библиотечных функций (с буквой f в конце) для работы с флэшевыми строками.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.