реклама на сайте
подробности

 
 
> Глючит ли этот код?, Или глючу я?
DMD
сообщение Apr 29 2008, 19:56
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 120
Регистрация: 19-02-08
Пользователь №: 35 166



Всем привет
Компилятор 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]);        
                //...
             }

Это вообще правильный подход? Почему мне пришлось и указатель и данные размещать во флеше? Иначе у меня выводился мусор... А как сделать правильно?
И ещё: у меня подозрение, что функция копирования из строки в строку в такой конфигурации не работает (как у меня). Проверить не могу - ничего нет. Или я неправильно думаю?
Спасибо.


--------------------
Все будет хорошо! Я проверял!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 5)
bzx
сообщение Apr 29 2008, 22:40
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 482
Регистрация: 5-07-05
Из: Санкт-Петербург
Пользователь №: 6 528



Например, так
Код
#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


--------------------
Для связи email: info собака qbit.su
Go to the top of the page
 
+Quote Post
DMD
сообщение Apr 30 2008, 04:22
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 120
Регистрация: 19-02-08
Пользователь №: 35 166



Ну а мой код правилен или нет? Спасибо за ответы, я просто себя ещё проверяю...


--------------------
Все будет хорошо! Я проверял!
Go to the top of the page
 
+Quote Post
vet
сообщение Apr 30 2008, 04:40
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



у меня подозрение, что копирование строковой константы в ОЗУ в данном случае - бесполезная трата памяти.


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
DMD
сообщение Apr 30 2008, 05:01
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 120
Регистрация: 19-02-08
Пользователь №: 35 166



То есть можно использовать флешевые указатели прямо так, без копирования? А чем они отличаются от обычных? как с ними обращаться? И что они вообще такое? Я просто пока ещё плохо представляю, простите...


--------------------
Все будет хорошо! Я проверял!
Go to the top of the page
 
+Quote Post
vet
сообщение Apr 30 2008, 05:06
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



да ничем абсолютно, кроме того, что указывают в другое адресное пространство. flash char *p; и вперёд.
указатели на eeprom описываются таким же образом ) см. хелп.
в string.h описаны версии библиотечных функций (с буквой f в конце) для работы с флэшевыми строками.


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 11:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01374 секунд с 7
ELECTRONIX ©2004-2016