Aldec 0 7 марта, 2017 Опубликовано 7 марта, 2017 (изменено) · Жалоба Вроде раздел средства разработки и вопрос в общем в каком компиляторе есть функции или готовые процедуры конвертирования DWORD в int array[ ] Изменено 7 марта, 2017 пользователем Aldec Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 7 марта, 2017 Опубликовано 7 марта, 2017 · Жалоба в каком компиляторе есть функции или готовые процедуры конвертирования DWORD в int array[ ]Ни в каком нет. Читать учебник вам все-же придется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 30 7 марта, 2017 Опубликовано 7 марта, 2017 · Жалоба Вроде раздел средства разработки и вопрос в общем в каком компиляторе есть функции или готовые процедуры конвертирования DWORD в int array[ ] http://cppstudio.com/post/389 Вторая страница пошла (я понимаю, форуму хорошо - реклама-шрэклама…), куда катится этот мир (; http://publ.lib.ru/ARCHIVES/Z/ZLOBIN_Vladi...cessorah.(1991).[djv-fax].zip Ну и совсем по-пионэрски: 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 бита - если слово незнакомое) двоично-десятичное представление; //ну и уж дальше рассортируете. Чесслово, за время треда уже и книжку бы прочитали и первый вариант кода проверить успели бы… Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 7 марта, 2017 Опубликовано 7 марта, 2017 · Жалоба //Определили, к примеру: uint32_t BnrCdDcmls[5]; Вот сразу уже и не подходит. Требовалось WORD. тетрадамиСнова мимо - надо было int. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 30 7 марта, 2017 Опубликовано 7 марта, 2017 (изменено) · Жалоба Вот сразу уже и не подходит. Требовалось WORD. Лично я остановился на WORD'97… Если закопаться в своих архивах (но я этого делать не стану :) ), то найду подобное и для mcs51, а там word (машинное слово, так ведь?) вообще 8 бит… Снова мимо - надо было int. Ни фига: именно int надо "декомпозировать" ;), Причём TC, упоминая MODF, похоже считает, что int так же сложно устроен, что и float. Примем дополнение до 2-х, как формат (старший разряд знаковым) - будет int, не примем - не будет. :) Ну пусть человек, хоть посмотрит-подумает, голова, она ведь не только чтоб в неё есть… а по поводу "за время треда уже и книжку бы прочитали…", я так понимаю, возражений нет (; Изменено 7 марта, 2017 пользователем Obam Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aldec 0 7 марта, 2017 Опубликовано 7 марта, 2017 · Жалоба Упоминание MODF и других функций только для намека на тип функций, то что она из раздела конвертирования. BCDTODEC или BINTOBCD Тема больше про оптимальные варианты конвертации или более компактные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 7 марта, 2017 Опубликовано 7 марта, 2017 · Жалоба Упоминание MODF и других функций только для намека на тип функций, то что она из раздела конвертирования. BCDTODEC или BINTOBCD Тема больше про оптимальные варианты конвертации или более компактные. Для начала укажите тип процессора и язык программирования. x86? Васик, питон, жабаскрипт? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aldec 0 8 марта, 2017 Опубликовано 8 марта, 2017 · Жалоба Вы имеете ввиду что в каком то x86 МК есть аппаратный конвертер //Получили: с BnrCdDcmls[2] по BnrCdDcmls[4] тетрадами (это по 4 бита - если слово незнакомое) двоично-десятичное представление; На выходе конвертации должен быть как минимум полубайт десятых или сотых десятичного значения например 1111 на выходе 0001 и 0101 т.е 15 ковертируется INT [1,5] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 30 8 марта, 2017 Опубликовано 8 марта, 2017 (изменено) · Жалоба "Понесли кроссовки Митю...". Не знаю в каком году вы впервые увидели как унутре себя работает процессор, но книжицу по ссылке всё же почитайте; просветлению, определённо, способствует... Ну естественно, 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] это по-каковски? Изменено 8 марта, 2017 пользователем Obam Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aldec 0 8 марта, 2017 Опубликовано 8 марта, 2017 · Жалоба Вам покажется странным но в Си, инициализация массива выглядит как int A[ 10 ], поэтому не должно вызывать затруднений, Надо также заметить что он т.е. Си принят что то вроде стандартом или по умолчанию и поэтому в вопросе подразумевается Си Также в Си есть деление по модулю с возвратом остатка т.е. один из различных вариантов для конвертации в массив это A[ ] = B%10. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 30 8 марта, 2017 Опубликовано 8 марта, 2017 · Жалоба Вам покажется странным но в Си, инициализация массива выглядит как int A[ 10 ] Нет не покажется :), но "объявление массива", давайте будем терминологически точными; инициализация несколько иное явление - нулями по умолчанию, но можем явно указать чем, а можем (не забывайте - форум про микроконтроллеры) поместить в неинициализируемую область. Надо также заметить что он т.е. Си принят что то вроде стандартом или по умолчанию и поэтому в вопросе подразумевается Си Также в Си есть деление по модулю с возвратом остатка т.е. один из различных вариантов для конвертации в массив это A[ ] = B%10. Ну ща вам прилетит: B - это что? А в скобочках что? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 8 марта, 2017 Опубликовано 8 марта, 2017 · Жалоба т.е. один из различных вариантов для конвертации в массив это A[ ] = B%10.Ну так и используйте его. Зачем тему было заводить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aldec 0 8 марта, 2017 Опубликовано 8 марта, 2017 · Жалоба Да раздел про МК а также "How-to, тонкости работы со средствами разработки" это подразумевает тонкости, фишки... разделить DWORD на 10 это не на 2, поэтому вопрос про тонкости и фишки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SSerge 4 9 марта, 2017 Опубликовано 9 марта, 2017 · Жалоба ... вопрос про тонкости и фишки. http://homepage.cs.uiowa.edu/~jones/bcd/decimal.html http://we.easyelectronics.ru/Soft/preobraz...lye-chisla.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aldec 0 20 марта, 2017 Опубликовано 20 марта, 2017 · Жалоба Там не совсем ясно какой конвертер круче, на делении на 10 или сдвиге 3,30 http://www.microchip.su/showthread.php?t=2162 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться