| Автор |
Съобщение |
|
michev
Ранг: Форумен бог
Регистриран на: Сря Юли 11, 2007 10:16 am Мнения: 1730
|
 Бит тест на int32 число
Здравейте.
От скоро започнах да се занимавам с avr микроконтролери.
Вчера седнах да пиша една програмка за ATmega8, която да ми управлява чип свързан към MCU-то (lmx2306).
Всичко вървеше нормално докато не се сблъсках със следния проблем -
нужно е да проверя дали бит Н от едно 20 битово число е = 1.
Начина по който го направих определено е нещо грешен или аз пропускам нещо.
Въпроса ми е - къде греша и има ли друг начин да направя това?
Поздрави,
Десислав Мичев
|
| Сря Юли 11, 2007 10:28 am |
|
 |
|
BrainStorm
Ранг: Почетен член
Регистриран на: Пон Юли 04, 2005 11:51 pm Мнения: 651 Местоположение: София
|
_________________ От наше село са види връо, ама от връо се невиди наше село ... що така и я незнам .. ?!?
|
| Сря Юли 11, 2007 10:38 am |
|
 |
|
Yanek
Ранг: Новодошъл
Регистриран на: Пет Юни 29, 2007 10:59 pm Мнения: 113
|
Може и така:
По този начин си спестяваш труда да знаеш колко битово е числото, т.е. на кой бит се намира най-старшата единица.
Още нещо да кажа:
Възможно е ако нямаш код в блока с условието оптимизатора да пренебрегва изцяло условието. Ако си сигурен, че е изключен значи причината е другаде;
|
| Сря Юли 11, 2007 10:59 am |
|
 |
|
Gogo
Ранг: Форумен бог
Регистриран на: Чет Фев 24, 2005 11:41 pm Мнения: 1049 Местоположение: Pz
|
|
| Сря Юли 11, 2007 11:13 am |
|
 |
|
michev
Ранг: Форумен бог
Регистриран на: Сря Юли 11, 2007 10:16 am Мнения: 1730
|
Много БЛАГОДАРЯ Yanek!
Грешката била вярна  - оптимизатора бил виновен.
Изключих го и всичко тръгна.
|
| Сря Юли 11, 2007 11:14 am |
|
 |
|
michev
Ранг: Форумен бог
Регистриран на: Сря Юли 11, 2007 10:16 am Мнения: 1730
|
Както казах - начинаещ съм, но ми се вижда нелогично да резервирам 4 байта за mask при условие чи винаги е единица. Или нещо не съм разбрал идеята ти?
|
| Сря Юли 11, 2007 11:21 am |
|
 |
|
michev
Ранг: Форумен бог
Регистриран на: Сря Юли 11, 2007 10:16 am Мнения: 1730
|
Та в крайна сметка се получи работещ код
Благодаря за бързите отговори и хубавите идеи.
|
| Сря Юли 11, 2007 11:46 am |
|
 |
|
Gogo
Ранг: Форумен бог
Регистриран на: Чет Фев 24, 2005 11:41 pm Мнения: 1049 Местоположение: Pz
|
 Re: Бит тест на int32 число
Може би аз не те разбрах или не си задал правилно въпроса си!
По начина на @Yanek става, но условието ще се изпълни на всяка срещната еденица, а не само ако бит Н е "1". Освен това, стойността на cmd след проверката ще се промени. Ако е без значение - добре, но не си го упоменал в "заданието".
|
| Сря Юли 11, 2007 12:01 pm |
|
 |
|
michev
Ранг: Форумен бог
Регистриран на: Сря Юли 11, 2007 10:16 am Мнения: 1730
|
 Re: Бит тест на int32 число
В мен е проблема  Тука не схващам. Каква е разликата м/у двата начина при условие че въртя цикъл за да премина през всичките 21 бита на cmd?
Нека се променя. Така или инъче за да програмирам LMX2306 трябва да извикам функцията 3 пъти с 3 различни стойности на cmd.
|
| Сря Юли 11, 2007 12:09 pm |
|
 |
|
Yanek
Ранг: Новодошъл
Регистриран на: Пет Юни 29, 2007 10:59 pm Мнения: 113
|
 Re: Бит тест на int32 число
michev, така или иначе вече си го направил. Освен това твоя и на Gogo начини са идентични. Реално при сравнението все едно ще се заемат 4 байта, независимо дали е обявено като локална променлива mask или не е. На компилатора така или иначе са му необходими 4 байта за да шифтва дали mask дали единицата.
|
| Сря Юли 11, 2007 1:31 pm |
|
 |
|
\__
Ранг: Минаващ
Регистриран на: Пет Сеп 21, 2007 1:51 pm Мнения: 5 Местоположение: Варна
|
|
| Сря Окт 03, 2007 11:24 am |
|
|