336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

이직을 하며 가지게된 한주간의 휴식

나름 소중한 시간을 그냥 의미없이 보내기는 싫고

새출발을 다심할겸 또 안타까운 일도 잊을겸

계룡산 정상 정복을 결심!!


부지런히 모든봉우리를 다 오르겠다는 생각으로

서둘러 아침을 먹고 출발했더니

차가운 날씨와 어스름 남아있는 새벽공기에 감도는 청량감

뭐든 할수 있을것같은 상쾌한 아침이 나를 맞이해주었다

저 멀리 어렴풋 보이는 반가운 사천왕문

불과 얼마전 까지만해도 알록달록한 붉으스름한 빛깔을 뽐냈을 나무들인데

그들도 이제는 겨울을 준비하는 모습들 

그 안에 느껴지는 왠지모를 허전함..

아무렴 어떠하리 외로우니까 사람인걸

사천왕문을 지나고 얼마되지않아 눈에띈 단풍나무

다들 다가오는 겨울을 준비하는 지금

갓난아이의 숨결과같은 연약한 햇살에 제법 아름다운 빛깔을 뽐내고있는

이녀석을 보며고 있으니 마냥 흐믓해진다

항상 계룡산에 오면 갑사 나 동학사를 서로 넘어가는 것이 고작이었는데

이번 만큼은 세개의 봉우리를 다정복하리라 다짐!!

그래서 코스를 갑사->연천봉->관음봉->삼불봉->갑사 로 결정

뭐 사람이 많지 않기는 했지만

오르는길을 제법가파르고 험난해서인지 나홀로 산행이었다

제법 힘도들고 더웠지만

바람에 바스러지는 낙엽소리에 기분만큼은 시원한 산행이었다

주변 경관을 즐기며 오르다보니 어느세 연청봉고개에 다다랐다

등산로 상에는 2시간 거리라 되어있지만 왠걸 한시간도 안걸렸다

아마도 내 애인인 자전거님께서 튼실한 허벅지를 만들어 주셔신 덕분이겠느니...
드디어 다다른 첫번째 목표 연천봉

나름 잠시 감격에 취해... 보려했으나 역시 어찌나 바람이 날카로운지

바람막이도 그리 도움을 주지 못해하고

바람의 매서움 앞에 그저 눈물만 찔끔...

못난 아들내미를 위해 어머니게서 싸주신 과일등 군것질거리를 먹으며 체력 보충후

다음목표인 관음봉을 향했다

봉우리에서 봉우리의 이동이라 그런지

약간의 오르막과 내리막만 있을뿐 그리 어렵지 않은 길이었다

출발한지 얼마되지않아 오른 문제의 관음봉...

망할 이놈에 고소공포증 저 비석까지 올라갔다 무서워 죽는줄 알았다

이놈에 고소공포증은 뭘해도 고쳐지지 않으니 참 큰일

다시금 마음을 진정시키고 이제 하나남은 삼불봉을 향해 출발!!

아!! 어찌 하오리까!!

내가 조금전에 관음봉 올라갈때 왜 가파르고 험난하다 했을까...

철제 계단(계단이라 쓰고 사다리라 읽어야 할판!!) 옆으론 완전 천길 낭떠러지

내가 이길을 가야하나 순간 고민이 들었다

그러나 고민도 잠시...

나 스스로를 괴롭히기 스킬발동!!

생각따윈 필요없다 그저 앞으로 나아갈뿐!!

그래도 무서운건 어쩔수 없다

그저 철제 난간을 꼭!! 붙들고 한칸한칸 앞으로 나아갈뿐


얼만큼 걸었을까?

정신을 차려보니 어느덧 봉우리 같은것이 보인다!!

결론부터 얘기하면 요녀석을 지나 더 가야했지만

요녀석을 보는순간 신기하게도 다리에 힘이 들어가고

양옆으로 펼쳐진 바위절벽도 약간은 덤덤해졌다

012

드디 다다른 삼불봉!!

예상못했던 난코스였기에 그랬던 것일까?

창피한 얘기지만 예전에 대둔산 구름다리 건널때보다 더 무서웠다 ㅡ.ㅜ

