Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 16.05.2015, 15:12  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию IAR STM8 указатель на массив во FLASH

Кто подскажет, моно ли применять указатель на массив во FLASH?

У STM8 непрерывное адресное пространство , и я надеялся что массивы во FLASH и RAM равноправны.

Код:
const unsigned char string_flash[]={"бла бла бла"}; //массив FLASH
unsigned char *pointer_string; //указатель 
//---
main (void){
 pointer_string = string_flash; // ругается компилятор

a value of type "unsigned char const *" cannot be assigned to an entity of type "unsigned char" 

}
Я пока выкрутился так - копирую массив FLASH в массив RAM, и на него указатель. Но это расход RAM и время на копирование.
Код:
const unsigned char string_flash[]={"бла бла бла"}; //массив FLASH
unsigned char string_ram[11];                                    //массив RAM
unsigned char *pointer_string;                                   //указатель 
//---
main (void){
 memmove(string_flash,string_ram, 11 );//11- длина массива.
 pointer_string = string_ram; // указатель на массив RAM
}
Вот такой вариант тоже работает, но нужно указывать адрес массива, и если массивов много, то не удобно рассчитывать адреса.
Код:
#pragma location=0x9000 //начальный адрес FLASH
unsigned string_flash[] = {"бла бла бла"};
unsigned char *pointer_string;                                   //указатель 

main (void){
 pointer_string = string_flash; // указатель на массив RAM
}
Но хотелось бы от такого геммороя избавится. Чего посоветуете?
Реклама:
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов

Последний раз редактировалось picavr; 16.05.2015 в 15:23.
picavr вне форума  
Непрочитано 16.05.2015, 15:44  
Yurkin2014
Заблокирован
 
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
Yurkin2014 на пути к лучшему
По умолчанию Re: IAR STM8 указатель на массив во FLASH

А если в первом примере объявить указатель на константу, типа так:
Цитата:
const unsigned char *pointer_string; //указатель
Yurkin2014 вне форума  
Непрочитано 16.05.2015, 17:10  
oleg110592
Гражданин KAZUS.RU
 
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
oleg110592 на пути к лучшему
По умолчанию Re: IAR STM8 указатель на массив во FLASH

может пригодится - в авр иаре работало, в стм иаре не ругается:
Код:
#define LCDPutsFlash(s) {static const unsigned char str[] = s; LCD_Putsf(str);}

void LCD_Data(unsigned char data)
{ 
  //......  
  data++;
  //......
}

void LCD_Putsf(unsigned char const *str) 
{ 
    unsigned char temp; 
    while (temp = *str++) LCD_Data(temp); 
}

int main( void )
{
    LCDPutsFlash("bla-bla");
    return 0;
}
oleg110592 вне форума  
Непрочитано 17.05.2015, 07:32  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: IAR STM8 указатель на массив во FLASH

Сообщение от Yurkin2014 Посмотреть сообщение
указатель на константу, типа так:
так получилось, спасибо. Но не совсем понятно вот что: я предполагал что всё с квалификатором CONST распологается во FLASH. А почему тогда указатель такого типа расположился в RAM ?.
Потому что УКАЗАТЕЛЬ? А я то думал указатель тоже будет во FLASH и изменять его будет сложно )))

В общем в результате, обьединил вывод стрингов через указатели из FLASH и RAM в одну функцию, до того их было две )))

Сообщение от oleg110592 Посмотреть сообщение
в стм иаре не ругается:
Примерно так и написано, но мне удобнее обьявить массивы текстов во FLASH, а потом выводить их по указателю, так более гибче. А не писать текст в вызове функции.

Код:
const unsigned char string1[4]={text1};
const unsigned char string2[4]={text2};
const unsigned char string3[4]={text3};
const unsigned char *pointer_string;

void lcd_line(const unsigned char *string){
}

main (void){
 pointer_string=string1;
 lcd_line(pointer_string);
 pointer_string=string2;
 lcd_line(pointer_string);
 pointer_string=string3;
 lcd_line(pointer_string);
}
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов

Последний раз редактировалось picavr; 17.05.2015 в 07:48.
picavr вне форума  
Непрочитано 17.05.2015, 10:18  
Hives
Гражданин KAZUS.RU
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: IAR STM8 указатель на массив во FLASH

Во первых, учи матчасть.
Во вторых, учи матчасть.
В третьих -ну ты понял.

В итоге родишь что-то типа:
const char *SomeString = "bla bla bla"; // указатель-константа во флеше на строку также расположенную во флеше
далее пихай этот указатель куда хочешь

PS массив строк объявляется аналогично
Hives вне форума  
Непрочитано 19.05.2015, 07:01  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: IAR STM8 указатель на массив во FLASH

Дык я уже всё сделал так как я и хотел... ))))).

Сообщение от Hives Посмотреть сообщение
указатель-константа во флеше на строку также расположенную во флеше
А я не хочу что бы Указатель располагался во FLASH.
Тогда для вызова функции указатель во FLASH - тоже самое что и строка во FLASH.
Для вывода новой строки в вызове придётся писать новый Указатель.
Т.е. для вывода РАЗНЫХ строк - написать РАЗНЫЕ ВЫЗОВЫ.

Я хотел указатель настраивать на РАЗНЫЕ строки, а в вызове функции ничего не менять.
Только перенастраивать указатель на разные строки.

Но уже всё сделано ... )))
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов
picavr вне форума  
Непрочитано 19.05.2015, 09:12  
Hives
Гражданин KAZUS.RU
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: IAR STM8 указатель на массив во FLASH

8/
я надеюсь вы не на ядерной станции работаете...
Hives вне форума  
Непрочитано 19.05.2015, 11:27  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: IAR STM8 указатель на массив во FLASH

PHP код:
const unsigned char Text_1[ ] = "1234567";
void ProgTextunsigned char)
{
  
unsigned char sym;
  while( *
)
  {
    
sym = *t++;
  }
}
///////++++++++++++
int main()
{
  
ProgText( (unsigned char *)Text_1 );
  
ProgTextText_1) ;

Почувствуйте разницу !!!
И посмотрите что такое приведение типов.
И будет все просто как мычание
Boba_spb вне форума  
Непрочитано 19.05.2015, 11:40  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: IAR STM8 указатель на массив во FLASH

У человека каша в голове.
Easyrider83 вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FAQ по STM8 faru STM8 1675 22.11.2023 19:42
Подниму тему WinAVR vs IAR oleg110592 Микроконтроллеры, АЦП, память и т.д 5 24.10.2015 14:06
Не могу вернуть указатель из функции giran Песочница (вопросы новичков) 120 01.11.2014 16:30
Символьный ЖКИ заглючил kvark85 Микроконтроллеры, АЦП, память и т.д 18 15.02.2011 17:28
Программирование NOR FLASH ST_Senya Микроконтроллеры, АЦП, память и т.д 1 01.10.2010 22:18


Часовой пояс GMT +4, время: 10:20.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot