реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Перевод WORD в строчный WORD или INT, Функции или библиотеки
Aldec
сообщение Mar 7 2017, 07:18
Сообщение #16


Частый гость
**

Группа: Участник
Сообщений: 160
Регистрация: 21-06-16
Пользователь №: 92 272



Вроде раздел средства разработки и вопрос в общем в каком компиляторе есть функции или готовые процедуры конвертирования DWORD в int array[ ]



Сообщение отредактировал Aldec - Mar 7 2017, 07:44
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 7 2017, 07:21
Сообщение #17


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Aldec @ Mar 7 2017, 09:18) *
в каком компиляторе есть функции или готовые процедуры конвертирования DWORD в int array[ ]
Ни в каком нет. Читать учебник вам все-же придется.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Obam
сообщение Mar 7 2017, 08:04
Сообщение #18


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Цитата(Aldec @ Mar 7 2017, 11:18) *
Вроде раздел средства разработки и вопрос в общем в каком компиляторе есть функции или готовые процедуры конвертирования DWORD в int array[ ]

http://cppstudio.com/post/389

Вторая страница пошла (я понимаю, форуму хорошо - реклама-шрэклама…), куда катится этот мир (;
http://publ.lib.ru/ARCHIVES/Z/ZLOBIN_Vladi...cessorah.(1991).[djv-fax].zip

Ну и совсем по-пионэрски:
CODE

void BIN_TO_BCD (uint32_t* bcd)
//==============================================================================
// Подпрограмма преобразования 64-х разрядного двоичного (BIN) числа в
// упакованный двоично-десятичный (BCD) формат.
//==============================================================================
#define _tetrad_mask (0x0000000Fu)
#define _tetrad_lmt (0x00000004u)
#define _tetrad_crrctn (0x00000003u)
{
uint32_t shift_rg[5] = {bcd[0], bcd[1], 0, 0, 0},
i = 0x00000040,// счетчик цикла по входному регистру
t, t_l, t_c;
int32_t j;// счетчик цикла по тетрадам BCD-регистра
do {
j = 0x0000001C;
do {
t = (_tetrad_mask << j);
t_l = (_tetrad_lmt << j);
t_c = (_tetrad_crrctn << j);
if ((shift_rg[2] & t) > t_l) {
shift_rg[2] = shift_rg[2] + t_c;
};
if ((shift_rg[3] & t) > t_l) {
shift_rg[3] = shift_rg[3] + t_c;
};
if ((shift_rg[4] & t) > t_l) {
shift_rg[4] = shift_rg[4] + t_c;
};
j =j - 4;
} while (j >= 0);

shift_rg[4] = shift_rg[4] << 1;
if (shift_rg[3] & 0x80000000) {
shift_rg[4] = (shift_rg[4] | 0x00000001);
};
shift_rg[3] = shift_rg[3] << 1;
if (shift_rg[2] & 0x80000000) {
shift_rg[3] = (shift_rg[3] | 0x00000001);
};
shift_rg[2] = shift_rg[2] << 1;
if (shift_rg[1] & 0x80000000) {
shift_rg[2] = (shift_rg[2] | 0x00000001);
};
shift_rg[1] = shift_rg[1] << 1;
if (shift_rg[0] & 0x80000000) {
shift_rg[1] = (shift_rg[1] | 0x00000001);
};
shift_rg[0] = shift_rg[0] << 1;

i = i - 1;
} while (i != 0);

bcd[2] = shift_rg[2];
bcd[3] = shift_rg[3];
bcd[4] = shift_rg[4];
}


//Определили, к примеру:
uint32_t BnrCdDcmls[5];

//Задали:
BnrCdDcmls[0] = младшие_32_разряда;
BnrCdDcmls[1] = старшие_32_разряда;
//Вызвали:
BIN_TO_BCD ((uint32_t*)&BnrCdDcmls);
//Получили: с BnrCdDcmls[2] по BnrCdDcmls[4] тетрадами (это по 4 бита - если слово незнакомое) двоично-десятичное представление;
//ну и уж дальше рассортируете.

Чесслово, за время треда уже и книжку бы прочитали и первый вариант кода проверить успели бы…


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 7 2017, 08:45
Сообщение #19


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Obam @ Mar 7 2017, 10:04) *
//Определили, к примеру:
uint32_t BnrCdDcmls[5];
Вот сразу уже и не подходит. Требовалось WORD.
QUOTE (Obam @ Mar 7 2017, 10:04) *
тетрадами
Снова мимо - надо было int.

biggrin.gif


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Obam
сообщение Mar 7 2017, 09:19
Сообщение #20


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Цитата(Сергей Борщ @ Mar 7 2017, 12:45) *
Вот сразу уже и не подходит. Требовалось WORD.

Лично я остановился на WORD'97…
Если закопаться в своих архивах (но я этого делать не стану sm.gif ), то найду подобное и для mcs51, а там word (машинное слово, так ведь?) вообще 8 бит…

Цитата
Снова мимо - надо было int.

biggrin.gif

Ни фига: именно int надо "декомпозировать" wink.gif, Причём TC, упоминая MODF, похоже считает, что int так же сложно устроен, что и float.

Примем дополнение до 2-х, как формат (старший разряд знаковым) - будет int, не примем - не будет. sm.gif

