óÀ½¿¡
¿©±â¿¡¼´Â INtime/iRFW ¾îÇø®ÄÉÀ̼ÇÀÇ °³¹ß¿¡ ´ëÇØ ºüÁö±â ½Ê»óÀÎ ÁÁÁö ¾Ê´Â ó¸®ÀÇ ½ÇÀå°ú ±× ÀÌÀ¯¿¡
´ëÇØ ÇØ¼³Çϰí ÀÖ½À´Ï´Ù. ¾îÇø®ÄÉÀÌ¼Ç °³¹ßÀÇ ÈùÆ®·Î »ç¿ëÇØ ÁÖ¼¼¿ä.
1. Æú¸µ¿¡ ÀÇÇÑ Busy ·çÇÁ
void AnalogInputThread( void )
{
SetRtThreadPriority( NULL_RTHANDLE ,140 );
while( 1 ) {
// ADº¯È¯ °³½Ã Áö·É
SamplingStart( CH1 );
// ADº¯È¯ÀÇ ¿Ï·á ´ë±â(Busy ·çÇÁ)
while( (inbyte( ADC_STATUS_REG ) & MASK) == SAMPLING_BUSY ) {
dwWaitCount++;
}
// ADº¯È¯ µ¥ÀÌÅ͸¦ Ãëµæ
SamplingDataGet( CH1 );
}
}
¾ÆÀ̵éŸÀÓÀ» °¡ÁöÁö ¾Ê´Â ½º·¹µåÀÇ Á¸Àç´Â, ¸®¾ó ŸÀÓ Ã³¸®°è¿¡ ÀÖ¾î¼ÀÇ Ã³¸® ¿ì¼±µµÀÇ °³³äÀ» º°·Î ÀÌÇØµÇ¾î
ÀÖÁö ¾ÊÀº ÇÁ·Î±×·¡¸Ó°¡ ºüÁö±â ½¬¿î À߸øÀÔ´Ï´Ù.
ÀÌ ¿¹¿¡¼´Â ADº¯È¯ ¿Ï·á¸¦ ±â´Ù¸®±â À§Çؼ, Ç÷¡±×ÀÇ º¯È¸¦ Æú¸µ 󸮷ΠȮÀÎÇϰí
ÀÖ½À´Ï´Ù¸¸, ÀÌ ·çÇÁ ±¸°£Àº ¾ÆÀ̵éŸÀÓÀ» ÀüÇô °¡ÁöÁö ¾Ê´Â ±¸Á¶ ¶§¹®¿¡, ¿µ¼ÓÀûÀ¸·Î CPU¸¦ °è¼Ó »ç¿ëÇϴ ó¸®°¡ µÇ°í ÀÖ½À´Ï´Ù. ±× °á°ú, ÀÌ
½º·¹µåº¸´Ù ¿ì¼±µµÀÇ ³ôÀº ½º·¹µå´Â ÀÌ ½º·¹µå¸¦ ÀϽÃÀûÀ¸·Î ¸ØÃß¾î ó¸® °¡´ÉÇÏÁö¸¸, ÇÑ ÆíÀ¸·Î ÀÌ ½º·¹µåº¸´Ù ¿ì¼±µµÀÇ ³·Àº ½º·¹µå¿¡´Â ½ÇÇàÀÇ Âù½º°¡
¹æ¹®ÇÏÁö ¾Ê´Â °ÍÀ» ÀÌÇØÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.
ƯÈ÷ Windows¸¦ ÃÖÀú ¿ì¼±µµÀÇ °Ô½ºÆ®½º·¹µå·Î¼ ¸Â¾ÆµéÀ̰í ÀÖ´Â INtime
¾ÆÅ°ÅØÃÄ¿¡¼´Â, WindowsÀÇ ½ÇÇà Âù½º°¡ ¾ø¾îÁ®, ¿Ü°ü»ó Windows°¡ ¹«°Ì°Ô ´À³¤´Ù, ȤÀº ´Ù¿î ´çÇÑ °Íó·³ º¸ÀÌ´Â °ÍÀÌ Æ¯Â¡À¸·Î
INtimeÀÇ ÀÌÁ¡À» »ì¸®´Â °ÍÀ» ÀüÇô ÇÒ ¼ö ¾ø°Ô µË´Ï´Ù.
INtime¿¡ ÇÑÁ¤ÇÏÁö ¾Ê°í ¸®¾ó ŸÀÓ Ã³¸®°è¿¡¼´Â, Àå½Ã°£¿¡ À̸£´Â
Æú¸µ 󸮸¦ ½Ç½ÃÇÏ´Â °æ¿ì ÀÏÁ¤½Ã°£ °£°Ý¸¶´Ù Æú¸µ ÇÏ´Â °ÍÀÌ Àú¿ì¼±µµ ó¸®ÀÇ µ¿ÀÛÀ» º¸ÁõÇϴµ¥ ÀÖ¾î¼ ÇÊ¿äÇÏ°Ô µË´Ï´Ù. ÀÌ ¶§¹®¿¡ Æú¸µ 󸮿¡´Â
¸¹ÀÌ RtSleep(10)³ª knRtSleep(1) µî¿¡ ÀÇÇÏ´Â ÈÞ½ÄÀÇ ½Ã°£À» ¼³Ä¡ÇÒ Àǹ«°¡ ÀÖ½À´Ï´Ù. ¹«¾ùº¸´Ù, ¾µµ¥ ¾ø°Ô CPU ÆÄ¿ö¸¦ ³¶ºñÇØ
¹ö¸®´Â Æú¸µ 󸮴 ¸®¾ó ŸÀÓ Ã³¸®°è¿¡¼´Â ÀûÀýÇÑ °ÍÀ̶ó°í´Â ºÎ¸£Áö ¸øÇϰí, º»·¡ ÀÌ·¯ÇÑ Ã³¸®´Â ÀÎÅÍ·´Æ® ó¸® ¹æ½ÄÀ¸·Î¼ °³¹ßµÇ¾î¾ß
ÇÕ´Ï´Ù.
2. °íºóµµÀΠǥ½Ã ¿ä±¸
void WorkMoveThread( void )
{
while( 1 ) {
WaitForRtSemaphore( hTrigger ,1 ,WAIT_FOREVER ); // ¹æ¾Æ¼è ´ë±â
dwWorkMove = 0;
while( dwWorkMove++ < numpos ) {
outhword( X1REG ,xpos[dwWorkMove] );
outhword( Y1REG ,ypos[dwWorkMove] );
outhword( DATREG ,0xfffe );
outhword( CMDREG ,0x0001 );
RtSleep( 10 );
printf( "WorkMove (%u) \n" ,dwWorkMove ); // µð¹ö±× Ç¥½Ã
}
}
}
INtime¿¡¼´Â ÄÜ¼Ö ÀÔÃâ·Â°ú ÆÄÀÏ ÀÔÃâ·ÂÀÇ ¿ä±¸´Â, Windows¿¡ ÀεµÇØÁ® 󸮵˴ϴÙ. Áï
Windows¿ÍÀÇ °Å·¡¸¦ ¼ö¹ÝÇϱ⠶§¹®¿¡ ÀÌ·¯ÇÑ ÀÔÃâ·Â 󸮸¦ ÄÝ ÇÏ´Â ½º·¹µå´Â WindowsÀÇ ºÎÇÏ¿¡ Á¿ìµÇ¾î ¸®¾óŸÀÓ¼ºÀ» ÇØÄ¡´Â °Í¿¡
ÁÖÀÇÇÕ´Ï´Ù.
Windows¿¡ ÃæºÐÇÑ ½ÇÇà ½Ã°£À» ÁÖÁö ¾Ê´Â ä ¹Ýº¹ÇØÁö´Â ¸®¾ó ŸÀÓ Ã³¸®Ãø¿¡¼ÀÇ °íºóµµ ÀÔÃâ·Â ¿ä±¸´Â,
WindowsÃø¿¡°ÔÀÇ ºÎ´ãÀ» ´©ÀûÀûÀ¸·Î Áõ´ë½ÃÄÑ, °á°úÀûÀ¸·Î ÀÔÃâ·Â ¿ä±¸¿¡ ´ëÇÑ Ã³¸®°¡ ´ÊÀº »óȲ¿¡ ºüÁö´Â ¾Ç¼øÈ¯ÀÌ
µË´Ï´Ù.
ÄܼÖ/ÆÄÀÏ ÀÔÃâ·Â 󸮰¡ ±â±âÀÇ Á¦¾î Áֱ⸦ ¾îÁö·´È÷´Â °ÍÀÌ ¾ø°Ô ÇÏ·Á¸é , Á¦¾î ½º·¹µå¿Í Ç¥½Ã ½º·¹µå¸¦ ºÐÇÒÇÏ´Â ¼ö¹ýÀ»
ÃëÇÒ ¼ö ÀÖ½À´Ï´Ù.
3. ¿ÀºêÁ§Æ® »ý¼º »èÁ¦ÀÇ ¹Ýº¹
void WorkerThread( void )
{
Todo( );
DeleteRtThread( NULL_RTHANDLE ); // ÀÚ½º·¹µåÀÇ »èÁ¦
}
void ManagerThread( void )
{
while( 1 )
{
WaitForRtSemaphore( hEvent ,1 ,WAIT_FOREVER );
// ÀÛ¾÷ ½º·¹µåÀÇ »ý¼º
CreateRtThread( 180 ,WorkerThread ,4096 ,0 );
}
}
24½Ã°£ °¡µ¿À» ÀüÁ¦·Î ÇÏ´Â Á¦¾î ½Ã½ºÅÛ¿¡ ´ëÇØ¼´Â, ½º·¹µå, ¸Þ¸ð¸®µîÀÇ ¿ÀºêÁ§Æ®¸¦ »ý¼º·»èÁ¦ ¹Ýº¹ÇÏÁö ¾Ê´Â
±¸Á¶°¡ ÀÌ»óÀÔ´Ï´Ù.1°³´Â »ý¼º/»èÁ¦ 󸮰¡ ¾µµ¥ ¾ø´Â ¿À¹öÇìµå°¡ µÇ´Â °ÍÀÌ ÀÌÀ¯ÀÔ´Ï´Ù. 2°³Â°¿¡ ¸Þ¸ð¸® ºÎÁ·µî ÇϵîÀÇ ÀÌÀ¯·ÎºÎÅÍ, ¾î´ÀA
¿ÀºêÁ§Æ®ÀÇ »ý¼ºÀº ½ÇÆÐÇÒ °¡´É¼ºÀÌ ÀÖÀ» ¼ö ÀÖ´Â °ÍÀÔ´Ï´Ù.
¾îÇø®ÄÉÀÌ¼Ç ÇÁ·Î¼¼½º´Â ±âµ¿½Ã¿¡ ÀÖ°í, ½ÇÇà¿¡ ÇÊ¿äÇÑ ¿ÀºêÁ§Æ®¸¦ ¸ðµÎ
»ý¼ºÇØ µÎ°í, ÀÌÈÄ ±×°ÍÀ» »èÁ¦ÇÏ´Â ÀÏ ¾øÀÌ »ç¿ëÇØ µ¹¸®´Â ó¸® ±¸Á¶¿¡ ¹è·ÁÇϸé, Ʋ¸²¾øÀÌ ½ÇÇàÁßÀÇ »ý¼º ½ÇÆÐ¿¡ ÀÇÇÑ ½Ã½ºÅÛ ´Ù¿îÀº ¸·À» ¼ö
ÀÖ½À´Ï´Ù.
4. °úµµÇÑ ½º·¹µå ºÐÇÒ
void Stage1Thread( void )
{
while( 1 )
{
RtSleep( 1000 );
ReleaseRtSemaphore( hStart2 ,1 ); // Stage2ThreadÀÇ °³½Ã
todo1( );
WaitForRtSemaphore( hEnd2 ,1 ,WAIT_FOREVER ); // Stage2ThreadÀÇ Á¾·á ´ë±â
}
}
void Stage2Thread( void )
{
while( 1 )
{
WaitForRtSemaphore( hStart2 ,1 ,WAIT_FOREVER ); // ±âµ¿ ´ë±â
ReleaseRtSemaphore( hStart3 ,1 ); // Stage3ThreadÀÇ °³½Ã
todo2( );
WaitForRtSemaphore( hEnd3 ,1 ,WAIT_FOREVER ); // Stage3ThreadÀÇ Á¾·á ´ë±â
todo3( );
ReleaseRtSemaphore( hEnd2 ,1 ); // ¿Ï·á¸¦ ÅëÁö
}
}
void Stage3Thread( void )
{
while( 1 )
{
WaitForRtSemaphore( hStart3 ,1 ,WAIT_FOREVER ); // ±âµ¿ ´ë±â
todo4( );
ReleaseRtSemaphore( hEnd3 ,1 ); // ¿Ï·á¸¦ ÅëÁö
}
}
±â´É ´ÜÀ§¿¡ ½º·¹µå¸¦ ³ª´©´Â °ÍÀº À¯È¿ÇÑ °ø¹ýÀÔ´Ï´Ù¸¸, ³Ê¹« ³ª´©¸é ¿ÀÈ÷·Á °¡½Ã¼ºÀ̳ª Á¡°Ë ¼ºÀ» ÇØÄ¡°í,
½º·¹µåÀÇ º¯È¯¿¡ ÇÊ¿ä·Î ÇÏ´Â OS¿À¹öÇìµå³ª ÀÚ¿ø ¼Òºñ°¡ ¾µµ¥ ¾ø°Ô Áõ´ëÇÕ´Ï´Ù. ¿¹¸¦ µé¾î ½º·¹µå°£ÀÇ µ¿±â ±¸Á¶¸¦ °¡Áö´Â ÄÉÀ̽º¿¡¼´Â, ÇÔ¼ö
³ª´©±â·Î ³¡¸¶Ä¡´Â °ÍÀÌ ¿ÀÈ÷·Á À¯È¿ÇÑ °æ¿ì°¡ ÀÖ½À´Ï´Ù.