Atmega dahili Flash belleğine veri yazmak ?

Başlatan atansu, 19 Ocak 2011, 00:48:54

atansu

Merhabalar değerli Pic proje üyeleri,

Benim uğraştığım bir projede programım, S-RAM de koşarken dışarıdan aldığım 3 kbyte lık bir datayı işlemci güçten kesilse de içinde kayıtlı datanın kalmasını istiyorum ve bu yüzden Flash belleğine yazmalıyım kodun tamamını ya da sadece veri dizisini.

avr nin <avr/boot.h> isimli kütüphanesini kullanarak yazılan örnek bir kodu da derledim fakat proteus da debug ettiğimde halen daha ram e yazıldığını gördüm datanın, sadece flasha yazmak için ne yapmalıyım? , proteus da debug modunun altındaki flash bytelarına ve rame baktıgım kısımdan kontrol ettim. Kod asıl atmega8 için geliştirileceğinden ram kısıtlı kalıyor benim için.
________________________________________________________________________
#include <avr/io.h>
#include <avr/boot.h>
#include <inttypes.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>

void boot_program_page (uint32_t page, uint8_t *buf) BOOTLOADER_SECTION;

uint8_t c[256] = "0123456789";

int main (void)
{
   
   uint32_t i=0;
   
   for(i = 10; i < 256; i++)
      c = 0x00;

   boot_program_page(0x100, c);

   return (0);
}


void boot_program_page (uint32_t page, uint8_t *buf)
{
   uint16_t i;
    uint8_t sreg;

    // Disable interrupts.

    sreg = SREG;
    cli();
   
    eeprom_busy_wait ();

    boot_page_erase (page);
    boot_spm_busy_wait ();      // Wait until the memory is erased.

    for (i=0; i<SPM_PAGESIZE; i+=2)
    {
       // Set up little-endian word.

        uint16_t w = *buf++;
        w += (*buf++) << 8;
       
        boot_page_fill (page + i, w);
    }

    boot_page_write (page);     // Store buffer in flash page.
    boot_spm_busy_wait();       // Wait until the memory is written.

    // Reenable RWW-section again. We need this if we want to jump back
    // to the application after bootloading.

    boot_rww_enable ();
 
    // Re-enable interrupts (if they were ever enabled).
   sei();

    SREG = sreg;
}
___________________________________________________________________________________

AVR nin AVR106 application notunu da inceledim ve GCC kullandığım için IAR ile derlenen bu kodu kullanmam benim için sıkıntı oluşturdu. bu app note u kullanarak GCC de kod derleyen veya yönlendirebilicek biri var mı?

Teşekkürler şimdiden yardımlarınız için  ;)

Probleme asina olan yok mu ya da benzer bir topic vardi da ben mi

yufuk

Bu konuda bende takıldım. Bilgisi olan varmı?