Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 23.08.2022, 15:17  
NewWriter
Заблокирован
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,488
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: MPLAB 8. Работа с указателями.

Всей темы не читал (может уже написали про это), но
unsigned char *p=&temp; - указатель на однобайтную переменную, а тут
temp = 0x4025; переменная двухбайтная.
Поэтому должно выдаваться предупреждение о несоответствии размеров, ну и в указатель уйдет только первый байт
Реклама:
NewWriter вне форума  
Непрочитано 23.08.2022, 17:13  
DmitriyVDN
Гражданин KAZUS.RU
 
Регистрация: 10.06.2010
Сообщений: 593
Сказал спасибо: 222
Сказали Спасибо 232 раз(а) в 152 сообщении(ях)
DmitriyVDN на пути к лучшему
По умолчанию Re: MPLAB 8. Работа с указателями.

Пример преобразования переменной типа float в байты:
Код:
float dt = 2.58901;  // переменная типа float, которую надо преобразовать в байты
byte* ptrdt;  // указатель на тип byte
ptrdt =  (byte*)(& dt);  // получаем адрес переменной dt
Код:
byte byteEeprom1 = * ptrdt;    // считываем байты
byte byteEeprom2 = * (ptrdt+1);
byte byteEeprom3 = * (ptrdt+2);
byte byteEeprom4 = * (ptrdt+3);
Осталось записать байты в EEPROM. Конечно, это можно сделать без промежуточных переменных.

Код:
// записываем  байты в EEPROM
EEPROM.write(0, * ptrdt);
EEPROM.write(1, *(ptrdt+1));
EEPROM.write(2, *(ptrdt+2));
EEPROM.write(3, *(ptrdt+3));
Для чтения данных типа float из EEPROM - считываем байты и записываем их последовательно в область памяти по указателю ptrdt:

Код:
// чтение байтов из EEPROM и запись в область памяти для dt
* ptrdt = EEPROM.read(0);
* (ptrdt+1) = EEPROM.read(1);
* (ptrdt+2) = EEPROM.read(2);
* (ptrdt+3) = EEPROM.read(3);
DmitriyVDN вне форума  
Непрочитано 23.08.2022, 18:16  
j-Roger
Гражданин KAZUS.RU
 
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 696
Сказал спасибо: 362
Сказали Спасибо 784 раз(а) в 363 сообщении(ях)
j-Roger на пути к лучшему
По умолчанию Re: MPLAB 8. Работа с указателями.

MPLAB 8.xx использует компилятор HI-TECH.
Вот в качестве примера чтение и сохранение настроек.
Некоторые ключевые моменты:
- блок настроек оформлен в виде структуры;
- расположение настроек в EEPROM отдаем на откуп компилятору;
- в данном примере блок настроек инициализируется конкретными значениями (и попадает в EEPROM при прошивке МК);
- в начале программы читаем блок настроек из EEPROM в RAM простым копированием из структуры в структуру;
- манипулируем настройками в RAM путем обращения к полям структуры;
- когда требуется, записываем блок настроек целиком в EEPROM.

P. S.
Не претендую на истину в последней инстанции ))

PHP код:
#include ‹htc.h›

// Задать конфигурацию
__CONFIG(0x23E4);

// Здесь будем использовать типы из stdint.h (которого нет в includ-ах)
typedef unsigned long uint32_t;
typedef unsigned int uint16_t;
typedef signed int int16_t;
typedef unsigned char uint8_t;
typedef signed char int8_t;

// Блок настроек
typedef struct {
    
float VarFloat// float
    
uint32_t Var32// 32-bit
    
uint16_t Var16// 16-bit
    
uint8_t Var8;   // 8-bit
Settings_t;

// Рабочая (изменяемая) копия блока настроек в RAM
Settings_t Settings;
// Сохраняемый в EEPROM блок настроек (начальные значения)
Settings_t eeprom EE_Settings = {
    
3.1415926,  // float
    
0xDEADBEAF// 32-bit
    
0xAA55,     // 16-bit
    
0x11        // 8-bit
};

// Прототип рукописной функции побайтной записи блока настроек в EEPROM 
void Save_Settings(void);

//==================================================  =
void main(void
{
    
// читаем блок настроек из EEPROM в память
    
Settings EE_Settings;

    
// меняется что-то в блоке настроек
    
Settings.Var8 0x55;

    
// сохраняем блок настроек в EEPROM
    
Save_Settings();

    while(
1);
}

//==================================================  =
void Save_Settings()
{
    
// переменная цикла
    
uint8_t i;
    
// указатель на блок настроек в RAM
    
uint8_t *src = (uint8_t*)&Settings;
    
// указатель на блок настроек в EEPROM
    
uint8_t eeprom *dst = (uint8_t eeprom*)&EE_Settings;

    
// Пишем побайтно блок настроек из RAM в EEPROM
    
for (0‹ sizeof(Settings_t); i++) {
        
// библиотечная функция HI_TECH
        
eeprom_write((uint8_t)dst, *src);
        
src++; dst++;
    }

j-Roger вне форума  
Эти 2 пользователя(ей) сказали Спасибо j-Roger за это сообщение:
DmitriyVDN (23.08.2022), mike-y-k (23.08.2022)
Непрочитано 01.01.2024, 20:04  
jeorsea
Прохожий
 
Регистрация: 26.12.2023
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
jeorsea на пути к лучшему
По умолчанию Re: MPLAB 8. Работа с указателями.

Какие соображения следует учитывать при работе с указателями в MPLAB 8, особенно при работе с переменными разных размеров?

В контексте MPLAB 8 и EEPROM, как вы подходите к преобразованию переменной с плавающей запятой в байты и последующему сохранению в EEPROM?
jeorsea вне форума  
Непрочитано 01.01.2024, 21:15  
j-Roger
Гражданин KAZUS.RU
 
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 696
Сказал спасибо: 362
Сказали Спасибо 784 раз(а) в 363 сообщении(ях)
j-Roger на пути к лучшему
По умолчанию Re: MPLAB 8. Работа с указателями.

Сообщение от Посмотреть сообщение
MPLAB 8.xx использует компилятор HI-TECH.

Думается, не лишним будет разместить здесь руководство по этому компилятору: HTC_PIC_manual.pdf
j-Roger вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование программатором STERH 007 PIC микроконтроллеров ispitatel1 Песочница (вопросы новичков) 4 17.04.2017 17:18
Ищу гуру STM32 (работа за деньги!) xakez ARM 1 07.07.2016 13:44
Работа с указателями Fair88Play Микроконтроллеры, АЦП, память и т.д 11 18.06.2012 13:18
Работа в MPLAB IDE V7.42 Prototup Микроконтроллеры, АЦП, память и т.д 14 29.05.2008 16:39
РАБОТА с MPLAB downkazus Proteus, KiCAD и другие ECAD 10 28.01.2007 13:15


Часовой пояс GMT +4, время: 01:49.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot