| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Достъп до индивидуален байтове в C http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=9820 |
Страница 1 от 1 |
| Автор: | milenjs [ Сря Яну 25, 2012 12:21 pm ] |
| Заглавие: | Достъп до индивидуален байтове в C |
Дращя на CCS-то едно програмка - меря продължителност с CCP модула но 16-те бита на Timer1 не ми достигат и ползвам още един байт в софтуерен брояч. Та може ли директно да запиша този байт след първите два в int32 променлива? Изрових това за достъп до първия байт но синтаксиса ме хвърли в тих ужас, не съм много навътре в С програмирането int_val=*((int8 *)&val); |
|
| Автор: | Nikola Kirov [ Сря Яну 25, 2012 1:06 pm ] | |||||||||
| Заглавие: | Re: Достъп до индивидуален байтове в C | |||||||||
С това можеш да достъпваш както си искаш 32 bit променлива. Само дето като правиш операции с 32 битовата стойност тоя байта нали се сещаш че ще има значение.
un32 * p = (un32*)&val; p->_8._2 = xxxxx; |
||||||||||
| Автор: | milenjs [ Сря Яну 25, 2012 1:27 pm ] |
| Заглавие: | Re: Достъп до индивидуален байтове в C |
Благодаря, направих го така: #define BytePtr(var, offset) (char *)((char*)&var + offset) и ползвам например *BytePtr(period, 2) = timer1_add; |
|
| Автор: | Реконструктор [ Сря Яну 25, 2012 1:28 pm ] | ||||||||||||||||||
| Заглавие: | Re: Достъп до индивидуален байтове в C | ||||||||||||||||||
В стандартното класическо C може.
|
|||||||||||||||||||
| Автор: | tolstolob [ Сря Яну 25, 2012 2:46 pm ] |
| Заглавие: | Re: Достъп до индивидуален байтове в C |
Пик-а засмуква тиня при работа с указатели. Както казава Киров - с юниън става най-добре. |
|
| Автор: | relsys [ Сря Яну 25, 2012 5:35 pm ] | |||||||||
| Заглавие: | Re: Достъп до индивидуален байтове в C | |||||||||
Или пък ползвай MikroC:
|
||||||||||
| Автор: | milenjs [ Чет Яну 26, 2012 8:49 am ] | |||||||||
| Заглавие: | Re: Достъп до индивидуален байтове в C | |||||||||
Off а на протон как красиво ставаше, чак ми липсва
Горното с #define ми върши екстра работа, благодаря на всички. |
||||||||||
| Автор: | sv_shady [ Чет Яну 26, 2012 12:17 pm ] | |||||||||
| Заглавие: | Re: Достъп до индивидуален байтове в C | |||||||||
Ако много ще се ползват някакви такива битови/байтови операции union-а е готино решение, но ето нещо в духа на С, без указатели:
|
||||||||||
| Автор: | Nikola Kirov [ Чет Яну 26, 2012 12:37 pm ] |
| Заглавие: | Re: Достъп до индивидуален байтове в C |
timer |= byte << 16; byte << 16 е винаги нула При компилаторите за пик е грубо решение. Дори да го направш както си трябва с 32 битова променлива,хич няма да оптимизира и ще шифтне и после ще направи анд. Като работиш с PIC 12,16,18 най правилно е да се ползва union. Ама milenjs си го знаем. Хич и не си е напрегнал главата да прочете какво е това union и има ли почва у нас. И milenjs обърни внимание че в C е приетo имената на макросите да са с главни букви изцяло. За яснота на кода. Отделно твоя вариант ще даде код който работи в зависимост от това дали процесора ти е с big или litle endian организация. А трябва да си създаваш навици да пишеш портируем код ако искаш да се занимаваш професионално с програмиране. И отделно с използването на макроси не трябва да се прекалява. Едно че са проблем като дебъгваш,не се получава добра визуализация на ставащото,и второ че кода често не се оптимизира добре в някои случаи. Като в този случай например. Почти на 100 процента съм сигурен че ще даде по раздут код от използването на union. При тоз малоумен компилатор който ползваш трябва изразяването да става максимално близко до това което трябва да стане и просто. |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|