| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| C за PIC18, използващо хардуерното му умножение? http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=11043 |
Страница 1 от 4 |
| Автор: | sparkybg [ Сря Яну 30, 2013 10:13 pm ] |
| Заглавие: | C за PIC18, използващо хардуерното му умножение? |
...после що съм ползвал 32 битници където трябва и където не... Ако пуснат 5 волтов, тотално ще забравя за всичко друго... Та - на въпроса: Има ли някакъв компилатор някъде, дето да ползва това хардуерно умножеине за нещо повече от 8 битови числа? И да работи под MPLAB X? XC8, последна версия, използва хардуерно умножение само за 8 битови числа без знак. Hi-Tеch C18 9.80 - пак така. За останалото си вика подпрограмка, дето го прави с цикли като на PIC16. Вече окончателно се убеждавам че във всички фирми, започващи с "micro" изначално има нещо недоклатено. |
|
| Автор: | FiTTiLA [ Чет Яну 31, 2013 3:22 pm ] |
| Заглавие: | Re: C за PIC18, използващо хардуерното му умножение? |
С константа ли умножаваш? Ако да, използвай Хорнер метода на асемблер, събиране-изваждане-шифтване ... ако не го ползваш вече |
|
| Автор: | sparkybg [ Чет Яну 31, 2013 3:36 pm ] | |||||||||
| Заглавие: | Re: C за PIC18, използващо хардуерното му умножение? | |||||||||
С константа умножавам, 16 битова. И е голямо число, примерно 38342. С шифтване и баба знае, ама тогава за какво да ползвам PIC18? То хардуерното му умножение е съществената разлика с 16-ките. Сега го правя с четири 8 битови умножения и 4 събирания. Ама просто умножение се мъдри на 6-7 реда, ползват се буферни променливи и прочие. Ако си е вградено в компилатора ще е доста по-оптимизирано, а в сорса ще си е просто c=a*b. На асемблер е лесно, ама да уча асемблер за 8 битов PIC - айде мерси. Въпроса е че микрочЕп пак са се изсрали на метеното - сътворили микроконтролер с хардуерно умножение за един цикъл, пък не го ползват. И едно умножение 16x16 отива примерно 100 и повече цикъла. dsPIC30 например си има макроси, дето му ползват дори 30 битовия (или 40 беше) акумулатор, а за 18-ката - нищо. |
||||||||||
| Автор: | tgi [ Пет Фев 01, 2013 1:38 am ] |
| Заглавие: | Re: C за PIC18, използващо хардуерното му умножение? |
Е чак да му "учиш асемблера" за да си направиш умножението едва ли ще ти се наложи де (ама и цял ден като нищо може да ти отиде да се справиш). Инак 16*16->32 умножение ако нямаш наготово какво друго ти остава освен както си го направил с 8*8->16 но на асемблер. Все пак са само няколко реда, десетки реда да са. 1*1->2 ("със събиране и шифтване", което е същото като 8*8-> 16 и останалите де) ще е много по-неефикасно по всяка вероятност (е, зависи колко време цъка 8*8, на баба 9-ка (6809) на времето това май беше 11 цикъла... Ама тя поне си имаше нормален стек и с офсети от него та ставаше лесно). Моят плач е най-вече с делението, почти за всяко ядро ми се е налагало да го правя (дори за power, 32 битовите нямат 64:32 -> 32(или overflow) като CPU32... Всъщност за CPU32 май не се наложи, за HC11 не помня, май не - там имаше и fractional divide ли някакво беше та ставаше каквото ми е трябвало май. |
|
| Автор: | sparkybg [ Пет Фев 01, 2013 2:13 am ] |
| Заглавие: | Re: C за PIC18, използващо хардуерното му умножение? |
8*8->16 хардуерното умножение на PIC18 е един цикъл. 4 умножения със все събиранията, написани на C са 30-ина цикъла. На асемблер може и по-малко. ...ама, не мога бре човек. Някога пишех тонове асемблер за 80386. За 8051 някак пак се справях, ама в пикльовците всичко ми е наопъки. А и да уча асемблер за 8, 16 и 32 битови пикльовци, дето нямат нищо общо, пак не ми е никак комфортно. Сложи и RX серията на Renesas, с която също се заигравам, и мазалото става пълно. Конкретното нещо, за което ползвам 18-ката, не е критично по отношение на това. Предполагаемо и с обикновените библиотеки, дето правят същото за примерно 200 цикъла, пак няма да има грижи. Просто питах дали има някакъв вариант. Дали някое от всичките C-та за тоя процесор поддържа това. И да вика подпрограма не ми пречи, стига подпрограмата да ползва хардуерното умножение. |
|
| Автор: | tgi [ Пет Фев 01, 2013 3:22 am ] |
| Заглавие: | Re: C за PIC18, използващо хардуерното му умножение? |
Е щом не ти трябва ясно, че няма цял ден да го мъчиш. Инак едва ли би те озорило, щом на кривия x86 асемблер си писал коя е тая кривотия дето ще те уплаши Специално за няколкото реда дето ти трябват ти е ясно, че не трябва да му свикваш на дадения асемблер, би ги написал с книжката в ръцете (правил съм го за x86 за не много по-сложно нещо, стана за час-два - преди много години, това ми е писането за x86 Ама за едното по-добро чувство ако имам работещ код не бих го пипал на твое място и аз. Тогава, на времето, като писах това за x86, един се беше уплел дни наред да изшифти няколко бита към един четворен DAC, мажеше нещо на някакво турбо-C май беше (не то беше проблемът разбира се) та на края ми писна и го разплетох набързо; после той някак успя поне асемблерския сорс да навре в C сорса си, за толкова му стигна акъла... някакъв AFD дебъгер май дето имаше. Баси колко години от тогава, над 20. Сякаш беше миналата седмица. |
|
| Автор: | sparkybg [ Пет Фев 01, 2013 3:40 am ] |
| Заглавие: | Re: C за PIC18, използващо хардуерното му умножение? |
За x86 съм писал DOS extender за защитен режим, бях изкормил и едно C и му бях подменил библиотеките да ползва моя Extender. Вървеше и под Windows 95. Бях писал библиотеки за 3D графики, текстури, шейдинг и прочие полюции. Всичко на асемблер. И това докато не изкараха първите версии на SIMD разширенията. Тогава се и обезсмисли всякакво ровене в тая посока, щото на мода дойде хардуерното ускорение. Та, оня асемблер ми е по-логичен. Имаш 8+4 регистъра, някои със специфично предназначение, и толкоз. И командите прости - MOV AX, BX, означава "сложи съдържанието на BX в AX". И всичките в тоя вид - с 2 операнда (с малки изключения). Тук всичко е обратно - там jump, тука branch. Тук и NOP-ове трябва да се оставят тук-там. Там имаше shift-ове по колкото се сетиш позиции с една инструкция, тука - не. И все такива. Там имаше и делене 16/8 ->8, 32/16 -> 16, 64/32 ->32. Незнам. Сигурно ако много ми дотрябва ще се счупя да го понауча. Ама ми е изчекнат и туй то. На PIC32-ката е малко по-човешки като че ли. На RX-а хич не съм го и гледал още. Но помня че на 8051 общо взето се справях без особен зор за дребни неща. Най-вероятно съм поръждясал, и додето не ми дойде съвсем на зор, трудно ще се счупя. |
|
| Автор: | palavrov [ Пет Фев 01, 2013 4:37 am ] | |||||||||
| Заглавие: | Re: C за PIC18, използващо хардуерното му умножение? | |||||||||
В AFD май си имаше вграден асемблер ... колко нощи само с дебъгвал с него ... игрици, пък и не само ... накрая си написах сам дебъгер, супер стелт и запазваше графичните режими като хората ... извинявам се за оффтопика |
||||||||||
| Автор: | ¶ [ Пет Фев 01, 2013 6:21 am ] | |||||||||||||||||||||||||||||||||||||||||||||
| Заглавие: | Re: C за PIC18, използващо хардуерното му умножение? | |||||||||||||||||||||||||||||||||||||||||||||
MPLABX 1.60, MCC18 v3.43, Windows/Linux
Project option: C18(Global Options)/MCC18/Default Storage Class: Static Small memory model
Project option: C18(Global Options)/MCC18/Default Storage Class: Static Large memory model
Project option: C18(Global Options)/MCC18/Default Storage Class: Auto Small memory model
Project option: C18(Global Options)/MCC18/Default Storage Class: Auto Large memory model
Все пак не очаквай, че като има хардуерен множител ще умножи две 16-битови числа с няколко инструкции, прочети какво вършат MULLW и MULWF и ще разбреш защо е така. |
||||||||||||||||||||||||||||||||||||||||||||||
| Автор: | tgi [ Пет Фев 01, 2013 6:23 am ] | |||||||||||||||||||||||||||
| Заглавие: | Re: C за PIC18, използващо хардуерното му умножение? | |||||||||||||||||||||||||||
Е, тоя вид ръжда се смива за нула време при нужда, нищо ти няма. Но да се връща назад човек по езиците към по-криви такива е наистина болезнено, дори да не става дума за пик асемблер. Тоя за 32 е MIPS който по принцип е добра архитектура но пък наличните RISC асемблери са пълна трагедия като мнемоники, x86 дори е доста по-човешки (а той по моите критерии е неизползваемо крив, аз съм разглезен на 68k и сега на VPA). Та нямаш много опции де, аз VPA-то на практика не го предлагам а и го има само за power така или иначе. Ама за едното умножение да си съшиеш няма да имаш нужда и ръждата да махаш, това имах предвид.
Е аз асемблирах с тоя AFD-чавия асемблер де, не "на ръка". То стана и доста бързо, все пак колко е да нашифтиш 4 DAC-а. На хартия на ръка съм асемблирал само за 6800 и малко за 6809. |
||||||||||||||||||||||||||||
| Автор: | ¶ [ Пет Фев 01, 2013 9:05 am ] | |||||||||
| Заглавие: | Re: C за PIC18, използващо хардуерното му умножение? | |||||||||
На MIPS мнемониката на асемблера им е най-малкия проблем - винаги можеш да си я замениш с твоя си посредством макроси. По скоро проблема е, че в почти всяка инструкция адресацията се задава с отместване, което явно трябва да се зададе, дори и да е 0. Поне мен това страшно ме обърква и в един момент реших, че не си заслужава да им уча асемблера. Виж на dsPIC30/33 го научих лесно, щото е доста сносно направен. |
||||||||||
| Автор: | sparkybg [ Пет Фев 01, 2013 11:06 am ] | |||||||||
| Заглавие: | Re: C за PIC18, използващо хардуерното му умножение? | |||||||||
Мерси. Четох какво вършат. То ясно че освен умноженията трябва и друго, ама едно е 230 цикъла, друго е 30. Сега ще видя от къде да сваля някое от тия C-та. |
||||||||||
| Автор: | rumen65 [ Пет Фев 01, 2013 12:32 pm ] |
| Заглавие: | Re: C за PIC18, използващо хардуерното му умножение? |
Компилаторите ги има тук: http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en023073 а ако има нужда от хапчета: http://www.sonsivri.to/forum/index.php |
|
| Автор: | sparkybg [ Пет Фев 01, 2013 12:47 pm ] |
| Заглавие: | Re: C за PIC18, използващо хардуерното му умножение? |
Свалих и инсталирах квото трябва вече. От рутракера. |
|
| Автор: | tgi [ Пет Фев 01, 2013 1:55 pm ] | ||||||||||||||||||
| Заглавие: | Re: C за PIC18, използващо хардуерното му умножение? | ||||||||||||||||||
Да, аз като казах мнемоники имах предвид целия синтаксис. То и за power е същата работа, не може човек да пише много на такова нещо. Освен всичко друго - примерно различни имена на опкодове за същата операция с различен размер вместо .b, .w, .l и т.н. - нали са и load/store системи та операциите са само между регистри, и това да го описва човек идва вповече. Адресациите и те - нали са малко на брой, намацали ги в различни по име опкодове и айде. VPA-то се справя с всичко това - ама ми отне почти година да го направя и да прехвърля кода за cpu32 да тръгне на power, баси и оттогава има над 10 години, кво става бе. Днес сме тук утре пак ни няма, това е положението |
|||||||||||||||||||
| Страница 1 от 4 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|