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

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

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

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

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

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


Ответ
Опции темы
Непрочитано 22.08.2022, 11:16   #1
Alpout
Прописка
 
Аватар для Alpout
 
Регистрация: 13.09.2011
Адрес: Уфа
Сообщений: 253
Сказал спасибо: 20
Сказали Спасибо 19 раз(а) в 14 сообщении(ях)
Alpout на пути к лучшему
Вопрос MPLAB 8. Работа с указателями.

Добрый день!
Суть такова: хотел число integer разбить на байты, чтобы в EEPROM сохранить. Не понимаю, почему у меня программа берет только 1 байт и сохраняет, а второй такое же число(содержимое), хотя в указателе *р хранится адрес второго байта..? Кусок кода:
Код:
volatile unsigned int temp;
volatile unsigned char *p=&temp;
volatile unsigned char u,v,x,y;

void math(void)
{
	
}

void initial(void) 
{ 
  OPTION_REG=0B00000001; // Установлен Прескаллер с коэффициентом 4, т.е. 256*4=1024 мкс ~ 1мс
  TRISA=0B00011111;
  TRISC=0B10000001; // 
  //PORTC=0B11111111;
  TRISB=0B11111111; // Устанавливаем порт B как вход 
  TRISD=0B00000000; // Порт D для дисплея
  TRISE=0B11111111;
  //TMR0=0;
  //T0IE=0; // запрещаем пока
  //PORTD = 0;
  //GIE=1;

}


void main(void) {

    initial();  
	temp = 0x4025;	
	u=*p;
	*p++;
    v=*p;		
}
Нажмите на изображение для увеличения
Название: Снимок.PNG
Просмотров: 0
Размер:	10.0 Кб
ID:	172330
Нажмите на изображение для увеличения
Название: Снимок2.PNG
Просмотров: 0
Размер:	5.3 Кб
ID:	172331
Реклама:
Alpout вне форума   Ответить с цитированием
Непрочитано 22.08.2022, 12:26   #2
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,950
Сказали Спасибо 1,327 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию Re: MPLAB 8. Работа с указателями.

По моему, правильнее было бы написать

Код:
  u = temp & 0xFF;
  v = temp ›› 8;
Зачем шаманство с указателями?
__________________
[ жизнь приятна и красива, если выпить литр пива ]
nml вне форума   Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо nml за это сообщение:
DmitriyVDN (22.08.2022), mike-y-k (22.08.2022), индюк (22.08.2022)
Непрочитано 22.08.2022, 12:30   #3
Alpout
Прописка
 
Аватар для Alpout
 
Регистрация: 13.09.2011
Адрес: Уфа
Сообщений: 253
Сказал спасибо: 20
Сказали Спасибо 19 раз(а) в 14 сообщении(ях)
Alpout на пути к лучшему
По умолчанию Re: MPLAB 8. Работа с указателями.

хотел сделать еще с переменными float. там указатель по проще было б.
Alpout вне форума   Ответить с цитированием
Непрочитано 22.08.2022, 13:49   #4
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,245
Сказал спасибо: 11,163
Сказали Спасибо 3,854 раз(а) в 2,925 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: MPLAB 8. Работа с указателями.

Таки правила преобразования
Берите указатель на массив char, загружайте в него указатель на integer, разбирайтесь с Big/Little endian и разбирайте integer на байты (не забывая о разрядности)

Ну и универсально рабочее - в регистр, вывод в char младшего байта и сдвиг на 8 вправо. Число сдвигов от разрядности (1 для 16 и 3 для 32)…

Для float просто сделайте modf, умножте результат на нужную степень 10 и сделайте два int для получения в двух integer целой и дробной частей. Можно даже помудрить с округлением результата…
Дальше как два integer выводите…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…

Последний раз редактировалось mike-y-k; 22.08.2022 в 14:05.
mike-y-k вне форума   Ответить с цитированием
Непрочитано 22.08.2022, 14:21   #5
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,950
Сказали Спасибо 1,327 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию Re: MPLAB 8. Работа с указателями.

Чем плох такой вариант?
Код:
union floatdata
{
	float fff;
	char bytes[4];
}
__________________
[ жизнь приятна и красива, если выпить литр пива ]
nml вне форума   Ответить с цитированием
Сказали "Спасибо" nml
DmitriyVDN (22.08.2022)
Непрочитано 22.08.2022, 14:29   #6
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,245
Сказал спасибо: 11,163
Сказали Спасибо 3,854 раз(а) в 2,925 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: MPLAB 8. Работа с указателями.

nml, я конечно дико извиняюсь, но совсем не все смогут воспроизвести в удобочитаемой форме экспоненциальное представление плавающего числа…
У ТС в исходном коде была инициализация дисплея - типа намека на дальнейшую судьбу для тех char

Собственно и если те байты не планируется иначе использовать - сильно проще подготовить нужный массив для вывода обычным sprintf…

Если это вывод binary в порт - тогда все уже было выше…
Тогда можно написать asm {} с нужной цепочкой машинных команд и выводом сразу в порт, но тут надо сразу написать в комментариях замечание о возможной проблеме с переносимостью кода…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…

Последний раз редактировалось mike-y-k; 22.08.2022 в 14:34.
mike-y-k вне форума   Ответить с цитированием
Непрочитано 22.08.2022, 14:34   #7
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,950
Сказали Спасибо 1,327 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию Re: MPLAB 8. Работа с указателями.

Сообщение от mike-y-k Посмотреть сообщение
не все смогут воспроизвести в удобочитаемой форме экспоненциальное представление плавающего числа…
Ну как я понял, ТС хотел сохранять в EEPROM побайтно, а не преобразовывать для вывода
__________________
[ жизнь приятна и красива, если выпить литр пива ]
nml вне форума   Ответить с цитированием
Непрочитано 22.08.2022, 15:11   #8
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,245
Сказал спасибо: 11,163
Сказали Спасибо 3,854 раз(а) в 2,925 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: MPLAB 8. Работа с указателями.

nml, ну тут как всегда - помогите, но все я вам не расскажу
И мы будем развлекаться в вариантах техник гадания

Для записи в порт сильно проще описать данные структурой, взять указатель и писать данные из памяти отдельной процедурой, например write_to_port (void *data, integer size_of_data) {}

Понять бы цель экспериментов автора…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…

Последний раз редактировалось mike-y-k; 22.08.2022 в 16:34.
mike-y-k вне форума   Ответить с цитированием
Непрочитано 22.08.2022, 15:46   #9
DmitriyVDN
Гражданин KAZUS.RU
 
Регистрация: 10.06.2010
Сообщений: 593
Сказал спасибо: 222
Сказали Спасибо 232 раз(а) в 152 сообщении(ях)
DmitriyVDN на пути к лучшему
По умолчанию Re: MPLAB 8. Работа с указателями.

Код:
#define Lo(param) (*((char *)¶m))
#define Hi(param) (*((char *)¶m +1))
#define Hihger(param) (*((char *)¶m+2))
#define Hihgest(param) (*((char *)¶m+3))
или нет?
DmitriyVDN вне форума   Ответить с цитированием
Непрочитано 22.08.2022, 16:17   #10
индюк
Гуру портала
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,485
Сказал спасибо: 178
Сказали Спасибо 3,140 раз(а) в 2,027 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: MPLAB 8. Работа с указателями.

а нельзя на низком уровне просто байты переписать куда надо? setmem copymem там всякие........
__________________
кагмаподэ магмаподэ
индюк вне форума   Ответить с цитированием
Ответ

Закладки


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

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, время: 03:56.


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