Perinteisen C :n käyttö

Teetkö hommia vielä tuolla perinteisellä C-kielellä (Ansi-C)? Millaisia hommia sillä nykyään tehdään ja käytetäänkö sitä vielä uusissa projekteissa toteutustyökaluna? Vain mennäänkö jo pelkästään C :n ja Javan tahdissa ...
103055
Äänestä

Muut lukivat myös

Vastaukset 10

Vanhimmat

.. mikrokontrollerit ovat eräs kohde käyttää 'perinteistä' Ceetä.

Ceetä käytän usein 'rungon' rakentamiseen ja saadulla assemblylistauksella viilaan lopullisen koodin puhtaasti assembly-kielisenä.

http://www.microchip.com/1010/index.htm

Äänestä
  • .. pseudokoodina (valitan:sisennykset menevät sekaisin!):

    =============================================================================
    ; UPDATE
    ;
    ;
    ; bcf   _empty_flg;
    ;
    ; for(sched_ptr = 0; sched_ptr < SHEDULETBL; sched_ptr )
    ;    {
    ;
    ;    if((round_tbl[sched_ptr] == '00') & (_empty_flg == FALSE))
    ;      {
    ;       bsf   _empty_flg;
    ;       tmpptr = sched_ptr;
    ;      }
    ;      
    ;    else if((round_tbl[sched_ptr] > '00') & (sched_tbl[sched_ptr] == clock))
    ;      {   
    ;    round_tbl[sched_ptr]--;
    ;        if((_suko_flg == TRUE) & (_suko == TRUE))
    ;         {
    ;          sched_ptr = tmpptr;
    ;          goto   nibble_11;
    ;         }
    ;       }       
    ;            
    ;   }
    ;
    ;
    ;nibble_11:
    ;
    ; if((_suko_flg == TRUE) and (_suko == TRUE))
    ;   {         
    ;    round_tbl[sched_ptr] = '11';
    ;    bcf   _suko_flg;
    ;    retlw   TRUE;
    ;   }
    ;      
    ; retlw FALSE;
    ;
    ;

    update:      clrf   sched_ptr   ;
          bcf   _empty_flg   ;
          
    next_update:   movf   sched_ptr, w   ;
          movwf   fsr
          xorlw   SHEDULETBL   ;       
          btfss   _z
          goto   test_nibble
          
          btfss   _shuko_flg
          retlw   FALSE

          btfss   _shuko
          retlw   FALSE
          
          movf   tmpptr, w   ;
          movwf   sched_ptr
          goto   nibble_11
          
    test_nibble   
          rrf   fsr, f      ; fsr-> round_tbl[], sched_ptr-> sched_tbl[]
          rrf   fsr, f      ;
          movlw   ROUNDMASK   ;
          andwf   fsr, f      ;
          movlw   round_tbl   ;
          addwf   fsr, f      ;
          movlw   NIBBLEMASK   ;
          andwf   sched_ptr, w   ;
          call   and_mask   ;
          andwf   indf, w      ;
          btfss   _z      ;
          goto   test_time   ; round_tbl[sched_ptr] != 00.

          btfsc   _empty_flg
          goto   inc_ptr

          bsf   _empty_flg   ; round_tbl[sched_ptr] == 00.
          movf   sched_ptr, w   ;
          movwf   tmpptr      ;
          goto   inc_ptr    ;
          
    test_time:   movlw   sched_tbl   ; sched_tbl[sched_ptr] == clock?
          addwf   sched_ptr, w   ;
          movwf   fsr      ;
          movf   clock, w   ;
          xorwf   indf, w      ;
          btfss   _z ;
          goto   inc_ptr      ; sched_tbl[sched_ptr] != clock.

    dec_nibble   movf   sched_ptr, w   ; sched_tbl[sched_ptr] == clock.
          movwf   fsr      ; 'nibble'--
          rrf   fsr, f      ;
          rrf   fsr, f      ;
          movlw   ROUNDMASK   ;
          andwf   fsr, f      ;
          movlw   round_tbl   ;
          addwf   fsr, f      ; fsr-> round_tbl[], sched_ptr-> sched_tbl[]
          movlw   NIBBLEMASK   ;
          andwf   sched_ptr, w   ;
          call   add_mask   ;
          addwf   indf, f      ;

          btfss   _shuko_flg   ;
          goto   inc_ptr      ;
                   ;
          btfss   _shuko      ;
          goto   inc_ptr      ;
          
    nibble_11:   movf   sched_ptr, w   ; 'nibble' = '11':
          movwf   fsr
          rrf   fsr, f      ;
          rrf   fsr, f      ;
          movlw   ROUNDMASK   ;
          andwf   fsr, f      ;
          movlw   round_tbl   ;
          addwf   fsr, f      ; fsr-> round_tbl[], sched_ptr-> sched_tbl[]
          movlw   NIBBLEMASK   ;
          andwf   sched_ptr, w   ;
          call   ior_mask   ;
          iorwf   indf, f      ;
          movlw   sched_tbl   ;
          addwf   sched_ptr, w   ;
          movwf   fsr      ;
          movf   clock, w
          movwf   indf
          bcf   _shuko_flg   ;
          bcf   _shuko_led
          retlw   TRUE      ;

    inc_ptr:   incf   sched_ptr, f   ;
          goto   next_update

    Äänestä

  • OC71/testi kirjoitti:

    .. pseudokoodina (valitan:sisennykset menevät sekaisin!):

    =============================================================================
    ; UPDATE
    ;
    ;
    ; bcf   _empty_flg;
    ;
    ; for(sched_ptr = 0; sched_ptr < SHEDULETBL; sched_ptr )
    ;    {
    ;
    ;    if((round_tbl[sched_ptr] == '00') & (_empty_flg == FALSE))
    ;      {
    ;       bsf   _empty_flg;
    ;       tmpptr = sched_ptr;
    ;      }
    ;      
    ;    else if((round_tbl[sched_ptr] > '00') & (sched_tbl[sched_ptr] == clock))
    ;      {   
    ;    round_tbl[sched_ptr]--;
    ;        if((_suko_flg == TRUE) & (_suko == TRUE))
    ;         {
    ;          sched_ptr = tmpptr;
    ;          goto   nibble_11;
    ;         }
    ;       }       
    ;            
    ;   }
    ;
    ;
    ;nibble_11:
    ;
    ; if((_suko_flg == TRUE) and (_suko == TRUE))
    ;   {         
    ;    round_tbl[sched_ptr] = '11';
    ;    bcf   _suko_flg;
    ;    retlw   TRUE;
    ;   }
    ;      
    ; retlw FALSE;
    ;
    ;

    update:      clrf   sched_ptr   ;
          bcf   _empty_flg   ;
          
    next_update:   movf   sched_ptr, w   ;
          movwf   fsr
          xorlw   SHEDULETBL   ;       
          btfss   _z
          goto   test_nibble
          
          btfss   _shuko_flg
          retlw   FALSE

          btfss   _shuko
          retlw   FALSE
          
          movf   tmpptr, w   ;
          movwf   sched_ptr
          goto   nibble_11
          
    test_nibble   
          rrf   fsr, f      ; fsr-> round_tbl[], sched_ptr-> sched_tbl[]
          rrf   fsr, f      ;
          movlw   ROUNDMASK   ;
          andwf   fsr, f      ;
          movlw   round_tbl   ;
          addwf   fsr, f      ;
          movlw   NIBBLEMASK   ;
          andwf   sched_ptr, w   ;
          call   and_mask   ;
          andwf   indf, w      ;
          btfss   _z      ;
          goto   test_time   ; round_tbl[sched_ptr] != 00.

          btfsc   _empty_flg
          goto   inc_ptr

          bsf   _empty_flg   ; round_tbl[sched_ptr] == 00.
          movf   sched_ptr, w   ;
          movwf   tmpptr      ;
          goto   inc_ptr    ;
          
    test_time:   movlw   sched_tbl   ; sched_tbl[sched_ptr] == clock?
          addwf   sched_ptr, w   ;
          movwf   fsr      ;
          movf   clock, w   ;
          xorwf   indf, w      ;
          btfss   _z ;
          goto   inc_ptr      ; sched_tbl[sched_ptr] != clock.

    dec_nibble   movf   sched_ptr, w   ; sched_tbl[sched_ptr] == clock.
          movwf   fsr      ; 'nibble'--
          rrf   fsr, f      ;
          rrf   fsr, f      ;
          movlw   ROUNDMASK   ;
          andwf   fsr, f      ;
          movlw   round_tbl   ;
          addwf   fsr, f      ; fsr-> round_tbl[], sched_ptr-> sched_tbl[]
          movlw   NIBBLEMASK   ;
          andwf   sched_ptr, w   ;
          call   add_mask   ;
          addwf   indf, f      ;

          btfss   _shuko_flg   ;
          goto   inc_ptr      ;
                   ;
          btfss   _shuko      ;
          goto   inc_ptr      ;
          
    nibble_11:   movf   sched_ptr, w   ; 'nibble' = '11':
          movwf   fsr
          rrf   fsr, f      ;
          rrf   fsr, f      ;
          movlw   ROUNDMASK   ;
          andwf   fsr, f      ;
          movlw   round_tbl   ;
          addwf   fsr, f      ; fsr-> round_tbl[], sched_ptr-> sched_tbl[]
          movlw   NIBBLEMASK   ;
          andwf   sched_ptr, w   ;
          call   ior_mask   ;
          iorwf   indf, f      ;
          movlw   sched_tbl   ;
          addwf   sched_ptr, w   ;
          movwf   fsr      ;
          movf   clock, w
          movwf   indf
          bcf   _shuko_flg   ;
          bcf   _shuko_led
          retlw   TRUE      ;

    inc_ptr:   incf   sched_ptr, f   ;
          goto   next_update

    Alas olet vajonnut ja tunnut nauttivan siitä, tietämätön.
    Otan osaa.

    Äänestä

  • Get Life! kirjoitti:

    Alas olet vajonnut ja tunnut nauttivan siitä, tietämätön.
    Otan osaa.

    .. nyt meni hapot sekaisin.

    :)

    Äänestä

