|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 7:26 pm
|
Страница 1 от 1
|
[ 5 мнения ] |
|
PIC24HJ и C30 - запис на данни във FLASH на дадена страница?
| Автор |
Съобщение |
|
User
Ранг: Минаващ
Регистриран на: Чет Май 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 |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 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 |
|
 |
|
User
Ранг: Минаващ
Регистриран на: Чет Май 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 |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 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 |
|
 |
|
User
Ранг: Минаващ
Регистриран на: Чет Май 10, 2007 3:49 pm Мнения: 97
|
 Re: PIC24HJ и C30 - запис на данни във FLASH на дадена стран
да, така е, но обръщането към дадена променлива ще взима две инструкции, а пък и ми е по трудно да го напиша... RAM има много - 8kB .... при буутване след като си инициализира всичко, ще си зареди и константите в масив в рамта. като се наложи да ги ъпдейтвам през uart - в същия масив в рамта и хайде запис във флаша ще го напиша аматиорската , са няма да се правя на скръндза за 2*64 ... 4*64 байта 
|
| Чет Юли 30, 2015 11:32 am |
|
|
|
Страница 1 от 1
|
[ 5 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|