Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Хранение данных во flash
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Handler
Пишу на AVR Studio, в наличии есть Atmega8, внешнему устройству надо передавать 2кб информации, еепрома для этого не хватает, вопрос в том как использовать флеш, данные заранее известны, хотелось бы услышать как их туда проще записать и читать.
goodwin
Цитата(Handler @ Jul 29 2007, 02:56) *
Пишу на AVR Studio, в наличии есть Atmega8, внешнему устройству надо передавать 2кб информации, еепрома для этого не хватает, вопрос в том как использовать флеш, данные заранее известны, хотелось бы услышать как их туда проще записать и читать.


Если "данные заранее известны" и их не требуется изменять, то можно просто представить их в виде массива констант в программе, или записать по известному адресу при программировании.
Handler
Цитата(goodwin @ Jul 29 2007, 03:07) *
Если "данные заранее известны" и их не требуется изменять, то можно просто представить их в виде массива констант в программе, или записать по известному адресу при программировании.

а как записать сразу по известному адресу, если я например создам отдельный hex с данными, или как тогда в студио описать массив в flash, это вообще возможно?
читать как я понял в студии можноиспользуя LPM.
goodwin
Цитата(Handler @ Jul 29 2007, 03:12) *
а как записать сразу по известному адресу, если я например создам отдельный hex с данными
и ещё как их читать в студии?


Проще всего какими-нибудь утилитками bin2asm/bin2c (в зависимости от того, что требуется).
Можно WinHex-ом (для С)...
Handler
Цитата(goodwin @ Jul 29 2007, 03:52) *
Проще всего какими-нибудь утилитками bin2asm/bin2c (в зависимости от того, что требуется).
Можно WinHex-ом (для С)...

не совсем понял о чем Вы, мне вот надо добавлять в flash информации ко всем прогам что я пишу, было бы классно чтобы автоматом делать такие hex,
киньте пожалуйста ссылку на описание принципов формирования hex, может ручками все сделаю.
goodwin
Цитата(Handler @ Jul 29 2007, 04:00) *
не совсем понял о чем Вы, мне вот надо добавлять во flash в последние 2кб информации ко всем прогам что я пишу, было бы классно чтобы автоматом делать такие hex


На чем пишете? На ассемблере? С помощью утилитки получаете текст для вставки в исходник,
пишете :
Код

    .CSEG
    .ORG xxxx; адрес данных
my_table:
               ; тут текст, сгенеренный bin2asm....
    .DB  0x31,0x40,0x0,0x3,0xB0,0x12,0x46,0xF0
    .DB  0xC,0x93,0x18,0x24,0x3C,0x40,0x30,0x2
    .DB  0xE,0x43,0x30,0x12,0x28,0x0,0xB0,0x12
Handler
Цитата(goodwin @ Jul 29 2007, 04:11) *
На чем пишете? На ассемблере? С помощью утилитки получаете текст для вставки в исходник,
пишете :
Код

    .CSEG
    .ORG xxxx; адрес данных
; тут текст, сгенеренный bin2asm....


a14.gif
спасибо огромное
а эта утилита есть в экзешнике а то гугл только исходникик подсовывает.
Handler
если у кого есть правильный bin2asm правильный, поделитесь пожалуйста, выложите где-нить или на мыло hr23(бобик)mail.ru
P.S. правильный это когда генерит строки сразу по 2-4-8 байт, вместо одного чтоб всю память занимать
ReAl
http://srecord.sourceforge.net/

Цитата(Handler @ Jul 29 2007, 23:25) *
P.S. правильный это когда генерит строки сразу по 2-4-8 байт, вместо одного чтоб всю память занимать
Что значит "всю память"?
Какая разница по скольку байт на строке - получившийся файл всё равно не читать глазами, а компилятору всё равно.
Handler
Цитата(ReAl @ Jul 30 2007, 09:25) *
http://srecord.sourceforge.net/

Что значит "всю память"?
Какая разница по скольку байт на строке - получившийся файл всё равно не читать глазами, а компилятору всё равно.

я тоже так думал, нашёл bin2asm в нете, он мне выдал так
Код
        .DB 0x0d
        .DB 0x4f
        .DB 0x00
        .DB 0x00
        .DB 0x45
        .DB 0x00
        .DB 0x03
        .DB 0x6f
        .DB 0x00
        .DB 0x00
        .DB 0x6d
        .DB 0xa0
        .DB 0x00

AVR Studio написала кучу ворнингов вот таких
warning: .cseg .db misalignment - padding zero byte
потом нашел в хелпе
Цитата
If the DB directive is given in a Code Segment and the expressionlist contains more than one expression, the expressions are packed so that two bytes are placed in each program memory word. If the expressionlist contains an odd number of expressions, the last expression will be placed in a program memory word of its own, even if the next line in the assemby code contains a DB directive. The unused half of the program word is set to zero. A warning is given, in order to notify the user that an extra zero byte is added to the .DB statement

получается что если размещать в строки по одному байту займет в памяти в 2 раза больше места
SasaVitebsk
Вышлю свою на мыло. Она и Си и Асм формирует и делает сколько надо в строке.
ReAl
Цитата(Handler @ Jul 30 2007, 12:02) *
AVR Studio написала кучу ворнингов вот таких
warning: .cseg .db misalignment - padding zero byte
потом нашел в хелпе
Тьху, совсем забыл про эту дуру. Я просто перелез на IAR ASM моментально, мне аврасм не понравился совершенно. А иаровски асм (только асм и линкер, без С) в конце 90-ых на сайте атмела бесплатно был.

Думаю, что в srecord с этим проблем нет, сможешь задать сколько нужно по ширине, сможешь попросить dw писать и т.п.
Handler
smile.gif всем спасибо за программы и ответы , но сегодня сел и спецом написал под себя по 16 в строку чтоб меньше места в коде занимали smile.gif
получилось быстрее самому чем искать и разбираться
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.