03.06.2014, 16:11
|
|
Гражданин KAZUS.RU
Регистрация: 06.04.2010
Адрес: Санкт-Петербург - Волжский
Сообщений: 529
Сказал спасибо: 74
Сказали Спасибо 56 раз(а) в 45 сообщении(ях)
|
Keil v4.7: Где размещаются данные описанные const ?
Интересует под Keil где описывается правило размещения данных или массива данных обьявленных как const. Размещаются ли они в ОЗУ или в памяти программ ?
Например:
Код:
|
const u8 CodeKey[12]={1,4,7,11,2,5,8,10,3,6,9,12}; |
|
|
|
|
03.06.2014, 16:36
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Keil v4.7: Где размещаются данные описанные const ?
А какой смысл хранить константные данные в ОЗУ?
|
|
|
|
03.06.2014, 17:36
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.03.2007
Сообщений: 1,363
Сказал спасибо: 85
Сказали Спасибо 621 раз(а) в 376 сообщении(ях)
|
Re: Keil v4.7: Где размещаются данные описанные const ?
Разместится в ОЗУ.
Чтобы разместилось во флэше, надо обозначить секцию, типа этого:
Код:
|
#pragma arm section rodata = "mysectname"
const u8 CodeKey[12]={1,4,7,11,2,5,8,10,3,6,9,12};
#pragma arm section |
Ну и, при желании, в файле sct можно задать адрес и размер секции "mysectname", но это не обязательно.
|
|
|
|
03.06.2014, 18:16
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Keil v4.7: Где размещаются данные описанные const ?
Как-то я спокойно массивы данных больше размера оперативы во флеши размещал и ничего.
|
|
|
|
03.06.2014, 18:17
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Keil v4.7: Где размещаются данные описанные const ?
pambaru, чушь не пиши , с const будет в флеше .
Код:
|
const uint8_t seg_table[]={
CH_0,CH_1,CH_2,CH_3,CH_4,CH_5,CH_6, CH_7, CH_8, CH_9,
CH_A, CH_B, CH_C, CH_D, CH_E, CH_F, CH_Sp,
CH_A,
CH_B,
CH_C,
.... |
листинг
Код:
|
AREA ||.constdata||, DATA, READONLY, ALIGN=0
seg_table
000000 fa0ab69e DCB 0xfa,0x0a,0xb6,0x9e
000004 4edcfc8a DCB 0x4e,0xdc,0xfc,0x8a
000008 fedeee7c DCB 0xfe,0xde,0xee,0x7c
.... |
map
Код:
|
__semihosting_library_function 0x08000faf Thumb Code 0 indicate_semi.o(.text)
seg_table 0x0800100c Data 80 tic33.o(.constdata)
Region$$Table$$Base 0x0800105c Number 0 anon$$obj.o(Region$$Table) |
__________________
Осторожно , злой кот
|
|
|
|
04.06.2014, 09:33
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.03.2007
Сообщений: 1,363
Сказал спасибо: 85
Сказали Спасибо 621 раз(а) в 376 сообщении(ях)
|
Re: Keil v4.7: Где размещаются данные описанные const ?
Сообщение от dosikus
|
pambaru, чушь не пиши , с const будет в флеше .
|
Собрал тестовый проект, точно идет во флэш.
Но у меня отложилось в памяти, что в каком-то из проектов лежало в ОЗУ. Я еще удивился, увидев это в map файле. Потом я явно указал секцию и прописал ее в sct файле.
Может уже чего запамятовал... Спишем на наступающий старческий маразм
|
|
|
|
04.06.2014, 11:58
|
|
Гражданин KAZUS.RU
Регистрация: 06.04.2010
Адрес: Санкт-Петербург - Волжский
Сообщений: 529
Сказал спасибо: 74
Сказали Спасибо 56 раз(а) в 45 сообщении(ях)
|
Re: Keil v4.7: Где размещаются данные описанные const ?
Да, действительно массив адресуется из флеш-памяти.
Попробывал 3 варианта:
- массив без const
- массив c const
- баз массива.
Меняется только размер кода , RO , RW и ZI - остаются прежними.
|
|
|
|
04.06.2014, 12:39
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Keil v4.7: Где размещаются данные описанные const ?
MaxiMuz79, Да ну... Так уж без const и нет изменений ?
Код:
|
//const uint8_t seg_table[]={
uint8_t seg_table[]={
CH_0,CH_1,CH_2,CH_3,CH_4,CH_5,CH_6, CH_7, CH_8, CH_9,// num table
CH_A, CH_B, CH_C, CH_D, CH_E, CH_F, CH_Sp,
CH_A,
CH_B,
CH_C,
CH_D,
... |
листинг
Код:
|
AREA ||.data||, DATA, ALIGN=1
seg_table
000000 fa0ab69e DCB 0xfa,0x0a,0xb6,0x9e
000004 4edcfc8a DCB 0x4e,0xdc,0xfc,0x8a
000008 fedeee7c DCB 0xfe,0xde,0xee,0x7c
00000c f03ef4e4 DCB 0xf0,0x3e,0xf4,0xe4
000010 00ee7cf0 DCB 0x00,0xee,0x7c,0xf0
000014 3ef4e400 DCB 0x3e,0xf4,0xe4,0x00
000018 6e0a003a DCB 0x6e,0x0a,0x00,0x3a
... |
map
Код:
|
ulCount 0x20000058 Data 4 key.o(.data)
seg_table 0x20000062 Data 80 tic33.o(.data)
Tic55_buf 0x200000b2 Data 18 tic33.o(.data)
... |
Маcсив в флэш - Program Size: Code=3824 RO-data=396 RW-data=120 ZI-data=1632
Массив в RAM - Program Size: Code=3824 RO-data=316 RW-data=200 ZI-data=1632
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 04.06.2014 в 12:46.
|
|
|
|
04.06.2014, 13:38
|
|
Гражданин KAZUS.RU
Регистрация: 06.04.2010
Адрес: Санкт-Петербург - Волжский
Сообщений: 529
Сказал спасибо: 74
Сказали Спасибо 56 раз(а) в 45 сообщении(ях)
|
Re: Keil v4.7: Где размещаются данные описанные const ?
Сообщение от dosikus
|
MaxiMuz79, Да ну... Так уж без const и нет изменений ?
|
В моем случае, когда коментирую const
Код:
|
//const
u8 CodeKey[12]={1,4,7,11,2,5,8,10,3,6,9,12}; |
изменений нет, размеры остаются прежними:
Program Size: Code=4372 RO-data=320 RW-data=72 ZI-data=1776
|
|
|
|
04.06.2014, 14:13
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.03.2007
Сообщений: 1,363
Сказал спасибо: 85
Сказали Спасибо 621 раз(а) в 376 сообщении(ях)
|
Re: Keil v4.7: Где размещаются данные описанные const ?
а тип u8 как объявлен?
Если объявить, к примеру:
typedef unsigned char byte;
const byte CodeKey[]={1,4,7,11,2,5,8,10,3,6,9,12};
то размещает в ПЗУ, а если:
typedef volatile unsigned char byte;
const byte CodeKey[]={1,4,7,11,2,5,8,10,3,6,9,12};
то в ОЗУ.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:24.
|
|