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

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

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

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

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

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


 
Опции темы

Free soft для ембеддера

Непрочитано 09.06.2014, 12:32  
optical illusion
Прописка
 
Регистрация: 17.08.2013
Сообщений: 282
Сказал спасибо: 10
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
optical illusion на пути к лучшему
По умолчанию Re: Free soft для ембеддера

При чем тут знаю я основы языка или нет? Пишите фигню всякую, такто...

Кстати, пробовал такую штуку:

union f {ulong up; ulong ul;} g;
g.ul=g.up;

Данные присваиваются и не портятся.
Приделываю туда 4 байта массив - не хочет.
Случайными данными заполняется...
Реклама:
optical illusion вне форума  
Непрочитано 09.06.2014, 14:00  
eddy
Почётный гражданин KAZUS.RUN
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Free soft для ембеддера

optical illusion, так что с ассемблерным кодом-то получается?
Вы бы проверили, а то у меня вот такой код
Код:
typedef union{
  unsigned long L;
  char C[4];
} LC;
...
LC lc;
...
lc.L = 0xabcd;
lc.C[0] = 0xa;
lc.C[3] = 0xd;
выдает черт-те что:
Код:
;   main.c: 300: lc.L = 0xabcd;
    ldw x, sp
    addw    x, #8
    ldw y, #0xabcd
    ldw (0x2, x), y
    clr (0x1, x)
    clr (x)
;   main.c: 301: lc.C[0] = 0xa;
    ldw x, sp
    ld  a, #0x0a
    ld  (8, x), a
;   main.c: 302: lc.C[3] = 0xd;
    ldw x, sp
    ld  a, #0x0d
    ld  (11, x), a
Может, вам просто обойтись без union? Скажем, так:
Код:
char C[4];
unsigned long *p = C;
?

(только нужно разобраться с endianness)

P.S. Надо по поводу union читать мануал по sdcc, но влом.
P.P.S А еще sdcc не знает про #pragma pack
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
eddy вне форума  
Непрочитано 09.06.2014, 14:21  
SasaVitebsk
Гражданин KAZUS.RUN
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Free soft для ембеддера

Сообщение от optical illusion Посмотреть сообщение
При чем тут знаю я основы языка или нет? Пишите фигню всякую, такто...

Кстати, пробовал такую штуку:

union f {ulong up; ulong ul;} g;
g.ul=g.up;

Данные присваиваются и не портятся.
Приделываю туда 4 байта массив - не хочет.
Случайными данными заполняется...
Любой компилятор, с любой оптимизацией эту строку выкинет, как бессмысленную. Именно это и показывает, что вы совершенно не понимаете что вы пишете. q.ul ВСЕГДА БУДЕТ РАВЕН g.up. Так как это ОДИН И ТОТ ЖЕ ОБЪЕКТ под разными именами. union ничего не делает, как вы не поймёте простой вещи.

Напишите, что по вашему работает не так. А то не понятно, что вы хотите сделать и что именно у вас получается не так
SasaVitebsk вне форума  
Непрочитано 09.06.2014, 14:44  
optical illusion
Прописка
 
Регистрация: 17.08.2013
Сообщений: 282
Сказал спасибо: 10
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
optical illusion на пути к лучшему
По умолчанию Re: Free soft для ембеддера

Нужно так:
union f {uchar t[4]; ulong ul;} g;

g.ul=0;
g.t[0]=0;
g.t[1]=byte3;
g.t[2]=byte2;
g.t[3]=byte1;

такой вот комбинацией заменяю:
ulong gh;

gh=0;
gh=gh+byte3;
gh=gh‹‹8;
gh=gh+byte2;
gh=gh‹‹8;
gh=gh+byte1;

Работает, но union то как использовать?
Мне union нужен...
optical illusion вне форума  
Непрочитано 09.06.2014, 14:47  
optical illusion
Прописка
 
Регистрация: 17.08.2013
Сообщений: 282
Сказал спасибо: 10
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
optical illusion на пути к лучшему
По умолчанию Re: Free soft для ембеддера

Сообщение от eddy Посмотреть сообщение
Надо по поводу union читать мануал по sdcc, но влом.
Там ничего нет у них про union.
optical illusion вне форума  
Непрочитано 09.06.2014, 14:49  
optical illusion
Прописка
 
Регистрация: 17.08.2013
Сообщений: 282
Сказал спасибо: 10
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
optical illusion на пути к лучшему
По умолчанию Re: Free soft для ембеддера