어쨋든 고소공포증을 극복하고 무사히 계획대로 등산 성공!!

삼불봉에서 정상주로 맥주한캔~ㅋ

역시 술은 좋은거 나쁜거를 떠나 기분좋게 마시는 술이 최고다~!!

내려오는 길에 오랫만에 들러본 갑사

평일 오전이라 사람이 별로없어 한적하니 좋았다

난 역시 시골사람 이어서일까? 이런 한적함에서 느껴지는 여유가 너무도 좋다

그리고 갑사옆 한적한곳에 자리잡은 전통찻집

음... 사진은 매우 구리게 나왔지만 찻집 옆으로 산골 계곡물이 흐르고

바람이 살랑 불어오면 정적을 깨는 풍경소리가 운치있는

너무도 가보고싶은 곳이다

생각보다 시간이 많이 남아 이곳에서 책이라도좀 읽다 갈까 했지만

언제나 그런것처럼 혼자가아닌 미래네 내 옆에 있어줄 사람과 같이 가리다


이제 나도 나이가 들어가는것일까?

예전엔 푸른 물결의 광활한 바다를 좋아했는데

요즘은 산이 좋아진다...

아니 산이 좋다기보단 나를 돌아볼 계기가 되어주는 산행이 즐거운것 같다

앞으로도 종종 산행을 즐겨봐야겠다^^
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


이직하고 첫 제대로된 야근

난 생각보다 일이 진척이 없을뿐이고..

다른분들은 모두 퇴근했을뿐이고!!

책상에 가득한 종이컵은 뭥미....

젠장!! 그래 오늘함 제대로 다퉈보자 누가 이기는지!!

'끄적임' 카테고리의 다른 글

법륜스님 주례사  (0) 2009.12.08
독서에 중독되다...  (0) 2009.12.02
새로운 출발!!  (0) 2009.11.15
비가 싫다!!  (1) 2009.08.12
라이더 입문!  (1) 2009.08.11
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


Android SDK 설치중 문제발생

뭥미? 난 그저 클릭만 했을뿐인데...

Failed to fetch URL https://dl-ssl.google.com/android/repository/repository.xml, reason: HTTPS SSL error. You might want to force download through HTTP in the settings.

해결은 아주 간단하다

Linux나 Windows 상관없이 Available Package 텝에서

Add Site를 누르고 밑에 주소를 입력해주면 끝~!

http://dl-ssl.google.com/android/repository/repository.xml

참 쉽죠~잉
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

내일...

새로운 직장에서 새로운 사람들과 만남

제법 부담스러운 업무가 맏겨질껏 같지만

그래도 두려움보단 기대가 앞선다

난 내자신을 믿으니까!!


한해가 마무리 되어가는 지금이지만

일뿐 아니라 모든면에서 새출발한다는 각오로

Do your best 연택!!

'끄적임' 카테고리의 다른 글

독서에 중독되다...  (0) 2009.12.02
야근열매 섭취중...  (0) 2009.11.27
비가 싫다!!  (1) 2009.08.12
라이더 입문!  (1) 2009.08.11
요즘 내모습이...  (0) 2009.07.07
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
소스가 간단해서 분석이 쉬울줄 알았는데 왠걸 젠장...
interrupt가 복병.. interrupt에서 중요한일은 다 하기때문에
I2C도 잘 모르는 상황에서 시간을 좀 잡아먹을듯 싶다
I2C를 잘 모른다면 먼저 S3C2240 Datasheet에서 I2C부분 읽어볼것을 추천

CamReset();

 

          rCIGCTRL |= (1<<31); //camera interface software reset

             Delay(10);

             rCIGCTRL &= ~(1<<31);

 

 

rCLKCON |= (1<<19);         //Control HCLK into Camera enable

 

CamPortSet();

 

void CamPortSet(void)

{

                          save_GPJCON = rGPJCON;

                          save_GPJDAT = rGPJDAT;

                          save_GPJUP = rGPJUP;

            

                          rGPJCON = 0x2aaaaaa;     // 0010 1010 1010 1010 1010 1010 1010

                                                             // GPJ CAM으로 set

                          rGPJDAT = 0;                   // Data register 0으로 초기화

                          rGPJUP = 0;                     // GPJ pull-up

}

 

 

