Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Прошу помощи по CodeVisionAVR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
altlogic
Здравствуйте!

Пишу в CodeVisionAVR. Есть тип данных для хранения содержимого экрана
Код
typedef unsigned char displ_t[4][16];

Есть константа размещённая во флеше
Код
flash displ_t MT_START={"Режим:","Температура","",""};

Есть переменная размещённая в SRAM
Код
displ_t displ_buf;

Копирую массив из RAM во FLASH тупо:
Код
for(y=0;y<4;y++)
{
   for(x=0;x<16;x++)
      statetext[y][x] = MT_START[y][x];
}

А вот написать функцию, копирующую массив из одной памяти в другую не могу. Тот же код выделяю в отдельную функцию. Но не знаю как передать в неё параметры. Объявление функции
Код
void flash2ram(displ_t flash_buf, displ_t  ram_buf)

является неверным, так как она не принимает указатель на структуру во флеше, а указать модификатор хранения flash в аргументах функции не разрешает компилятор. Как произвести копирование?
altlogic
Решил проблему. Просто под рукой не было хорошего справочника по Си. Шилд в справочнике по Си++ очень скудно освещает работу с массивами. При передаче двумерного массива через указатель, с ним нужно работать как с одномерным. Верный код следующий:
Код
void flash2ram(flash char *flash_buf, char  *ram_buf)
{
    char i;
    for(i=0;i<16*4;i++)
    {            
         ram_buf[i] = flash_buf[i];
    }
}
WHALE
А почему библиотечными фукциями не пользуетесь?Зачем изобретать велосипед?
char *strcpyf(char *dest, char flash *src)
copies the string src, located in FLASH, to the string dest, located in SRAM.
Returns a pointer to the string dest.
не забудьте проинклюдить string.h.
altlogic
Цитата(WHALE @ May 9 2008, 16:36) *
А почему библиотечными фукциями не пользуетесь?Зачем изобретать велосипед?
char *strcpyf(char *dest, char flash *src)
copies the string src, located in FLASH, to the string dest, located in SRAM.
Returns a pointer to the string dest.
не забудьте проинклюдить string.h.

У меня двухмерный массив. Вызывать функцию четыре раза? Некрасиво. Как я уже отметил, изначально у меня была проблема с передачей в качестве параметра двухмерного массива.
WHALE
ну в цикле можно-же?имхо,всегда лучше пользоваться библиотечными функциями-глюков меньше.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.