Сообщение от SasaVitebsk Посмотреть сообщение
q.ul ВСЕГДА БУДЕТ РАВЕН g.up
Это всем понятно. Но когда две long, то работает, а когда использую массив - тоже 4 байте - ТО НЕ РАБОТАЕТ. Это понятно?
optical illusion вне форума  
Непрочитано 09.06.2014, 15:10  
pambaru
Почётный гражданин KAZUS.RUN
 
Регистрация: 24.03.2007
Сообщений: 1,394
Сказал спасибо: 85
Сказали Спасибо 672 раз(а) в 392 сообщении(ях)
pambaru на пути к лучшему
По умолчанию Re: Free soft для ембеддера

а функция sizeof(g) для вашего юниона какой размер возвращает?
pambaru вне форума  
Непрочитано 09.06.2014, 15:41  
optical illusion
Прописка
 
Регистрация: 17.08.2013
Сообщений: 282
Сказал спасибо: 10
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
optical illusion на пути к лучшему
По умолчанию Re: Free soft для ембеддера

Запустил строки:

tu9=sizeof(g);
sprintf (buf,"sizeof %d ", tu9);

Напечатало: sizeof 0

Хотя, пробовал подставлять другие массивы, тоже самое печатает -0.

Последний раз редактировалось optical illusion; 09.06.2014 в 15:54.
optical illusion вне форума  
Непрочитано 09.06.2014, 15:42  
SasaVitebsk
Гражданин KAZUS.RUN
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Free soft для ембеддера

Сообщение от optical illusion Посмотреть сообщение
ulong gh;

gh=0;
gh=gh+byte3;
gh=gh‹‹8;
gh=gh+byte2;
gh=gh‹‹8;
gh=gh+byte1;

Работает, но union то как использовать?
Мне union нужен...
Давайте без обид. Смысл в том, что мы все заблуждаемся на разных этапах своей жизни. В большей или меньшей степени. И я не исключение. Поэтому воспринимайте мои сообщения, равно как и других, как желание помочь.

Разберём вторую часть марлезонского балета.
Для того, чтобы писать хорошо на языке высокого уровня, необходимо представлять, во что ваш текст превратится.
Ваша прога абсолютно эквивалентна:
gh=0;
gh |= byte3‹‹16;
gh |= byte2‹‹8;
gh |= byte1;

С одной стороны вроде бы написано одно и тоже. Но в моём случае компилятор просто положит твои byte в память. В твоём, при низкой оптимизации, или если объявить переменную volatile, компилятор сначала byte3 положит нулевым байтом, потом перешлёт в первый байт, а нулевым положит byte2 ну и так далее. Ради интереса проверь результат работы обоих программ и после этого объём скомпилированного кода.
Цитата:
Нужно так:
union f {uchar t[4]; ulong ul;} g;

g.ul=0;
g.t[0]=0;
g.t[1]=byte3;
g.t[2]=byte2;
g.t[3]=byte1;
Теперь по первой части марлезонского балета.
Третий раз повторяю что результат будет зависеть от того, как твой компилятор хранит long переменные. Это должно выставляться в настройках компилятора.
Сейчас, фактически дефакто, используется формат Endian Mode = Little. Что означает "младшим байтом вперёд".
Если исходить из этого, то твоя прога, аналогичная верхней, в виде union должна выглядеть так:
g.t[0]=byte1;
g.t[1]=byte2;
g.t[2]=byte3;
g.t[3]=0;
если старшим, то
g.t[0]=0;
g.t[1]=byte3;
g.t[2]=byte2;
g.t[3]=byte1;
g.ul=0; бессмысленная операция
SasaVitebsk вне форума  
Непрочитано 09.06.2014, 15:53  
optical illusion
Прописка
 
Регистрация: 17.08.2013
Сообщений: 282
Сказал спасибо: 10
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
optical illusion на пути к лучшему
По умолчанию Re: Free soft для ембеддера

Сообщение от SasaVitebsk Посмотреть сообщение
"младшим байтом вперёд"
Очень смешно...
optical illusion вне форума  
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FAQ (ЧаВО) по PROTEUS для начинающих и не только dosikus Proteus 221 07.03.2024 22:45
Апгрейд и комплектующие для ноутбуков mikesmith Барахолка электронных компонентов 28 17.05.2023 23:25
Книги dosikus Электронная библиотека 11242 29.12.2015 23:45
[Решено] Сборник перлов любителей кабельщины mikesmith Отвлекитесь, эмбеддеры! 135 14.08.2007 15:49


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.