ChangeUPllValue(60, 4, 1);              // UPLL clock = 96MHz, PLL input 16.9344MHz

 

void ChangeUPllValue(int mdiv,int pdiv,int sdiv)

{

    rUPLLCON = (mdiv<<12) | (pdiv<<4) | sdiv;  

}

 

 

rCLKDIVN|=(1<<3);            // UCLK 48MHz setting for UPLL 96MHz

// 0:48MHz, 1:24MHz, 2:16MHz, 3:12MHz...

                                        // Camera clock = UPLL/[(CAMCLK_DIV+1)X2]

Uart_Printf("1...\n");

             switch(USED_CAM_TYPE)             // USED_CAM_TYPE = 5

             {

             case CAM_AU70H :

                           if (AU70H_VIDEO_SIZE==1152)

                                        SetCAMClockDivider(CAMCLK24000000); //Set Camera Clock for SXGA

                           if (AU70H_VIDEO_SIZE==640)

                                        SetCAMClockDivider(CAMCLK16000000); //Set Camera Clock for VGA

                           break;

             case CAM_S5X3A1 :

                           SetCAMClockDivider(CAMCLK24000000); //Set Camera Clock for SXGA

                           break;

             default :              // 24MHz

                           SetCAMClockDivider(CAMCLK24000000); //Set Camera Clock 24MHz s5x532, ov7620

 

void SetCAMClockDivider(int divn) // CAMCLK24000000 = 5

{

             rCAMDIVN = (rCAMDIVN & ~(0xf))|(1<<4)|(divn); // CAMCLK is divided..

}

 

 

                           //Uart_Printf("rCAMDIVN : 0x%x\n", rCAMDIVN);        //0x11

                           break;

             }

 

Uart_Printf("2...\n");

// Initializing camera module

CamModuleReset(); // s5x532 must do this..

 

void CamModuleReset(void)

{

             switch(USED_CAM_TYPE)             //USED_CAM_TYPE = 5

             {

             case CAM_OV7620 : // reset - active high

             case CAM_S5X532 : // reset - active low, but H/W inverted.. so, in this case active high

             case CAM_S5X433 : // reset - active low, but H/W inverted.. so, in this case active high

             case CAM_S5X3A1 : // reset - active low, but H/W inverted.. so, in this case active high

                           rCIGCTRL |= (1<<30);          //external camera reset high

                           Delay(30);

                           rCIGCTRL &= ~(1<<30);     //external camera reset low

                           break;

             case CAM_AU70H : // reset - active low

#if REBIS

             case CAM_MICRON: // reset - active low CAM_MICRON = 5

#endif

             default :

                          //CIGCTRL [30] : External camera processor reset or power down

                           rCIGCTRL &= ~(1<<30);     //external camera reset low

                           Delay(10);

                           rCIGCTRL |= (1<<30);        //external camera reset high

                           break;

             }

}

 

 

Delay(500); // ready time of s5x433, s5x532 IIC interface. needed...

CameraModuleSetting();

 

int CameraModuleSetting(void)

{

             unsigned int i, j, save_E, save_PE, RegAddr, RegData;

             static U8 rdata[256];

             int donestatus;

         

             IicPortSet();

             //void IicPortSet(void)

             //{

             //           save_GPECON = rGPECON;

             //           rGPECON = rGPECON & ~(0xf<<28) | (0xa<<28);

             //                                                               //GPE15:IICSDA , GPE14:IICSCL     

             //}                                                              //IIICSDA : IIC-bus data

                                                                              //IICSCL : IIC-bus clock

             // for camera init, added by junon

             pISR_IIC = (unsigned)Cam_IICInt;                 //explain two rows

 

 

 

             rINTMSK &= ~(BIT_IIC);

 

             //Enable ACK, Prescaler IICCLK=PCLK/512,

             //Enable interrupt, Transmit clock value Tx clock=IICCLK/16

             rIICCON  = (1<<7) | (1<<6) | (1<<5) | (0x3);

 

             rIICADD  = 0x10;                    //24A0 slave address = [7:1]

             rIICSTAT = 0x10;                    //IIC bus data output enable(Rx/Tx)

             rIICLC = (1<<2)|(3);                                     // SDAOUT has 5clock cycle delay

 

             donestatus=1;

 

#if REBIS

#else

             Camera_WriteBlock();

//           Camera_ReadBlock();

#endif

            

             return donestatus;

}

 

 

