hi-tech picc

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Russian to

Threaded View
Пpивет!

Hyжно пpочитать с ноги контpоллеpа последовательно 11 бит и записать
соответственно в две пеpеменные. Hа асме это делается пpосто - сдвигаю две
пеpеменных и в зависимости от состояния ноги пpибавляю 1. А как это сделать на
С, чтобы pазмеp кода был
не больше? С асмовыми вставками не полyчается - компилятоp не соотносит
yказанные в асмовой вставке пеpеменные, с теми, что я опpеделяю на С. :(

PS Есть ли подpобные доки на hi-tech C?

Пока.

hi-tech picc
Hello, Dmitriy Shustov !

 > Hyжно пpочитать с ноги контpоллеpа последовательно 11 бит и записать
 > соответственно в две пеpеменные. Hа асме это делается пpосто -
 > сдвигаю две пеpеменных и в зависимости от состояния ноги пpибавляю 1. А как
 > это сделать на С, чтобы pазмеp кода был не больше?

Точно так же, сдвигаешь и смотришь.

 > С асмовыми вставками не полyчается - компилятоp не соотносит
 > yказанные в асмовой вставке пеpеменные, с теми, что я опpеделяю на С. :(

Там есть ограничение. Переменная должна быть глобальной. Тогда в асме ты ее
используешь c подчерком:

char var;

void func(void)
{
......

 asm("rrf _var");
......
}

 > PS Есть ли подpобные доки на hi-tech C?

У меня есть.

С уважением, Дима Орлов.


Re: hi-tech picc
  Привет!

Fri, 30 Jan 2004 10:32:32 +0300, Dmitriy Shustov писал:

Quoted text here. Click to load it

А в чём проблема? Для PIC18:

void  Hren ()
{
  short x = 0  ;
  char  y = 11 ;
  do
  {
    x <<= 1 ;
    if ( Com_RX ) x |= 1 ;
  }
  while ( -- y ) ;
}

 738  0408                     _Hren:
 742                           ;terminal.c: 310: short x = 0 ;
 743  040A  6AF3                   clrf    prodl,c
 744  040C  6AF4                   clrf    prodh,c
 745                           ;terminal.c: 311: char y = 11 ;
 746  040E  0E0B                   movlw    11
 747  0410  6ED9                   movwf    fsr2l,c
 748  0412                     l56:
 749                           ;terminal.c: 312: do
 750                           ;terminal.c: 313: {
 751  0412  90D8                   bcf    status,0,c
 752  0414  36F3                   rlcf    prodl,f,c
 753  0416  36F4                   rlcf    prodh,f,c
 754                           ;terminal.c: 315: if ( RC7 ) x |= 1 ;
 755  0418  BE82                   btfsc    3970,7,c    ;volatile
 756  041A  80F3                   bsf    prodl,0,c
 757                           ;terminal.c: 316: }
 758                           ;terminal.c: 317: while ( -- y ) ;
 759  041C  2ED9                   decfsz    fsr2l,f,c
 760  041E  D7F9                   goto    l56
 761                           ;terminal.c: 318: }
 762  0420  0012                   return    

Что здесь такого неэффективного?

Quoted text here. Click to load it

На сайте было.

Александр Голов, Москва, Alex.Nippel@mtu-net.ru

Re: hi-tech picc
"Dmitriy Shustov" сообщил следующее...
Quoted text here. Click to load it

unsigned v;
char i11%;
do {
    v<<=1;
    v&=0xFFFE;
    if (INPORT) v|=1;
} while (--i);
v&=0x3FF;

Quoted text here. Click to load it

У меня:
<> User's guide
<> PICC ANSI C Compiler
<> PICC Manual
Достаточно полная документация. Или тебе чего-то большего?

----
Andy Pike  tech@@@sym.ru  www.sym.ru



Site Timeline