Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

PIC24HJ и C30 - запис на данни във FLASH на дадена страница?
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=13955
Страница 1 от 1

Автор:  User [ Сря Юли 29, 2015 5:21 pm ]
Заглавие:  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 да се съобрази с това ?

Автор:  TheWizard [ Сря Юли 29, 2015 10:20 pm ]
Заглавие:  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

Автор:  User [ Чет Юли 30, 2015 2:00 am ]
Заглавие:  Re: PIC24HJ и C30 - запис на данни във FLASH на дадена стран

така стана :
unsigned int __attribute__((space(prog), address (0xA400) , aligned(_FLASH_PAGE*2))) dat2[_FLASH_PAGE];

Автор:  TheWizard [ Чет Юли 30, 2015 10:14 am ]
Заглавие:  Re: PIC24HJ и C30 - запис на данни във FLASH на дадена стран

Ako сложиш space( psv ) ще имаш директен достъп до променливи от тази област ( 32к виж psv/eds PDF)
http://ww1.microchip.com/downloads/en/D ... 39732a.pdf

Автор:  User [ Чет Юли 30, 2015 11:32 am ]
Заглавие:  Re: PIC24HJ и C30 - запис на данни във FLASH на дадена стран

да, така е, но обръщането към дадена променлива ще взима две инструкции, а пък и ми е по трудно да го напиша...
RAM има много - 8kB ....
при буутване след като си инициализира всичко, ще си зареди и константите в масив в рамта.
като се наложи да ги ъпдейтвам през uart - в същия масив в рамта и хайде запис във флаша
ще го напиша аматиорската , са няма да се правя на скръндза за 2*64 ... 4*64 байта :)

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/