void __irq Cam_IICInt(void)

{

 

#if REBIS            //REBIS = 1

 

             U32        iicSt, i;

 

             ClearPending(BIT_IIC);

             //#define              ClearPending(bit) {\           //BIT_IIC = 0x1 << 27

             //                         rSRCPND = bit;\  //INT_IIC Requested(Source pending register)

             //                         rINTPND = bit;\    //INT_IIC Requested(Interrupt pending register)

             //                         rINTPND;\

             //           }           

 

             iicSt   = rIICSTAT;

             rINTMSK |= BIT_IIC;

 

             if(iicSt & 0x8){}           //When bus arbitration is failed.

             if(iicSt & 0x4){}           //When a slave address is matched with IICADD

             if(iicSt & 0x2){}           //When a slave address is 0000000b

             if(iicSt & 0x1){}           //When ACK isn't received

 

             switch( _CAMiicMode )

             {

                           case CAMRDDATA:          

                                        if( (_CAMiicDataCount--) == 0 )       // case by I2C_Read16 or Rd_CamIIC

                                        {

                                                     _CAMiicData[_CAMiicPt++] = rIICDS;

           

                                                     rIICSTAT = 0x90;  // Stop MasRx condition

                                                                                           // Rx/Tx Enable & Master receive mode

                                                     rIICCON               = 0xEF;  // Resuems IIC operation.

                                                                                           //prescaler? Tx clock = IICLK/(15 + 1)

                                                                                           // No interrupt pending

                                                                                           // IIC-Bus Tx/Rx interrupt enable

                                                                                           // IICCLK = fPCLK/512

                                                                                           // IIC-bus acknowledge enable

                                                     Delay(1);             // Wait until stop condtion is in effect., Too long time... 

                                                                              //# need the time 2440:Delay(1), 24A0: Delay(2)

                                                                                // The pending bit will not be set after issuing stop condition.

                                                     break;   

                                        }

                                        _CAMiicData[_CAMiicPt++] = rIICDS;     //The last data has to be read with no ack.

                                                                 //IICDS : Multi-master IIC-bus transmit/receive data shift register

                                        if( (_CAMiicDataCount) == 0 )

                                        {

                                                     rIICCON = 0x6F;   // Resumes IIC operation with NOACK

                                                                              //in case of S5X532 Camera.

                                                                              //prescaler? Tx clock = IICLK/(15 + 1)

                                                                              // No interrupt pending

                                                                              // IIC-Bus Tx/Rx interrupt enable

                                                                              // IICCLK = fPCLK/512

                                                                              // IIC-bus acknowledge disable

                                        }

                                        else

                                        {

                                                     rIICCON = 0xEF;  // Resumes IIC operaton with ACK.

                                        }

                                        break;

 

                           case CAMWRDATA:                       //case by I2C_Write16 or Wr_CamIIC

                                        if( (_CAMiicDataCount--) == 0 )

                                        {

                                                     rIICSTAT = 0xD0;  // stop MasTx condition

                                                     rIICCON               = 0xEF;  // resumes IIC operation.

                                                     Delay(1);             // wait until stop condtion is in effect.

                                                                              // # need the time 2440:Delay(1), 24A0: Delay(2)

                                                                               // The pending bit will not be set after issuing stop condition.

                                                     break;

                                        }

 

                                        rIICDS    = _CAMiicData[_CAMiicPt++];        //_iicData[0] has dummy.

                                        for(i=0;i<10;i++);                                         //for setup time until rising edge of IICSCL

                                        rIICCON  = 0xEF;                                         //resumes IIC operation.

                                        break;

 

                           case CAMSETRDADDR:                // case by I2C_Read16 or Rd_CamIIC

                          // Uart_Printf("[S%d]",_iicDataCount);

                                        if( (_CAMiicDataCount--) == 0 )

                                        {

                                                     rIICSTAT = 0xD0;  //stop MasTx condition

                                                     rIICCON               = 0xEF;  //resumes IIC operation.

                                                     Delay(1);                           //wait until stop condtion is in effect.

                                                     break;                  //IIC operation is stopped because of IICCON[4]   

                                        }

 

                                        rIICDS    = _CAMiicData[_CAMiicPt++];

                                        for(i=0;i<10;i++);          //for setup time until rising edge of IICSCL

                                        rIICCON  = 0xEF;          //resumes IIC operation.

                                        break;

                           default:

                                        break;     

             }

 

             rINTMSK &= ~BIT_IIC;

 

#else      // #if REBIS

 

             U32 iicSt,i;

 

             ClearPending(BIT_IIC);

             iicSt   = rIICSTAT;

             rINTMSK |= BIT_IIC;

 

             if(iicSt & 0x8){}           //When bus arbitration is failed.

             if(iicSt & 0x4){}           //When a slave address is matched with IICADD

             if(iicSt & 0x2){}           //When a slave address is 0000000b

             if(iicSt & 0x1){}           //When ACK isn't received

 

             switch(_CAMiicMode) {

                           case CAMRDDATA:

                                        if((_CAMiicDataCount--)==0) {

                                                     _CAMiicData[_CAMiicPt++] = rIICDS;

           

                                                     rIICSTAT = 0x90;      //Stop MasRx condition

                                                     rIICCON  &= ~(1<<4);      //Resumes IIC operation.

                                                     Delay(1);             //Wait until stop condtion is in effect., Too long time... 

                                                                              // # need the time 2440:Delay(1), 24A0: Delay(2)

                                                                                //The pending bit will not be set after issuing stop condition.

                                                     break;   

                                        }     

                                        _CAMiicData[_CAMiicPt++] = rIICDS;     //The last data has to be read with no ack.

 

                                        if((_CAMiicDataCount)==0)

                                                     rIICCON &= ~((1<<7)|(1<<4));          //Resumes IIC operation with NOACK

                                                                                                        // in case of S5X532 Cameara 

//                                                   rIICCON = 0x6f;                              //Resumes IIC operation with NOACK

                                                                                                        // in case of S5X532 Cameara        

                                        else

                                                     rIICCON &= ~(1<<4);         // Resumes IIC operation with ACK

                                                                                           // No interrupt pending

                                        break;

                           case CAMWRDATA:

                                        if((_CAMiicDataCount--)==0) {

                                                     rIICSTAT = 0xd0;                //stop MasTx condition

                                                     rIICCON  &= ~(1<<4);                //resumes IIC operation.

                                                     Delay(1);             // wait until stop condtion is in effect.

                                                                              // # need the time 2440:Delay(1), 24A0: Delay(2)

                                                                  //The pending bit will not be set after issuing stop condition.

                                                     break;   

                                        }

                                        rIICDS = _CAMiicData[_CAMiicPt++];        //_iicData[0] has dummy.

                                        for(i=0;i<10;i++);                  //for setup time until rising edge of IICSCL

                                                     rIICCON &= ~(1<<4);                     //resumes IIC operation.

                                        break;

                           case CAMSETRDADDR: //Uart_Printf("[S%d]",_iicDataCount);

                                        if((_CAMiicDataCount--)==0) {

                                                     rIICSTAT = 0xd0;                //stop MasTx condition

                                                     rIICCON  &= ~(1<<4);                //resumes IIC operation.

                                                     Delay(1);      //wait until stop condtion is in effect.

 

                                                     break;                  //IIC operation is stopped because of IICCON[4]   

                                        }

                                        rIICDS = _CAMiicData[_CAMiicPt++];

                                        for(i=0;i<10;i++);          //for setup time until rising edge of IICSCL

                                                     rIICCON &= ~(1<<4);             //resumes IIC operation.

                                        break;

                           default:

                                        break;     

             }

 

             rINTMSK &= ~BIT_IIC;

 

#endif    //           #if REBIS #else

 

}

 

 

