STKTEST.C
上传用户:sunrenlu
上传日期:2022-06-13
资源大小:1419k
文件大小:1k
源码类别:

操作系统开发

开发平台:

DOS

  1. #include <stdio.h>
  2. #include <rtos.h>
  3. /*
  4.  * Demonstrate's eRTOS ability to catch stack overflow in child threads.
  5.  * We will recursively call demo() until it crashes
  6.  * In normal cases, will detect overwriting of SS:0 and SP wraparound
  7.  */
  8. /*********************************************************/
  9. void demo(void)
  10. {
  11.     cprintf("r Current  SS:SP : %04x:%04x  Stack Used : %04x  ", _SS, _SP, rt_stackused( NULL ) );
  12.     rt_sleep(1);
  13.     demo();
  14. }
  15. /*********************************************************/
  16. void test(DWORD arg)
  17. {
  18.     cprintf("r Starting SS:SP : %04x:%04xrn ", _SS, _SP );
  19.     cprintf("with stack length %04x rn", kcurthread->th_stacklen );
  20.     demo();
  21. }
  22. /*********************************************************/
  23. main()
  24. {
  25.     int i;
  26.     // changing the next line would all that is needed to make this
  27.     // a pre-emptive multithreaded application
  28.     kdebug = 1;
  29.     rt_init(100);
  30.     kcheckstacksig = 0; /* turn off SP:00 testing, or else we will get *
  31.                          * stack signature error.                      */
  32.     cputs("demonstrate stack overflow...rn");
  33.     rt_timerfreq( 100 );
  34.     rt_newthread( test,  1,4096, 0, "worker 1" );
  35.     for ( i = 0 ; i < 1000 ; ++i ) {
  36.         rt_sleep( 10 );
  37.     }
  38. }