Почему eep пустой?

Тема в разделе "Микроконтроллеры AVR", создана пользователем SavvaRem, 23 мар 2019.

  1. SavvaRem

    SavvaRem Гик

    Привет, форумчане.

    Имею проблему. Пытаюсь получить eep-файл в Atmel Studio7, но он пустой. Вместо него заполняется hex (тот в котором main). Код примерно следующий:
    Код (C++):
    #include <avr/eeprom.h>
    #include <inttypes.h>

    #define MAX_SIZE 5

    int main void {
          eeprom_write_word((uint16_t*) 0, (uint16_t)830);
          eeprom_write_byte((uint8_t*)2,(uint8_t)15);
          // etc...
    }
    Как вынудить студию сохранять данные в *.eep?
     
    Airbus нравится это.
  2. Asper Daffy

    Asper Daffy Иксперд

    Оххх. Бросай это дело. Забей.
     
    SavvaRem нравится это.
  3. SavvaRem

    SavvaRem Гик

    Это еще почему?
     
  4. parovoZZ

    parovoZZ Гуру

    Считать eeprom из МК и сохранить как eep. Но в версии 7 студии в eep сохраняется ещё и контрольная сумма. Поэтому изменить на шальную eep файл не получится - студия откажется загружать его в МК, если контролька не совпадает.
     
    Последнее редактирование: 23 мар 2019
  5. SavvaRem

    SavvaRem Гик

    А если нужен готовый к прошиванию .eep файл сразу искаропки - его никак не получить?
     
  6. AlexU

    AlexU Гуру

    Ну почему же не получить?
    Сделайте что-то типа такого:
    Код (C++):
    struct Config config EEMEM =
    {
        0,    // Language
        0,    // Cancel Button
        {    // Delay
                0,    // Minute
                0    // Second
        },
        {
            {    // Preset #0
                    { 0 },     // name
                    {    // Time
                            0,    // Minute
                            0    // Second
                    }
            },
            {    // Preset #1
                    { 0 },     // name
                    {    // Time
                            0,    // Minute
                            0    // Second
                    }
            },
            {    // Preset #2
                    { 0 },     // name
                    {    // Time
                            0,    // Minute
                            0    // Second
                    }
            },
            {    // Preset #3
                    { 0 },     // name
                    {    // Time
                            0,    // Minute
                            0    // Second
                    }
            },
            {    // Preset #4
                    { 0 },     // name
                    {    // Time
                            0,    // Minute
                            0    // Second
                    }
            }
        }
    };
    и получите при компиляции *.eep файл, который можно будет зашить в EEPROM при прошивке контроллера.
     
  7. SavvaRem

    SavvaRem Гик

    Я уже пробовал так. И честно говоря не понял, как потом из программы извлекать отдельные поля этой структуры. Ведь если подход такой - в одном файле, допустим main.c мы создаем глобальную структуру в EEPROM и компилируя его получаем *.eep для прошивания, то как потом извлекать данные из EEPROM работая уже из другой программы. Ведь тут нет явных адресов. Чисто теоретически можно завести в клиентской программе структуру подобного вида и указатель на нее, а потом доступ осуществлять через указатель. Но мне этот способ не кажется правильным - ведь кмопилятор может поля структур размещать по-разному...
     
  8. AlexU

    AlexU Гуру

    Что значит из другой программы? МК может выполнять только одну программу (бутлоадер не в счёт).
     
  9. Asper Daffy

    Asper Daffy Иксперд

    Вот потому я и говорил "забей". Характер вопроса показывает. что ты просто не готов нормально воспринять ответ. Попозже, наберёшься опыта - разберёшься.
     
  10. SavvaRem

    SavvaRem Гик

    Вы сейчас не с голосами ли в голове разговариваете, нет? Вопрос был по существу, не можете ответить - не отвечайте.
     
  11. SavvaRem

    SavvaRem Гик

    А просто, была идея формировать hex для еепрома, что бы зашивать его дудкой в контроллер с уже существующей прошивкой. Тобишь, содержимое флеша не менять, а изменять только EEPROM под нужды заказчика так сказать.
     
  12. parovoZZ

    parovoZZ Гуру

    здесь нет, а в eep есть.
     
  13. Asper Daffy

    Asper Daffy Иксперд

    Так и ответ был по-существу. Просто он тебе не понравился. Ну, извини. Жизнь такова, какова она есть.
     
    DetSimen нравится это.
  14. SavvaRem

    SavvaRem Гик

    Ок, замнем для ясности. Однако ответа так и не увидел
     
  15. parovoZZ

    parovoZZ Гуру

    В любом hex редакторе. Контрольку он должен сам считать. Ну или самому - сумма всех байтов в строке должна равняться нулю.

    Подробнее:
    http://microsin.net/programming/PC/intel-hex-file-format.html
     
    SavvaRem нравится это.
  16. AlexU

    AlexU Гуру

    Вообще можно сказать компилятору по какому адресу располагать переменные. Если для сборки используете компилятор из коллекции GCC, то копайте в сторону скриптов линкера.
     
  17. SavvaRem

    SavvaRem Гик

    Спасибо. Хекс вручную соберу.
     
  18. SavvaRem

    SavvaRem Гик

    Это можно, но сперва попробую вручную хекс собрать. Спасибо.
     
  19. AlexU

    AlexU Гуру

    Это конечно.
    Вот только, если будете собирать вручную, нужно будет иметь чёткое понимание по какому адресу в EEPROM находится та или иная переменная, что бы этот HEХ правильно собрать.
    И для этого понимания как раз пригодится, точные знания куда компилятор сохраняет данные.
    Правда, выше приведённые утверждения верны, если Вы компилятору доверяете распределение памяти. А не сами вручную по всей программе прописываете адреса (что, собственно, является феерической глупостью и источником ошибок).
    Вот тут было обсуждение, как "заставить" компилятор использовать для хранения переменных определённые адреса RAM памяти (см. 7-е сообщение) -- http://forum.easyelectronics.ru/viewtopic.php?f=4&t=34261. Для EEPROM проблема решается аналогично.
     
    SavvaRem нравится это.