⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shmarr1.pll

📁 一个嵌入式系统的C代码
💻 PLL
字号:
PROGRAM Shm1 (INPUT, OUTPUT);

{-----------------------------------------------------------}
{ PURPOSE: Shared memory example using shm segment array    }
{          Binary semaphore used to syncrhonize access      }
{                                                           }
{ AUTHOR:  David Jones                                      }
{ DATE:    18-APR-94                                        }
{-----------------------------------------------------------}

VAR
  count, semA, semB, shm, value, result, temp : INTEGER;

BEGIN
  { create two semaphores and set both to 0 }
  { semA - is used to block Shm1 waiting for Shm2 }
  { semB - is used to block Shm2 waiting for Shm1 }
  semA := SYSTEM(SEM_CREATE, 'sem1', 0);
  semB := SYSTEM(SEM_CREATE, 'sem2', 0);

  shm := SYSTEM(SHR_CREATE, 'myshm', 10);

  IF (semA > 0) AND (shm > 0) THEN
  BEGIN
    
    Write('Enter a number ==> ' );
    FOR count := 1 TO 10 DO
    BEGIN
      Write( count#, ', ' );
      temp := SYSTEM(SHR_WRITE, shm, count-1, count)
    END;
    Writeln;  Writeln;

    { Signal other process that it now has a value to work with }
    temp := SYSTEM( SEM_SIGNAL, semB );    
    
    { Wait for other process to read value }
    { from shared memory and square it }
    Write('Waiting.. ');
    temp := SYSTEM(SEM_WAIT, semA);
    WriteLn;  WriteLn;

    FOR count := 1 TO 10 DO
    BEGIN
      result := SYSTEM(SHR_READ, shm, count-1);
      WriteLn( count#, ' squared is ', result# )
    END;    
    
    temp := SYSTEM(SEM_CLOSE, semA);
    temp := SYSTEM(SEM_CLOSE, semB);
    temp := SYSTEM(SHR_CLOSE, shm)
  END;
END.

{------------------------------ EOF -----------------------------}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -