|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
09.10.2009, 15:48 | #1 |
Пользователь
Регистрация: 07.07.2009
Сообщений: 37
|
Запись во flash память
Здравствуйте! Передо мной стоит задача сохранения и чтения из ППЗУ структуры. В структуре есть как целочисленные поля, так и с плавающей точкой. Организация flash побайтовая; проц, ОЗУ - 32 разряда. Писать и читать можно только по одному байту, что и делают функции wr_byteEPROM и rd_byteEPROM
G - указатель на структуру. Размер 284 байт. Код:
Код:
Сказав, ок. Надо так надо, решил писать каждую переменную в отдельности. Написал кучу строчечек и функции: Для целочисленных Код:
Для плавающих пробовал кучу вариантов, последним был: Код:
Теперь вопрос. 1) Как сохранить double/float на flash? Писать можем только побайтово. 2) Можно ли сохранить структуру легким движением руки, как было в первой попытке. |
09.10.2009, 17:15 | #2 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Вместо 284 используй "sizeof T", где T - сама структура. Только не факт, что ты после этого не испортишь прошивку. :)
Совет: вместо констант типа 0xA8005 используй константы типа #define FLASH_DATA_START 0xA8005 Может, на решение наведет такой вариант: выделяешь под масив char столько памяти, сколько нужно на всё-про-всё, и копируешь туда данные так, как они должны копироваться на флеш. Последний раз редактировалось ds.Dante; 09.10.2009 в 17:20. |
09.10.2009, 17:20 | #3 | |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
Цитата:
Последний раз редактировалось netrino; 09.10.2009 в 17:22. |
|
09.10.2009, 17:34 | #4 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
|
09.10.2009, 17:53 | #6 |
Пользователь
Регистрация: 07.07.2009
Сообщений: 37
|
С sizeof вообще прикол. Он выдает размер не в байтах, а в словах. Выравнивание у меня по 4 байта. Это я уже проверил.
Но всеравно в память под структуру данные записываются не по порядку, а как, понять не могу. Мониторил оперативку - ересь. Там приколы типа в целочисленном поле long лежит 5, а в следующем 6532, так 5 лежит в одном байте, а 0х19 и 0х84 в следующих. Не знаю, может это и мои глюки... Во. Нашел что за компиль. G21K C Compiler Попробую на него доки покопать и все же, есть идеи как float сохранить? Последний раз редактировалось valeologiya; 09.10.2009 в 17:57. |
09.10.2009, 18:06 | #7 | ||
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Цитата:
Цитата:
Теперь у нас поровну. :) Последний раз редактировалось ds.Dante; 09.10.2009 в 18:09. |
||
09.10.2009, 18:25 | #8 | |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
Цитата:
Код:
Код:
|
|
09.10.2009, 18:37 | #9 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
|
09.10.2009, 19:14 | #10 | |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
Цитата:
Код:
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Оперативная память | Warhead BOX | Компьютерное железо | 6 | 31.08.2009 10:45 |
Память | Ghennadiy | Общие вопросы Delphi | 9 | 25.08.2009 09:23 |
Динамическая память!!! | Doholyan | Паскаль, Turbo Pascal, PascalABC.NET | 12 | 30.06.2009 17:11 |
оперативная память | Pr1meEX | Помощь студентам | 3 | 16.06.2009 23:28 |
динамическая память | aka_faith | Общие вопросы C/C++ | 47 | 12.06.2009 12:35 |