void Camera_WriteByte(void)

{

 

#if REBIS

 

             U32 RegAddr;

             U16 RegData;

 

             Uart_Printf("Input Write Register Address of %s\n=>", CAM_NAME);

             RegAddr = (U32)Uart_GetIntNum();

   

             Uart_Printf("Input Write Transfer Data into %s\n=>", CAM_NAME);

             RegData = (U16)Uart_GetIntNum();

 

             I2C_Write16( CAM_ID, RegAddr, RegData );

 

#else

 

             unsigned int i, j, save_E, save_PE, RegAddr, RegData, pageNo;

         

#if (USED_CAM_TYPE==CAM_S5X532)||(USED_CAM_TYPE==CAM_S5X3A1)

             Uart_Printf("Input Write Page No of %s\n=>", CAM_NAME);

             pageNo = (U8)Uart_GetIntNum();

#endif

 

             Uart_Printf("Input Write Register Address of %s\n=>", CAM_NAME);

             RegAddr = (U8)Uart_GetIntNum();

   

             Uart_Printf("Input Write Transfer Data into %s\n=>", CAM_NAME);

             RegData = (U8)Uart_GetIntNum();

 

#if (USED_CAM_TYPE==CAM_S5X532)||(USED_CAM_TYPE==CAM_S5X3A1)

             Wr_CamIIC(CAM_ID, (U8)0xec, pageNo);  // set Page no

#endif

             Wr_CamIIC(CAM_ID, (U8)RegAddr, RegData); // set register after setting page number

 

#endif    //           #if REBIS #else

 

}

 

 