Tietenkin C on kovassa käytössä. Teen työkseni C:tä Linuxin kerneliin tulevaan tietoliikenneprotokollaan. Voin suoralta kädeltä listata ainakin nelisen samassa tilanteessa olevaa tuttua. Homma hoituu alusta asti ihan niillä samoilla työkaluilla, jotka tulevat käyttiksen asennuksen mukana. Mitään muita kieliä ei voi ajatellakaan tuohon hommaan. Jos joku tulisi ehdottamaan ko. hommaan Javaa tai C :aa, me varmaan nauraisimme tyypin pihalle..

Äänestä

että oikeeseen hommaan oikea työkalu. Reaaliaika-sovellukset ja sulautetut järjestelmät, niin kovasti mennän vielä C-llä.

Äänestä

" Teetkö hommia.."
Pakkohan niitä on tehdä, projektit kun on aikanaan tehty C:llä. Tai Fortranilla tai assemblerilla...

Mutta C :kin on jo väistyvä kieli. Nykyisin yleisin kieli jo tehdyissä projekteissa on Cobol. 10 vuoden päästä se on varmaan C . Mutta 10 vuoden päästä harvat enää koodaa C :lla.

Ehkä jo 5 vuoden päästä Java on väistyvä kieli (pythonin tai jonkun muun alta)

Mutta silloin kun tarvitaan suoritustehokasta kieltä, niin nämä vanhat jyyrätkin pääsevät oikeuksiinsa.

Äänestä
  • Eikös tuo Cobolin käytön lisääntyminen koske vain kaupallishallinnollisia sovelluksia?

    Äänestä

  • koobboli kirjoitti:

    Eikös tuo Cobolin käytön lisääntyminen koske vain kaupallishallinnollisia sovelluksia?

    ei tuo cobolin käyttö lisäänny, eiköhän ne nykyään väännä aika paljon pankkien ja vakuutusyhtiöiden softia VB:llä (kauhistuttava ajatus).

    Ainakin joku vuosi sitten toiseksi yleisin ohjelmointikieli oli vielä REXX. Eipä ole moni varmaan kuullutkaan moisesta.

    Äänestä

Yksi oikeaan osuva vastaus jo olikin: riippuu mitä softaa teet ja mihin ympäristöön, mitä kieliä voi edes kuvitella.

Pieniin mikrokontrolleriympäristöihin ei välttämättä edes löydy C++ kääntäjää, Javasta puhumattakaan. Esim. iso osa markkinoilla olevista puhelimista on 95%:sesti toteutettu C:llä, loput 5% assemblerilla.

Äänestä

Kommentoi aloitusta


nykyään kirjoitti:

Teetkö hommia vielä tuolla perinteisellä C-kielellä (Ansi-C)? Millaisia hommia sillä nykyään tehdään ja käytetäänkö sitä vielä uusissa projekteissa toteutustyökaluna? Vain mennäänkö jo pelkästään C :n ja Javan tahdissa ...

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu