Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум


 
Опции темы

IAR STM8 указатель на массив во FLASH

Непрочитано 16.05.2015, 15:12  
picavr
Почётный гражданин KAZUS.RUN
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,815
Сказал спасибо: 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.RUN
 
Регистрация: 05.04.2009
Сообщений: 973
Сказал спасибо: 35
Сказали Спасибо 154 раз(а) в 133 сообщении(ях)
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.RUN
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,815
Сказал спасибо: 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.RUN
 
Регистрация: 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.RUN
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,815
Сказал спасибо: 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.RUN
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: IAR STM8 указатель на массив во FLASH

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

PHP код:
const unsigned char Text_1[ ] = "1234567";
void ProgText( unsigned char* t )
{
  unsigned char sym;
  while( *t )
  {
    sym = *t++;
  }
}
///////++++++++++++
int main()
{
  ProgText( (unsigned char *)Text_1 );
  ProgText( Text_1) ;
} 
Почувствуйте разницу !!!
И посмотрите что такое приведение типов.
И будет все просто как мычание
Boba_spb вне форума  
Непрочитано 19.05.2015, 11:40  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: IAR STM8 указатель на массив во FLASH

У человека каша в голове.
Easyrider83 вне форума  
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FAQ по STM8 faru STM8 1680 22.11.2024 18:14
Подниму тему 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, время: 01:42.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.