Отговори на тема  [ 5 мнения ] 
PIC24HJ и C30 - запис на данни във FLASH на дадена страница? 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Май 10, 2007 3:49 pm
Мнения: 97
Мнение PIC24HJ и C30 - запис на данни във FLASH на дадена страница?
Здравейте,
мъча една платка с PIC24HJ128GP206, MPLAB 8.83, C30
проца няма eeprom, искам да записвам понякога данни в програмния флаш -
_write_flash16 функцията на С30
гледах примера от хелпа

unsigned int __attribute__((space(prog),aligned(_FLASH_PAGE*2))) dat1[_FLASH_PAGE];
_prog_addressT p ;
....
void main()
{
device_init() ;
_init_prog_address(p, dat1); // вече знам на кой адрес компилатора е сложил данните
_erase_flash(p); /* erase a page */
_write_flash16(p, source1); /* write first row with 16-bit data */ - съответно мога да пиша и чета там..(_memcpy_p2d16 )

Въпросът ми е:
По какъв начин мога да задам адреса на който да се запише масива dat1 в space(prog) , а не компилатора да си го задава автоматично ?

unsigned int __attribute__((space(prog),aligned(_FLASH_PAGE*2))) dat1[_FLASH_PAGE]; - мога ли да му задам фиксиран адрес някак си и
C30 да се съобрази с това ?


Сря Юли 29, 2015 5:21 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: PIC24HJ и C30 - запис на данни във FLASH на дадена стран
ето ти 2 примера

APP_INFO_t DefaultSettings
__attribute__
((
section("SEC_DEFAULT_EEPROM"),
space( psv ),
address( EEPROM_PAGE ) <-----------------------------
)) =
{
C_DEF_SIM_PIN,
C_DEF_APN_URL,
C_DEF_APN_USER,
C_DEF_APN_PASS,
C_DEF_SRV_URL,
C_DEF_SRV_PWR,
42.697626,
23.322284,
102.8333333333,
102.8333333333,
2,
0xFFFF,
0xFFFF,
BOOT_TYPE_DOWNLOAD
};
char eepromProtect[ EEPROM_PAGE_SIZE - sizeof( APP_INFO_t ) - CONFIG_SIZE ]
__attribute__
((
section("SEC_DEFAULT_EEPROM_PROTECT"),
space( psv ),
address( EEPROM_PAGE + sizeof( APP_INFO_t )), <-------------------------------
noload
));

////////////////////////////////////////////////////////////////////////////////////////////////////
APP_INFO_t IniSettings
__attribute__
((
section("SEC_INI"),
space( psv ),
address( INI_PAGE ),
noload
));

char IniProtect[ INI_PAGE_SIZE_BYTES - sizeof( APP_INFO_t ) ]
__attribute__
((
section("SEC_INI_PROTECT"),
space( psv ),
address( INI_PAGE + sizeof( APP_INFO_t )),
noload
));

или си дефинираш в линкер скрипта адрес/size на section("SEC_NAME"),

трябва да се съобразяваш с erase page address (при ефките erase е 1024, write 64, при HJ май беше дабъл - виж PDF)
ако данните са ти по малко от erase size - дефинирай масив да започва от края на твоите данни до края на пейджа, за да не слага компилатора сорс код в erase page

_________________
main[-1u]={1};


Сря Юли 29, 2015 10:20 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Май 10, 2007 3:49 pm
Мнения: 97
Мнение Re: PIC24HJ и C30 - запис на данни във FLASH на дадена стран
така стана :
unsigned int __attribute__((space(prog), address (0xA400) , aligned(_FLASH_PAGE*2))) dat2[_FLASH_PAGE];


Чет Юли 30, 2015 2:00 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: PIC24HJ и C30 - запис на данни във FLASH на дадена стран
Ako сложиш space( psv ) ще имаш директен достъп до променливи от тази област ( 32к виж psv/eds PDF)
http://ww1.microchip.com/downloads/en/D ... 39732a.pdf

_________________
main[-1u]={1};


Чет Юли 30, 2015 10:14 am
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Май 10, 2007 3:49 pm
Мнения: 97
Мнение Re: PIC24HJ и C30 - запис на данни във FLASH на дадена стран
да, така е, но обръщането към дадена променлива ще взима две инструкции, а пък и ми е по трудно да го напиша...
RAM има много - 8kB ....
при буутване след като си инициализира всичко, ще си зареди и константите в масив в рамта.
като се наложи да ги ъпдейтвам през uart - в същия масив в рамта и хайде запис във флаша
ще го напиша аматиорската , са няма да се правя на скръндза за 2*64 ... 4*64 байта :)


Чет Юли 30, 2015 11:32 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 5 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 8 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни