INtime Tech

INtime Top


INtime2.23 ÀÌÀüÀÇ ¹öÁ¯°úÀÇ »óÀ§(ßÓêÞ)·ÁÖÀÇÁ¡


 

óÀ½¿¡

INtime ¹öÁ¯ 2.23ÀÌÈÄ¿¡¼­´Â APIC¸¦ ¼­Æ÷Æ®ÇÕ´Ï´Ù. ÀÌ APIC¸¦ »ç¿ëÇÏ´Â °ÍÀ¸·Î½á Á¾·¡ 16¿¡ °íÁ¤µÇ°í ÀÖ´ø ÀÎÅÍ·´Æ® Á¡¼ö¸¦ È®ÀåÇÒ ¼ö ÀÖÀ» °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù.  ÀÌ ¼­Æ÷Æ®¿¡ ¼ö¹ÝÇØ INtimeÀÇ ÇÁ·Î±×·¥À¸·ÎºÎÅÍ APIC ´ëÀÀ Ç÷§Æû»óÀÇ Çϵå¿þ¾î¿¡ ¾×¼¼½º ÇÒ ¶§,  ÀϺΠ¾îÇø®ÄÉÀÌ¼Ç ÄÚµåÀÇ º¯°æÀ» ¼ö¹ÝÇÏ´Â Â÷ÀÌÁ¡ÀÌ ÀÖ½À´Ï´Ù.
INtimeÀÌ APIC¸¦ »ç¿ëÇØ µ¿ÀÛÇÏ´ÂÁö, ¾Æ´Ñ°¡´Â ÀνºÅç µÇ°í ÀÖ´Â WindowsÀÇ HALÀÇ Á¾·ù·ÎºÎÅÍ ÆÇº°ÇÒ ¼ö ÀÖ½À´Ï´Ù. Advanced Programable Interrupt ControllerÀÇ ÆäÀÌÁö¸¦ ÂüÁ¶ÇØ ÁÖ¼¼¿ä.

 

1. ÀÎÅÍ·´Æ® ·¹º§ »êÃâ ó¸®ÀÇ º¯°æ

  • INtime2.23 ¹öÁ¯ ÀÌÈÄ¿¡¼­´Â »õ·Î¿î PC°¡ °¡Áö´Â APIC ±â±¸¿¡ ´ëÀÀÇ߱⠶§¹®¿¡, PCI µð¹ÙÀ̽º°¡ ÀÌ¿ë °¡´ÉÇÑ IRQ ¹øÈ£´Â Á¾·¡ÀÇ 0~15·ÎºÎÅÍ Å«ÆøÀ¸·Î Áõ°¡Çϰí, 16~254ÀÇ °ªÀ» °¡Áú °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù.

  • Á¾·¡ÀÇ ¾îÇø®ÄÉÀÌ¼Ç Äڵ忡 ´ëÇØ¼­´Â, ¹è¿­À» »ç¿ëÇØ IRQ ¹øÈ£¸¦ ÀÎÅÍ·´Æ® ·¹º§Ä¡ IRQ0_ LEVEL~ IRQ15_ LEVEL·Î º¯È¯Çϰí ÀÖÀ¸¹Ç·Î, ÀÌ °³¼Ò¿¡´Â ÀÌÇÏ¿Í °°Àº º¯°æÀ» ¼ö¹ÝÇÕ´Ï´Ù.

  • ÀÌÇÏÀÇ º¯°æÀº, Á¾·¡ÀÇ PCȯ°æ(IRQ0~IRQ15 ¹üÀ§)¿¡ À־ ÀÌ¿ëÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù.

 /*****************************************************************************
 * FUNCTION:     GetPciInteruptLevel
 * PARAMETERS:   1. PCI Vendor ID
 *               2. PCI Device ID
 * RETURNS:      encode µÈ ÀÎÅÍ·´Æ® ·¹º§, ¶Ç´Â ½ÇÆÐ½Ã 0xffff
 \*****************************************************************************/
 WORD GetPciInterruptLevel( WORD wPciVendorId, WORD wPciDeviceId )
 {
     PCIDEV          dev;
     WORD            level;
     BYTE            irq;
 
     dev.wVendorId   = wPciVendorId;
     dev.wDeviceId   = wPciDeviceId;
     dev.wDeviceIndex= 0;           // óÀ½¿¡ °ËÃâµÈ µð¹ÙÀ̽º
     if (!PciFindDevice(&dev))
         return 0xFFFF;             // µð¹ÙÀ̽º´Â ¹ß°ßµÇÁö ¾Ê´Â´Ù
 
     if (dev.byIntLine == 0 || dev.byIntLine == 255)
         return 0xFFFF;             // ÀÌ µð¹ÙÀ̽º¿¡´Â IRQ°¡ ¾ø´ÂÁö, ÀÎÁ¤¹ÞÁö ¸øÇÑ IRQÄ¡ÀÌ´Ù
 
     // ÀÎÅÍ·´Æ® ·¹º§ÀÇ ²¨³»
     irq             = dev.byIntLine;
     level           = (irq < 8) ? (irq*16 + 8) :  ((1 + irq/8) * 16 + (irq % 8));
  
     return level;
 }
  • INtime 3.0 ¿¡¼­´Â PCI ¶óÀ̺귯¸® ÄÝ¿¡ API°¡ Ãß°¡µÇ¾ú½À´Ï´Ù. INtime 3.0 °³¹ß ȯ°æ»ó¿¡¼­ Àü¼úÀÇ ÄÚµå´Â ´ÙÀ½°ú °°ÀÌ Ãâ·ÂµË´Ï´Ù£º

 /*****************************************************************************
 * FUNCTION:     GetPciInteruptLevel
 * PARAMETERS:   1. PCI Vendor ID
 *               2. PCI Device ID
 * RETURNS:      encode µÈ ÀÎÅÍ·´Æ® ·¹º§, ¶Ç´Â ½ÇÆÐ½Ã 0xffff
 \*****************************************************************************/
 WORD GetPciInterruptLevel( WORD wPciVendorId, WORD wPciDeviceId )
 {
     PCIDEV          dev;
     WORD            level;
     BYTE            irq;
 
     dev.wVendorId   = wPciVendorId;
     dev.wDeviceId   = wPciDeviceId;
     dev.wDeviceIndex= 0;           // óÀ½¿¡ °ËÃâµÈ µð¹ÙÀ̽º
     if (!PciFindDevice(&dev))
         return 0xFFFF;             // µð¹ÙÀ̽º´Â ¹ß°ßµÇÁö ¾Ê´Â´Ù
     
     // PCI µð¹ÙÀ̽ºÀÇ À¯È¿È­
     PciEnableDevice(&dev);
  
     return PciGetInterruptLevel(&dev);
 } 

 

2. ProcessMaxPriority ÄÝÀÇ º¯°æ

  • ÀÎÅÍ·´Æ®

    󸮸¦ °¡Áö´Â ¾îÇø®ÄÉÀÌ¼Ç Äڵ尡 ÀÎÅÍ·´Æ® ½º·¹µå¸¦ »ý¼ºÇϱâ À§Çؼ­, ¹Ì¸® RTÇÁ·Î¼¼½º¿¡ ¿ë¼­µÇ´Â »óÇÑ priorityÀÇ º¯°æÀ» ½Ç½ÃÇϰí ÀÖÀ» °ÍÀÔ´Ï´Ù.INtime2.23 ¹öÁ¯ ÀÌÈÄ¿¡¼­´Â ÀÌ priority »óÇÑ¿¡ ÀÇÇØ ³ôÀº ¼³Á¤À» ½Ç½ÃÇÏ´Â °ÍÀÌ ÇÊ¿äÇß½À´Ï´Ù.

 ProcessMaxPriority( NULL_RTHANDLE ,0 ); // Priority »óÇÑÀ» öÆó

3. RSI µå¶óÀ̹öÀÇ ¾÷µ¥ÀÌÆ®

  • Æó»ç RSI µå¶óÀ̹ö Á¦Ç°À» 2.23 ¹öÁ¯ ÀÌÀü¿¡ ÀÌ¿ëÇϽðí ÀÖ¾úÀ» °æ¿ì, ÀÌ»ó°ú °°Àº ¼öÁ¤ÀÌ º£Ç®¾îÁø µå¶óÀ̹ö ¹öÁ¯¿¡ ¾÷µ¥ÀÌÆ®¸¦ ÇÊ¿ä·Î ÇÏ´Â °æ¿ì°¡ Àֱ⠶§¹®¿¡, »ó´ãÇØ ÁֽʽÿÀ.


HOME | INtime