| Микроконтролери и електроника 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/ |
|