Самоуничтожение МК. Как сделать?

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Самоуничтожение МК. Как сделать?

Сообщение Аlex »

AR_AROV писал(а):а реальный пример на С/С++ никто и не показал (((
Интересно, а как Вы тогда смогли вообще программу написать, если не знаете как по счётчику в еепроме её зациклить ? :shock:

Что бы зарабатывать на подобном, нужно иметь представление о таких элементарных вещах. Не в обиду, но заказчик, видимо, не зря вам не доверяет...
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Re: Самоуничтожение МК. Как сделать?

Сообщение BCluster »

Интересно, какой пример вы хотите получить? Гдето мелькало сообщение что счетчик там вами уже реализован, что еще нужно?
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: Самоуничтожение МК. Как сделать?

Сообщение md5sum »

:)) Наверное подробный... что-б copy/paste в проект и к заказчику за баблом... :kill:
— Не говорите мне что делать и я не скажу куда Вам идти...
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Re: Самоуничтожение МК. Как сделать?

Сообщение BCluster »

Или мне мерещится, или автор говорил что счетчик он уже реализовал. Нипатятна господа
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

Re: Самоуничтожение МК. Как сделать?

Сообщение O-LED »

дел
Последний раз редактировалось O-LED Ср авг 08, 2012 00:10:24, всего редактировалось 1 раз.
KIT
AR_AROV
Открыл глаза
Сообщения: 59
Зарегистрирован: Сб янв 14, 2012 11:05:46

Re: Самоуничтожение МК. Как сделать?

Сообщение AR_AROV »

Людиии, человекиии!!! Я давно сделал счетчик!!!
Последний раз редактировалось AR_AROV Вт авг 07, 2012 20:45:39, всего редактировалось 1 раз.
AR_AROV
Открыл глаза
Сообщения: 59
Зарегистрирован: Сб янв 14, 2012 11:05:46

Re: Самоуничтожение МК. Как сделать?

Сообщение AR_AROV »

Аlex писал(а):
AR_AROV писал(а):а реальный пример на С/С++ никто и не показал (((
Интересно, а как Вы тогда смогли вообще программу написать, если не знаете как по счётчику в еепроме её зациклить ? :shock:

Что бы зарабатывать на подобном, нужно иметь представление о таких элементарных вещах. Не в обиду, но заказчик, видимо, не зря вам не доверяет...


Если прочтете написанное мною ранее то непременно увидите в одном из моих постов, что счетчик реализован, более того он опробован в действии и работает как надо.
AR_AROV
Открыл глаза
Сообщения: 59
Зарегистрирован: Сб янв 14, 2012 11:05:46

Re: Самоуничтожение МК. Как сделать?

Сообщение AR_AROV »

Я не гуру в С/С++, но и не тупая пробка, согласен языка, пока не знаю на должном уровне, но программы пишу на других и с логикой все порядке.

Будьте благоразумны и немного терпимее к новичкам, пожалуйста.

Мне интересна реализация SPM на С/С++. Вроде понятно оно устроено, но что то не выходит, путаюсь...
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Самоуничтожение МК. Как сделать?

Сообщение Аlex »

AR_AROV писал(а):Людиии, человекиии!!! Я давно сделал счетчик!!!
Так Вам N-ное кол-во раз уже сказали - "Этого достаточно !". Не будет никто платить тонны баксов на разлочку Вашего залоченого МК с программой, стоимость которой максимум 100$ вместе со всеми исходниками.
Заказчик заплатил - пришли и махнули МК на нормальный, и всё.
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: Самоуничтожение МК. Как сделать?

Сообщение md5sum »

Все можно найти... было бы желание...
AVR106: C functions for reading and writing to Flash memory on tinyAVR and megaAVR devices
AVR109: Using Self Programming on tinyAVR and megaAVR devices

Эти app.notes можно найти на сайте атмела: отдельно описание и отдельно примеры. Регистрация не требуется.
8)
— Не говорите мне что делать и я не скажу куда Вам идти...
AR_AROV
Открыл глаза
Сообщения: 59
Зарегистрирован: Сб янв 14, 2012 11:05:46

Re: Самоуничтожение МК. Как сделать?

Сообщение AR_AROV »

Аlex писал(а):
AR_AROV писал(а):Людиии, человекиии!!! Я давно сделал счетчик!!!
Так Вам N-ное кол-во раз уже сказали - "Этого достаточно !". Не будет никто платить тонны баксов на разлочку Вашего залоченого МК с программой, стоимость которой максимум 100$ вместе со всеми исходниками.
Заказчик заплатил - пришли и махнули МК на нормальный, и всё.


Я понял что достаточно... для себя хочу, знание - сила 8)
eufs
Опытный кот
Сообщения: 772
Зарегистрирован: Вс апр 10, 2011 02:24:06
Откуда: г.Северодонецк

Re: Самоуничтожение МК. Как сделать?

Сообщение eufs »

AR_AROV писал(а):...
Мне интересна реализация SPM на С/С++. Вроде понятно оно устроено, но что то не выходит, путаюсь...

А с ассемблерными вставками в Си тоже путаетесь?
C0FFEE=‭12648430‬
AR_AROV
Открыл глаза
Сообщения: 59
Зарегистрирован: Сб янв 14, 2012 11:05:46

Re: Самоуничтожение МК. Как сделать?

Сообщение AR_AROV »

eufs писал(а):
AR_AROV писал(а):...
Мне интересна реализация SPM на С/С++. Вроде понятно оно устроено, но что то не выходит, путаюсь...

А с ассемблерными вставками в Си тоже путаетесь?

не путаюсь, просто асм мне тяжело читать, а в С/С++ как бы наглядно видно, что, куда, зачем и как входит/выходит
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: Самоуничтожение МК. Как сделать?

Сообщение clawham »

ойёй....вот как-раз то в загрузчиках-то лучше писать на асме ибо именно там и видно что куда как и зачем :)
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
AR_AROV
Открыл глаза
Сообщения: 59
Зарегистрирован: Сб янв 14, 2012 11:05:46

Re: Самоуничтожение МК. Как сделать?

Сообщение AR_AROV »

да блин, столько всего написали, а мою просьбу никто в упор не видит :?
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: Самоуничтожение МК. Как сделать?

Сообщение clawham »

http://www.atmel.com/Images/doc2575.pdf

http://www.atmel.com/Images/AVR106.zip

Код: Выделить всё

    WriteFlashPage(0x200, testBuffer1);     // Writes testbuffer1 to Flash page 2
                                            // Function returns TRUE
    ReadFlashPage(0x200, testBuffer2);      // Reads back Flash page 2 to TestBuffer2
                                            // Function returns TRUE
    WriteFlashByte(0x204, 0x38);            // Writes 0x38 to byte address 0x204
                                            // Same as byte 4 on page 2
                                            // Returns TRUE
    testChar = ReadFlashByte(0x204);        // Reads back value from address 0x204



Код: Выделить всё

/*!
* The function writes byte data to Flash address flashAddr. Returns FALSE if
* input address is not valid Flash byte address for writing, else TRUE.
**/
unsigned char WriteFlashByte(MyAddressType flashAddr, unsigned char data){
  MyAddressType  pageAdr;
  unsigned char eepromInterruptSettings;
  if( AddressCheck( flashAddr & ~(PAGESIZE-1) )){

    eepromInterruptSettings= EECR & (1<<EERIE); // Stores EEPROM interrupt mask
    EECR &= ~(1<<EERIE);                    // Disable EEPROM interrupt
    while(EECR & (1<<EEWE));                // Wait if ongoing EEPROM write

    pageAdr=flashAddr & ~(PAGESIZE-1);      // Gets Flash page address from byte address

    #ifdef __FLASH_RECOVER
    FlashBackup.status=0;                   // Inicate that Flash buffer does
                                            // not contain data for writing
    while(EECR & (1<<EEWE));
    LpmReplaceSpm(flashAddr, data);         // Fills Flash write buffer
    WriteBufToFlash(ADR_FLASH_BUFFER);      // Writes to Flash recovery buffer
    FlashBackup.pageNumber = (unsigned int) (pageAdr/PAGESIZE); // Stores page address
                                                       // data should be written to
    FlashBackup.status = FLASH_BUFFER_FULL_ID; // Indicates that Flash recovery buffer
                                               // contains unwritten data
    while(EECR & (1<<EEWE));
    #endif

    LpmReplaceSpm(flashAddr, data);         // Fills Flash write buffer
    WriteBufToFlash(pageAdr);               // Writes to Flash

    #ifdef __FLASH_RECOVER
    FlashBackup.status = 0;                 // Indicates that Flash recovery buffer
                                            // does not contain unwritten data
    while(EECR & (1<<EEWE));
    #endif

    EECR |= eepromInterruptSettings;        // Restore EEPROM interrupt mask
    return TRUE;                            // Return TRUE if address
                                            // valid for writing
  }
  else
    return FALSE;                           // Return FALSE if address not
                                            // valid for writing
}

/*!
* The function writes data from array dataPage[] to Flash page address
* flashStartAdr. The Number of bytes written is depending upon the Flash page
* size. Returns FALSE if input argument ucFlashStartAdr is not a valid Flash
* page address for writing, else TRUE.
**/
unsigned char WriteFlashPage(MyAddressType flashStartAdr, unsigned char *dataPage)
{
  unsigned int index;
  unsigned char eepromInterruptSettings;
  if( AddressCheck(flashStartAdr) ){
    eepromInterruptSettings = EECR & (1<<EERIE); // Stoes EEPROM interrupt mask
    EECR &= ~(1<<EERIE);                    // Disable EEPROM interrupt
    while(EECR & (1<<EEWE));                // Wait if ongoing EEPROM write

    #ifdef __FLASH_RECOVER
    FlashBackup.status=0;                   // Inicate that Flash buffer does
                                            // not contain data for writing
    while(EECR & (1<<EEWE));
    for(index = 0; index < PAGESIZE; index+=2){ // Fills Flash write buffer
      _SPM_FILLTEMP(index, (unsigned int)dataPage[index]+((unsigned int)dataPage[index+1] << 8));
    }
    WriteBufToFlash(ADR_FLASH_BUFFER);      // Writes to Flash recovery buffer
    FlashBackup.pageNumber=(unsigned int)(flashStartAdr/PAGESIZE);
    FlashBackup.status = FLASH_BUFFER_FULL_ID; // Indicates that Flash recovery buffer
                                           // contains unwritten data
    while(EECR & (1<<EEWE));
    #endif
    for(index = 0; index < PAGESIZE; index+=2){ // Fills Flash write buffer
      _SPM_FILLTEMP(index, (unsigned int)dataPage[index]+((unsigned int)dataPage[index+1] << 8));
    }
    WriteBufToFlash(flashStartAdr);         // Writes to Flash
    #ifdef __FLASH_RECOVER
      FlashBackup.status=0;                 // Inicate that Flash buffer does
                                            // not contain data for writing
      while(EECR & (1<<EEWE));
    #endif

    EECR |= eepromInterruptSettings;        // Restore EEPROM interrupt mask
    return TRUE;                            // Return TRUE if address
                                            // valid for writing
  }
  else
    return FALSE;                           // Return FALSE if not address not
                                            // valid for writing
}




вам просто нечего делать в микроконтроллерном мире если Вы не можете загуглить и найти то что для Вас самим производителем сделано положено на видное место и ещё и обвешано указателями!
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
AR_AROV
Открыл глаза
Сообщения: 59
Зарегистрирован: Сб янв 14, 2012 11:05:46

Re: Самоуничтожение МК. Как сделать?

Сообщение AR_AROV »

Я это видел. И писал что, читал даташит. Но не выходит. Кто нибудь реализовывал это в своих работах?
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: Самоуничтожение МК. Как сделать?

Сообщение clawham »

ну да а вы в курсе что память программировать может только тот код что находится в секции загрузчика и в фузах эта секцая обозначена как бутлодер?

http://easyelectronics.ru/avr-uchebnyj- ... adera.html
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
AR_AROV
Открыл глаза
Сообщения: 59
Зарегистрирован: Сб янв 14, 2012 11:05:46

Re: Самоуничтожение МК. Как сделать?

Сообщение AR_AROV »

clawham писал(а):ну да а вы в курсе что память программировать может только тот код что находится в секции загрузчика и в фузах эта секцая обозначена как бутлодер?

http://easyelectronics.ru/avr-uchebnyj- ... adera.html

Вот этого я не знал.
Теперь понятно почему оно не работает.
Спасибо!!!
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: Самоуничтожение МК. Как сделать?

Сообщение md5sum »

clawham писал(а):ну да а вы в курсе что память программировать может только тот код что находится в секции загрузчика и в фузах эта секцая обозначена как бутлодер?

http://easyelectronics.ru/avr-uchebnyj- ... adera.html

Ух-ты! :shock:
А мой МК-tiny2313 и не в курсе...
У него нет бут секции, однако SPM работает. Достаточно выполнять все по ДШ и не забыть бит SELFPRGEN запрограммировать.
— Не говорите мне что делать и я не скажу куда Вам идти...
Ответить

Вернуться в «AVR»