Camera_WriteBlock();

 

void SetCAMClockDivider(int divn) // CAMCLK24000000 == 5

{

             rCAMDIVN = (rCAMDIVN & ~(0xf))|(1<<4)|(divn); // CAMCLK is divided..

}

 

 

Uart_Printf("Initializing end...\n");

'Programming > 그밖에...' 카테고리의 다른 글

섹시한 라이브러리?? libsexy.so  (0) 2010.09.14
Android SDK 설치시 error  (0) 2009.11.20
Touch screen Calibration  (0) 2009.09.10
CIE L*a*b*  (0) 2009.06.01
단위환산표  (0) 2008.05.21
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

요즘 firmware 단에서 보드 가지고 놀다가 터치스크린을 이용해 뭐좀 해볼라는데
제길... 정확히 mapping하는게 아무래도 쉬운일이 아닌것 같아 구글링해본 결과...
역시 간단히 해결될만한건 아니었다.

공개되어있는 소스를 참고해 결국 해결!

http://www.ezcircuits.net/zbxe/10646
↑↑이곳에서 touch screen calibration에 관한 소스를 볼수 있다

'Programming > 그밖에...' 카테고리의 다른 글

Android SDK 설치시 error  (0) 2009.11.20
S3C2440 Camera test 분석(진행중...)  (0) 2009.10.15
CIE L*a*b*  (0) 2009.06.01
단위환산표  (0) 2008.05.21
PIC Basic으로 구현한 자동응답 디지털 도어락  (0) 2008.05.15
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

[_cdecl ] 마지막 인자부터 스택에 저장하며, 함수를 호출한 쪽에서 스택을 정리한다

[_stdcall] 마지막 인자부터 스택에 저장하며, 호출된 함수가 스택을 정리한다(Win32 API)

[_fastcall] 레지스터에 인자 두 개를 넣고, 마지막 인자부터 스택에 저장하며 호출된 함수가
               스택을 정리한다

_stdcall 은 보통 API들이 사용하고 있다. 그 이유는 스택을 정리하는 코드가 API 쪽에 있게 되면 그 만큼 메모리를 절약할 수 있기 때문이다


* 예제 코드

1. _cdecl 

C++
 void _cdecl Func( int a, int b, int c, int d)

    return;
}

void main()

    Func( 1, 2, 3, 4);
}
Assembly
; 12 : Func( 1, 2, 3, 4);
    00000 6a 04 push 4
    00002 6a 03 push 3
    00004 6a 02 push 2
    00006 6a 01 push 1
    00008 e8 00 00 00 00 call ?Func@@YAXHHHH@Z
    0000d 83 c4 10 add esp, 16  
; 함수 호출부분만 보면 모두 스택에 넣고 호출 후 제거


