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

📄 tprt.c

📁 一个嵌入式实时操作系统源码
💻 C
字号:

/*
   Test program for checking CTask printer buffering.

   The program will send the file given as parameter to the printer.
*/

#include <stdio.h>
#include <conio.h>
#include <process.h>
#include <ctype.h>

#include "tsk.h"
#include "prt.h"
#include "tsksup.h"

#define PORT 0x80    /* LPT1 (relative) */
#define POLL 0       /* Set to 1 to use polling */

#define STACKSIZE 2048

unsigned int _stklen = 3 * STACKSIZE;  /* For Turbo C: Two tasks + main Task Stack */

tcb tcb1, tcb2;
flag halt, ready;

byte xmtbuf [1024];
int endrun;
int pport;

FILE *pfile;


void far task1 (void)
{
   int i;

   printf ("Task 1 started\n");

   /* Copy file into printer pipe. Using a larger file buffer would be more
      efficient, but this is only a demo.
   */

   while (!endrun && ((i = getc (pfile)) != EOF))
      prt_write (pport, (byte)i, 0L);

   if (endrun)
      return;

   /* Wait for printer to complete output. */

   if (!prt_complete (pport))
      puts ("Waiting for Printer");
   prt_wait_complete (pport, 0L);

   /* Stop program */

   set_flag (&halt);
   set_flag (&ready);
}


/*
   Second task just for fun. Echoes keyboard characters, aborts printing
   when 'e' is entered. Also outputs snapshot dump on 'd'.
*/

void far task2 (void)
{
   int ch;

   printf ("Task 2 started\n");
   while (!endrun)
      {
      ch = t_read_key () & 0xff;
      putch (ch);
      ch = tolower (ch);
      endrun = (ch == 'e');
#if (TSK_NAMED)
      if (ch == 'd')
         snapshot (stdout);
#endif
      }

   set_flag (&halt);
}



void main (int argc, char **argv)
{
   char stack1 [STACKSIZE];
   char stack2 [STACKSIZE];

   if ((pfile = fopen (argv [1], "rb")) == NULL)
      {
      printf ("Error opening file '%s'\n", argv [1]);
      exit (1);
      }

   endrun = 0;
   install_tasker (0, 0, IFL_STD, "TPRT");

   pport = prt_install (PORT, POLL, PRI_STD, xmtbuf, sizeof (xmtbuf));

   create_task (&tcb1, task1, stack1, STACKSIZE, PRI_STD, NULL TN("TASK1"));
   create_task (&tcb2, task2, stack2, STACKSIZE, PRI_STD, NULL TN("TASK2"));
   create_flag (&halt TN("Halt"));
   create_flag (&ready TN("Ready"));

   start_task (&tcb1);
   start_task (&tcb2);

   preempt_on ();
   wait_flag_set (&halt, 0L);

   endrun = 1;
   puts ("******** Main Task *********");
   wait_flag_set (&ready, 0L);

   puts ("******** End Run *********");
   preempt_off ();
   prt_remove (pport);
   remove_tasker ();

   fclose (pfile);
}


⌨️ 快捷键说明

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