Ну пусть человек, хоть посмотрит-подумает, голова, она ведь не только чтоб в неё есть… а по поводу "за время треда уже и книжку бы прочитали…", я так понимаю, возражений нет (;

Сообщение отредактировал Obam - Mar 7 2017, 09:24


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
Aldec
сообщение Mar 7 2017, 10:21
Сообщение #21


Частый гость
**

Группа: Участник
Сообщений: 160
Регистрация: 21-06-16
Пользователь №: 92 272



Упоминание MODF и других функций только для намека на тип функций, то что она из раздела конвертирования. BCDTODEC или BINTOBCD
Тема больше про оптимальные варианты конвертации или более компактные.
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 7 2017, 10:26
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Aldec @ Mar 7 2017, 13:21) *
Упоминание MODF и других функций только для намека на тип функций, то что она из раздела конвертирования. BCDTODEC или BINTOBCD
Тема больше про оптимальные варианты конвертации или более компактные.

Для начала укажите тип процессора и язык программирования.
x86?
Васик, питон, жабаскрипт?
Go to the top of the page
 
+Quote Post
Aldec
сообщение Mar 8 2017, 08:11
Сообщение #23


Частый гость
**

Группа: Участник
Сообщений: 160
Регистрация: 21-06-16
Пользователь №: 92 272



Вы имеете ввиду что в каком то x86 МК есть аппаратный конвертер

Цитата(Obam @ Mar 7 2017, 08:04) *
//Получили: с BnrCdDcmls[2] по BnrCdDcmls[4] тетрадами (это по 4 бита - если слово незнакомое) двоично-десятичное представление;

На выходе конвертации должен быть как минимум полубайт десятых или сотых десятичного значения например

1111 на выходе 0001 и 0101 т.е 15 ковертируется INT [1,5]
Go to the top of the page
 
+Quote Post
Obam
сообщение Mar 8 2017, 10:17
Сообщение #24


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



"Понесли кроссовки Митю...".
Не знаю в каком году вы впервые увидели как унутре себя работает процессор, но книжицу по ссылке всё же почитайте; просветлению, определённо, способствует...

Ну естественно, 15 в шестнадцатиричном представлении - 0FH, в двоичном - 1111B, в двоично-десятичном будет 15H, а в виде ASCIZ 31H, 35H, 00H
А что не так? После:
BnrCdDcmls[0] = 0x0000000F;
BnrCdDcmls[1] = 0x00000000;
BIN_TO_BCD ((uint32_t*)&BnrCdDcmls);
вы не получили 0x00000015 в BnrCdDcmls[2]?

Ваши исходные 1250:
BnrCdDcmls[0] = 1250;
BnrCdDcmls[1] = 0;
BIN_TO_BCD ((uint32_t*)&BnrCdDcmls);
не дали 0x00001250 в BnrCdDcmls[2]?

64 двоичных разряда (два слова в ARM-архитектуре, откуда и дан пример) составляют число из 24-х десятичных разряднов.

И ещё, INT[1,5] это по-каковски?

Сообщение отредактировал Obam - Mar 8 2017, 10:23


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
Aldec
сообщение Mar 8 2017, 12:50
Сообщение #25


Частый гость
**

Группа: Участник
Сообщений: 160
Регистрация: 21-06-16
Пользователь №: 92 272



Вам покажется странным но в Си, инициализация массива выглядит как int A[ 10 ], поэтому не должно вызывать затруднений,
Надо также заметить что он т.е. Си принят что то вроде стандартом или по умолчанию и поэтому в вопросе подразумевается Си
Также в Си есть деление по модулю с возвратом остатка т.е. один из различных вариантов для конвертации в массив это A[ ] = B%10.
Go to the top of the page
 
+Quote Post
Obam
сообщение Mar 8 2017, 14:36
Сообщение #26


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Цитата(Aldec @ Mar 8 2017, 16:50) *
Вам покажется странным но в Си, инициализация массива выглядит как int A[ 10 ]

Нет не покажется sm.gif, но "объявление массива", давайте будем терминологически точными; инициализация несколько иное явление - нулями по умолчанию, но можем явно указать чем, а можем (не забывайте - форум про микроконтроллеры) поместить в неинициализируемую область.
Цитата
Надо также заметить что он т.е. Си принят что то вроде стандартом или по умолчанию и поэтому в вопросе подразумевается Си
Также в Си есть деление по модулю с возвратом остатка т.е. один из различных вариантов для конвертации в массив это A[ ] = B%10.

Ну ща вам прилетит: B - это что? А в скобочках что?


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 8 2017, 14:58
Сообщение #27


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Aldec @ Mar 8 2017, 14:50) *
т.е. один из различных вариантов для конвертации в массив это A[ ] = B%10.
Ну так и используйте его. Зачем тему было заводить? lol.gif


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Aldec
сообщение Mar 8 2017, 19:38
Сообщение #28


Частый гость
**

Группа: Участник
Сообщений: 160
Регистрация: 21-06-16
Пользователь №: 92 272



Да раздел про МК а также "How-to, тонкости работы со средствами разработки" это подразумевает тонкости, фишки...

разделить DWORD на 10 это не на 2, поэтому вопрос про тонкости и фишки.
Go to the top of the page
 
+Quote Post
SSerge
сообщение Mar 9 2017, 06:50
Сообщение #29


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(Aldec @ Mar 9 2017, 02:38) *
...
вопрос про тонкости и фишки.

http://homepage.cs.uiowa.edu/~jones/bcd/decimal.html
http://we.easyelectronics.ru/Soft/preobraz...lye-chisla.html


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
Aldec
сообщение Mar 20 2017, 11:23
Сообщение #30


Частый гость
**

Группа: Участник
Сообщений: 160
Регистрация: 21-06-16
Пользователь №: 92 272



Там не совсем ясно какой конвертер круче, на делении на 10 или сдвиге 3,30

http://www.microchip.su/showthread.php?t=2162
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 13:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.01477 секунд с 7
ELECTRONIX ©2004-2016