2. _stdcall 

C++
void _stdcall Func( int a, int b, int c, int d)

    return;
}

void main()

    Func( 1, 2, 3, 4);

 

Assembly 
// Func의 반환부분
// "ret 16”은 "add esp,16" "ret 0”과 같음
00000 c2 10 00 ret 16 ; 00000010H

// 함수 호출부분 4개의 인자를 스택에 쌓고 제거하지 않는다
00000 6a 04 push 4
00002 6a 03 push 3
00004 6a 02 push 2
00006 6a 01 push 1
00008 e8 00 00 00 00 call ?Func@@YGXHHHH@Z ; Func

3. _fastcall 

C++
void _fastcall Func( int a, int b, int c, int d)

    return;
}

void main()

    Func( 1, 2, 3, 4);

Assembly 
// Func의 반환부분 나머지 두 개는 레지스터에 있다
00000 c2 08 00 ret 8

// 함수 호출부분
// 2개의 인자를 스택에 쌓고,
// 2개는 레지스터에 넣는다
// 역시 스택을 제거하지 않음
00000 6a 04 push 4
00002 6a 03 push 3
00004 ba 02 00 00 00 mov edx, 2
00009 b9 01 00 00 00 mov ecx, 1
0000e e8 00 00 00 00 call ?Func@@YIXHHHH@Z ; Func  


336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

오후쯤 비가 그치길래

라이딩을 위해 일찍 퇴근했는데

젠장맞을...

양재천 주변 왜이리 침수된 곳이 많은지

우회에 우회를 해서

잠실 종합경기장 근처까지 갔지만

강물에 완전히 침수된 도로는 보이지도 않고...

이번주는 오늘이 마지막 기회였는데 제길....

'끄적임' 카테고리의 다른 글

야근열매 섭취중...  (0) 2009.11.27
새로운 출발!!  (0) 2009.11.15
라이더 입문!  (1) 2009.08.11
요즘 내모습이...  (0) 2009.07.07
여름은 열정의 계절!  (0) 2009.06.30
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

큰맘 먹고 구입한 미니벨로

DAHON SPEED D7 white

필름 현상 하면 그때 제대로 사진을 올리겠음...

미니벨로라서 속도감은 그리 기대 안했는데

그래도 비싼값 하는지 변변치 않은 엔진임에도

라이딩 후 GPS로그를 확인해본 결과

평속 16km/h 순간 최대 최대 31Km/h

기대이상의 결과에 상당히 만족


요건 일요일(8월 9일) 첫 라이딩한 경로

폭염주위보 인줄도 모르고 열심히 라이딩한결과

팔이 아주 먹음직스럽게 익어버렸지만 그래도 잼있다ㅋㅋㅋ

'끄적임' 카테고리의 다른 글

새로운 출발!!  (0) 2009.11.15
비가 싫다!!  (1) 2009.08.12
요즘 내모습이...  (0) 2009.07.07
여름은 열정의 계절!  (0) 2009.06.30
편지  (0) 2009.06.25
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


MFC에서 주로 자용하는 CString 의경우

문자열을 분리할때 타입 문제로 strtok()를 사용하기 복잡해지는데

이역시도 간단한 대처 방법이 있으니...

BOOL AFXAPI AfxExtractSubString (
   CString& rString,
   LPCTSTR lpszFullString,
   int iSubString,
   TCHAR chSep = '\n'
);

rString
  • Reference to a CString object that will receive an individual substring.

lpszFullString
  • String containing the full text of the string to extract from.

iSubString
  • Zero-based index of the substring to extract from lpszFullString.

chSep
  • Separator character used to delimit substrings.


바로 요녀석 되겠다

간단한 예를 들어보면
CString strData = "write test.txt 0x00000000 1024";
CString strCmd, strFilename, strAddress, strLength;
AfxExtractSubString(strCmd, strData, 0, ' ');         // => write
AfxExtractSubString(strFilename, strData, 1, ' ');   // => test.txt
AfxExtractSubString(strAddress, strData, 2, ' ');    // => 0x00000000
AfxExtractSubString(strLength, strData, 3, ' ');      // => 1024

참 쉽죠~잉!

+ Recent posts