winter 发表于 2007-5-10 18:46:34

上传《时间触发嵌入式系统设计模式 8051系列微控制器开发可靠应用》PDF

下载的超星格式,然后自己转成PDF的



点击此处打开armok01153597.pdf

caolong 发表于 2007-5-10 19:32:13

好东西顶!!!!!!!!!!!!!!!!!!

zhanjay 发表于 2007-5-10 19:51:05

非常好的东东,谢谢

luo730210 发表于 2007-5-10 19:51:19

好东西

yangsen 发表于 2007-5-10 20:05:42

收下,谢谢了

Gorgon_Meducer 发表于 2007-5-10 20:15:16

强烈推荐这本书!我买过!

archeng504 发表于 2007-5-10 20:26:27

想必是好书,下来看看,谢了

powerful 发表于 2007-5-10 20:32:32

楼主辛苦了!

abc2001 发表于 2007-5-10 20:54:52

非常感谢.

sswanglei 发表于 2007-5-10 22:44:54

我来补上本书带的光盘相关代码~

点击此处下载armok01153619.rar

jerico 发表于 2007-5-10 23:00:44

谢谢你们的资料,这本书好不好呢..

diannaoza 发表于 2007-5-10 23:43:21

非常谢谢

shabby 发表于 2007-5-11 00:09:03

Gorgon Meducer 傻孩子 都推荐这本书,不下不行呀。./emotion/em025.gif

ansion520 发表于 2007-5-11 06:40:02

好东东,顶你!

ATmega8515 发表于 2007-5-11 10:09:46

这本书多少钱一本?

winter 发表于 2007-5-11 11:16:02

当当和卓越都卖60

sswanglei 发表于 2007-5-11 12:52:15

看电子版就行啦。我买了本,都没怎么看。这本书挺厚,但字间距比较大,内容并不是很多,价格还比较贵。

liuqian 发表于 2007-5-11 13:16:52

谢谢

AuToCTRL 发表于 2007-5-11 15:00:08

下载了,呵呵

finenesszhang 发表于 2007-5-11 16:48:49

已下载。。。

谢谢

eddia2000 发表于 2007-5-11 18:25:56

我一直在找它啊,今天能下到它真是好開心,謝謝樓主的共享!!!

swordKING 发表于 2007-5-11 18:56:06

前几天刚刚看到说这是一本好书,谢谢

cyberjok 发表于 2007-5-11 20:45:45

这书没有什么的,看看它的代码就行,没有什么独到之处,书要85啊,好像,不值。。。

TonyCai 发表于 2007-5-11 21:46:43

抢了,谢了,小林=winter

shaozh 发表于 2007-5-12 19:26:10

我两年前发的时间触发嵌入式系统设计模式在avrM8中的移植贴,老早就被删啦!唉!还有完整的实例呢!

zhuyi 发表于 2007-5-13 12:24:11

很糟糕的一本书,还卖那么贵,买回来仔细看才发现没什么内容

AVR_AFA 发表于 2007-5-13 12:53:37

我买过这本书,很好的一本书。



讲了很多很实用的东西,电子基础方面及时间调度系统都写的非常好。



谢谢楼主分享。

ningmeng7294 发表于 2007-5-14 13:01:21

shaozh 再发一个

wj414 发表于 2007-5-14 22:22:01

我同学刚买了一本,后悔死了,怎么早没看到这有下呢?

呵呵



好东西

shaozh 发表于 2007-5-15 15:21:42

这是项目中的实例



时间触发合作式调度器在avr中的移植(cvavr编译器)



/*****************************************************

This program was produced by the

CodeWizardAVR V1.24.7d Standard

Automatic Program Generator

?Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l.

http://www.hpinfotech.com

e-mail:office@hpinfotech.com



Project : os_mega16

Version :

Date    : 2006-2-12

Author: SHAOZH                           

Company : SZH                              

Comments:





Chip type         : ATmega16L

Program type      : Application

Clock frequency   : 8.000000 MHz

Memory model      : Small

External SRAM size: 0

Data Stack size   : 256

*****************************************************/



#include <mega16.h>



#define uchar unsigned char

#define uintunsigned int

#define ulong unsigned long



void LED1_Flash(void);

void LED2_Flash(void);

void LED3_Flash(void);

                           

/********************************************************

    ××××××××××××××公用数据类型声明××××××××××××××××××××

    每个任务的存储器总和为7个字节

********************************************************/

typedef struct {

                void (* pTask)(void);

                uint Delay;

                uint Period;

                uchar RunMe;

               }sTask;         



/********************************************************

    ××××××××××××××公用的常数××××××××××××××××××××

    任务的最大数目

    注意:每个新建项目必须调整   

********************************************************/   

#define OS_MAX_TASKS   (4)         //每个新建项目必须调整

//*******************************************************

#define ERROR_OS_MANY_TASKS    1      //任务满

#define ERROR_OS_DELETE_TASK   2      //任务删除

#define RETURN_ERROR         1      //任务删除

#define RETURN_OK            0         

               

/********************************************************

    ××××××××××××××公用变量定义××××××××××××××××××××

/********************************************************/

sTask OS_tasks_G;   //任务队列   

uchar Error_code_G=0;             //显示错误代码   

uchar old_Error_code_G=0;         //保存显示错误代码

//*****************私有函数原型**************************

static void OS_Go_To_Sleep(void);

//*****************私有变量******************************

static uint Error_tick_count_G;   //跟踪自从上一次记录错误以来的时间

static uchar Last_error_code_G;   //上次错误代码(在一分钟后复位)



#define OS_REPORT_ERRORS1       //1:显示错误代码0:不显示错误代码函数   

#define OS_SLEEP_MODE   1       //1:进入空闲0: 不进入空闲      



/********************************************************

    ××××××××××××××公用的函数原型××××××××××××××××××××

    调度器内核函数

********************************************************/               

void OS_Dispatch_Tasks(void);

uchar OS_Add_Task(void(*)(void),const uint ,const uint );

uchar OS_Delete_Task(const uchar);

void OS_Report_Status(void);   



/********************************************************

      ×××××××××××××××调度函数×××××××××××××××××

********************************************************/

void OS_Dispatch_Tasks(void)

   {uchar Index;

      for (Index=0;Index<OS_MAX_TASKS;Index++)

         {if(OS_tasks_G.RunMe>0)   

            { (*OS_tasks_G.pTask)();

                OS_tasks_G.RunMe-=1;

                if(OS_tasks_G.Period==0)

                  {OS_Delete_Task(Index);

                  }

            }

         }                           

   // OS_Report_Status();//报告系统状态

   // OS_Go_To_Sleep();    //进入空闲模式      

   }

/********************************************************

      ×××××××××××××××加任务函数×××××××××××××××××

      Fn_P    任务名(必须是无传人参数,无返回值的任务)

      DELAY   在任务第一次被运行之前的间隔(时标)

      PERIOD如果为 0 :该函数将在DELAY确定的时间被调用一次

            如果为非0 : 该函数将按DELAY的值在确定的时间被重复调用

********************************************************/

uchar OS_ADD_Task(void (*pFunction)(),const uint DELAY,const uint PERIOD)

      {uchar Index=0;

       while ((OS_tasks_G.pTask!=0)&&(Index<OS_MAX_TASKS))

             {Index++;

             }         

       if(Index==OS_MAX_TASKS)

         {Error_code_G=ERROR_OS_MANY_TASKS;   //设置全局错误变量

          return OS_MAX_TASKS;                //返回错误代码

         }      

       OS_tasks_G.pTask=pFunction;

       OS_tasks_G.Delay=DELAY;

       OS_tasks_G.Period=PERIOD;

       OS_tasks_G.RunMe=0;

       return Index;   

      }

/********************************************************

      ×××××××××××××××删除任务函数×××××××××××××××××

********************************************************/

uchar OS_Delete_Task(const uchar TASK_INDEX)

    {bit Return_code;

   if(OS_tasks_G.pTask==0)

      {Error_code_G=ERROR_OS_DELETE_TASK;//设置全局错误变量

         Return_code=RETURN_ERROR;         //返回错误代码

      }

   else

      {Return_code=RETURN_OK;

      }

   OS_tasks_G.pTask=0x0000;

   OS_tasks_G.Delay=0;

   OS_tasks_G.Period=0;

   OS_tasks_G.RunMe=0;

   return Return_code;                   //返回状态

    }                                                

/********************************************************

      ×××××××××××××××显示错误代码函数×××××××××××××××××

********************************************************/

#if OS_REPORT_ERRORS

void OS_Report_Status()

   {

             if(Error_code_G!=old_Error_code_G)

               {

                //在次处编写错误显示程序

                old_Error_code_G=Error_code_G;                  

                if(Error_code_G!=0)

                  {Error_tick_count_G=60000;

                  }      

                else

                  {Error_tick_count_G=0;      

                  }                                          

               }                                             

             else

               {if(Error_tick_count_G!=0)

                  {if(--Error_tick_count_G==0)

                     {Error_code_G=0;      //复位错误代码

                     }

                  }

               }                              

   }                              

#endif

/********************************************************

      ×××××××××××××××进入空闲函数×××××××××××××××××

********************************************************/

#if OS_SLEEP_MODE   

#include <SLEEP.h>

void OS_Go_To_Sleep(void)

{ sleep_enable();//使能进入空闲

    idle();          //进入空闲      

}                           

#endif   

/********************************************************

      ×××××××××××××××调度器初始化函数×××××××××××××××××

********************************************************/

void OS_Init_T0(void)

   {uchar i;

      for(i=0;i<OS_MAX_TASKS;i++)

         {OS_Delete_Task(i);

         }                  

      Error_code_G=0;

      // Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: 125.000 kHz

      TCCR0=0x03;

      TCNT0=0x7D;

// Timer(s)/Counter(s) Interrupt(s) initialization

      TIMSK=0x01;   

   }                                             

/********************************************************

      ×××××××××××××××启动调度器函数×××××××××××××××××

********************************************************/      

OS_Start(void)

   {#asm("sei")

   }   

      

/********************************************************

      ×××××××××××××××调度中断函数×××××××××××××××××

********************************************************/

interrupt void timer0_ovf_isr(void)

{uchar Index;

TCNT0=0x7D;

for(Index=0;Index<OS_MAX_TASKS;Index++)

    {if(OS_tasks_G.pTask)

       {if(OS_tasks_G.Delay==0)

         {OS_tasks_G.RunMe+=1;

            if(OS_tasks_G.Period)

            {OS_tasks_G.Delay=OS_tasks_G.Period;

            }

         }                                                   

      else

          {OS_tasks_G.Delay-=1;

          }   

       }

    }



}   





void main(void)

{

// Declare your local variables here



// Input/Output Ports initialization

// Port A initialization

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

PORTA=0x00;

DDRA=0xFF;



// Port B initialization

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

PORTB=0x00;

DDRB=0xFF;



// Port C initialization

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

PORTC=0x00;

DDRC=0xFF;



// Port D initialization

// Func7=In Func6=Out Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=0 State5=T State4=T State3=T State2=T State1=T State0=T

PORTD=0x00;

DDRD=0x40;



// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: 125.000 kHz

// Mode: Normal top=FFh

// OC0 output: Disconnected

TCCR0=0x03;

TCNT0=0x7D;

OCR0=0x00;



// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: Timer 1 Stopped

// Mode: Normal top=FFFFh

// OC1A output: Discon.

// OC1B output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer 1 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;



// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: Timer 2 Stopped

// Mode: Normal top=FFh

// OC2 output: Disconnected

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;



// External Interrupt(s) initialization

// INT0: Off

// INT1: Off

// INT2: Off

MCUCR=0x00;

MCUCSR=0x00;



// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x01;



// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;

OS_ADD_Task(LED1_Flash,0,250);    //led1闪烁频率2Hz

OS_ADD_Task(LED2_Flash,3,500);    //led2闪烁频率1Hz

OS_ADD_Task(LED3_Flash,7,1000);   //led3闪烁频率0.5Hz

OS_Start();

// Global enable interrupts

//#asm("sei")



while (1)

      {

       OS_Dispatch_Tasks();

      };

}



/************************************************

my_mega16_dome.c

************************************************/

#define LED1   PORTD.6

#define LED2   PORTC

#define LED3   PORTA

void LED1_Flash(void)

{ LED1^=1;

}

void LED2_Flash(void)

{ LED2^=0xff;

}

void LED3_Flash(void)

{ LED3^=0xff;

}

以上程序硬件实验通过



----------项目实例-----------

#include "Main.H"





#defineCU_AU   P3_0

#defineKW1       P3_1

#defineKW3       P3_2

#defineLED_3KW   P3_3

#defineLED_1KW   P3_4

#defineLED_CUO   P3_5

#defineLED_AUO   P3_7

#defineOUT_1KW   P1_1

#defineOUT_3KW   P1_2

#defineCOM1      P1_7

#defineCOM2      P1_6

#defineCOM3      P1_5

#defineDATA      P1_4

#defineCLK       P1_3

                        //0   1    2    3    4    5    6   

const unsigned char Tab={0xf9,0xc0,0xa4,0xb0,0x99,0x92,0x82,

                     //7   8    9    A    C    U      

                        0xf8,0x80,0x90,0x88,0xc6,0xc1};





bit CU_AU_fg=0;       //0手动 ;1   自动;

bit Work_fg=0;      //0停止 ;1   工作;

bit AU_start_fg=0;    //0自动状态不工作;1 自动状态工作;

bit KW1_fg=0;         //0停止 ;1   工作;

bit KW3_fg=0;         //0停止 ;1   工作;

bit CU_AU_down_fg=0;//键按下标志;

bit Sec_500ms_fg=0;   //500ms标志;

bit start_one=0;      //开机有无键按下标志;

unsigned char led_disp_index=0; //数码管扫描指针;

unsigned intCU_AU_count=0;    //按键延迟计数器

unsigned char KW1_count=0;      //按键延迟计数器

unsigned char KW3_count=0;      //按键延迟计数器

unsigned char Key_delay_count=0;//无键按下延迟计数器

unsigned char count_500ms=0;

unsigned intAUO_count_val=25200;//自动状态计数变量;

unsigned char disp_buff={0,0,0};   //显示寄存器

//unsigned intSec_count=25200;   //0.5秒计数器

                     

void Hex_Bcd(unsigned int x)      

{unsigned char i;

unsigned int j;

j=x;

for(i=0;i<3;i++)

    {disp_buff=j%10;

   j=j/10;

    }

}                     



void off_led(void)               

{COM1=1;

COM2=1;

COM3=1;

}



void on_led(unsigned char x)      

{if(x==0)COM1=0;

else if(x==1)COM2=0;

elseCOM3=0;

}

/*

void delay_us(unsigned char x)   

{unsigned char i;

for (i=0;i<x;i++);

}

*/

void out_164(unsigned char x)      

{unsigned char i;

for (i=0;i<8;i++)

   { CLK=0;

       CLK=0;

       if((x<<i)&0x80)DATA=1;

       else DATA=0;

    //CLK=0;

    //CLK=0;

       CLK=1;

       CLK=1;

   }



}



void cpu_kz_Init(void)            //cpu端口初始化函数

{P1=0xff;

P3=0xff;

}



void Key_Update(void)            

{if(CU_AU==0)                     

    {start_one=1;                  

   CU_AU_down_fg=1;            

   if(++CU_AU_count>200)

       {CU_AU_down_fg=0;

      CU_AU_count=210;

      Work_fg=1 ;   

       }

    }

else                           

    {if(CU_AU_down_fg)            

       {if((CU_AU_count>1)&&(CU_AU_count<30))

         {CU_AU_fg=~CU_AU_fg;               

            Work_fg=0;

            CU_AU_down_fg=0;

            Key_delay_count=0;

            OUT_1KW=LED_1KW=1;

            OUT_3KW=LED_3KW=1;

            KW3_fg=KW1_fg=0;

            }

       }

   CU_AU_count=0;   

    }   

if(CU_AU_fg==0)               

    {if(KW1==0)                  

       {start_one=1;                  

      KW1_count++;}

   else

       {if(KW1_count>1)

         {KW1_fg=~KW1_fg;

            Work_fg=1;

            }

      KW1_count=0;

       }

   if(KW3==0)                  

       {start_one=1;                  

      KW3_count++;

      }

   else

       {if(KW3_count>1)

         {KW3_fg=~KW3_fg;

            Work_fg=1;

            }

      KW3_count=0;

       }   

}   

if(start_one==0)

      {if(++Key_delay_count>200)

         {CU_AU_fg=1;      

            Work_fg=1;

            start_one=1;

            }

      }

}



void Disp_Update(void)         

{off_led();

if((CU_AU_fg==1)&&(Work_fg==1))

   {

      Hex_Bcd(AUO_count_val/240);   

      if(led_disp_index==0)

         {if(Sec_500ms_fg)

         { out_164(Tab]&0x7f);}

          else{out_164(Tab]);}

         }

          else if(led_disp_index==1)out_164(Tab]);

          else if(led_disp_index==2)out_164(Tab]);

          on_led(led_disp_index);

   }

else if((CU_AU_fg==1)&&(Work_fg==0))

      {if(led_disp_index==0) out_164(Tab);

          else if(led_disp_index==1)out_164(Tab);

          else if(led_disp_index==2)out_164(Tab);

          on_led(led_disp_index);

      }

else if((CU_AU_fg==0)&&(Work_fg==1))

      {if(led_disp_index==0) out_164(Tab);

          else if(led_disp_index==1)out_164(Tab);

          else if(led_disp_index==2)out_164(Tab);

          on_led(led_disp_index);

      }

else if((CU_AU_fg==0)&&(Work_fg==0))

      {if(led_disp_index==0) out_164(Tab);

          else if(led_disp_index==1)out_164(Tab);

          else if(led_disp_index==2)out_164(Tab);

          on_led(led_disp_index);

      }            

if(++led_disp_index>2)led_disp_index=0;   

}



void Work_Update(void)         

{if((CU_AU_fg==1)&&(Work_fg==1))

   {if(AUO_count_val>0)

      { if(++count_500ms>=2)

         {Sec_500ms_fg=~Sec_500ms_fg;

            count_500ms=0;

            }   

      AUO_count_val-=1;

      if(AUO_count_val>43200)      

          {LED_CUO=1;

         LED_AUO=0;

         OUT_1KW=LED_1KW=0;

         OUT_3KW=LED_3KW=0;

          }

      else if(AUO_count_val>0)         

               {LED_CUO=1;

                LED_AUO=0;

                OUT_1KW=LED_1KW=0;

                OUT_3KW=LED_3KW=1;

               }

      else {LED_CUO=1;LED_AUO=0;      

            OUT_1KW=LED_1KW=1;

            OUT_3KW=LED_3KW=1;

            Sec_500ms_fg=0;

             }

       }

    }      

else if((CU_AU_fg==1)&&(Work_fg==0))   

         {LED_CUO=1;LED_AUO=0;

          OUT_1KW=LED_1KW=1;

          OUT_3KW=LED_3KW=1;

         }                              

else if((CU_AU_fg==0)&&(Work_fg==1))

      {AUO_count_val=50400;

         LED_CUO=0;LED_AUO=1;

         if(KW1_fg)OUT_1KW=LED_1KW=0;

         else OUT_1KW=LED_1KW=1;

         if(KW3_fg)OUT_3KW=LED_3KW=0;

         else OUT_3KW=LED_3KW=1;

      }

else if((CU_AU_fg==0)&&(Work_fg==0))

      {AUO_count_val=50400;

         LED_CUO=0;LED_AUO=1;

         OUT_1KW=LED_1KW=1;

         OUT_3KW=LED_3KW=1;

      }

}



/**************************************************

OS_main.c

**************************************************/

#include "Main.h"



static void SCH_Go_To_Sleep(void);

static tWord Error_tick_count_G;

static tByte Last_error_code_G;

void SCH_Init_T0(void);      

void SCH_Start(void);



/*****************************************

以下程序需要根据实际情况修改

/*****************************************/

void cpu_kz_Init(void);

void Key_Update(void);

void Disp_Update(void);

void Work_Update(void);

/*****************************************/

   

typedef data struct

   {void (code * pTask)(void);   

    tWord Delay;      

    tWord Period;      

    tByte RunMe;      

   } sTask;



voidSCH_Dispatch_Tasks(void);

tByte SCH_Add_Task(void (code*) (void), const tWord, const tWord);   

bit   SCH_Delete_Task(const tByte);

voidSCH_Report_Status(void);



sTask SCH_tasks_G;

tByte Error_code_G = 0;



void SCH_Dispatch_Tasks(void)

   {

   tByte Index;

   for (Index = 0; Index < SCH_MAX_TASKS; Index++)

      {

      if (SCH_tasks_G.RunMe > 0)

         {

         (*SCH_tasks_G.pTask)();// Run the task

          SCH_tasks_G.RunMe -= 1;   // Reset / reduce RunMe flag

          if (SCH_tasks_G.Period == 0)

             {

             SCH_Delete_Task(Index);

             }

         }

      }

    SCH_Report_Status();   

    SCH_Go_To_Sleep();         

   }



tByte SCH_Add_Task(void (code * pFunction)(),

                   const tWord DELAY,

                   const tWord PERIOD)   

   {

   tByte Index = 0;

   while ((SCH_tasks_G.pTask != 0) && (Index < SCH_MAX_TASKS))

      {

      Index++;

      }   

   if (Index == SCH_MAX_TASKS)

      {

      Error_code_G = ERROR_SCH_TOO_MANY_TASKS;

      return SCH_MAX_TASKS;   

      }

      

   SCH_tasks_G.pTask= pFunction;

   SCH_tasks_G.Delay= DELAY;

   SCH_tasks_G.Period = PERIOD;

   SCH_tasks_G.RunMe= 0;



   return Index;

   }





bit SCH_Delete_Task(const tByte TASK_INDEX)

   {

   bit Return_code;



   if (SCH_tasks_G.pTask == 0)

      {



      Error_code_G = ERROR_SCH_CANNOT_DELETE_TASK;



      Return_code = RETURN_ERROR;

      }

   else

      {

      Return_code = RETURN_NORMAL;

      }      

   

   SCH_tasks_G.pTask   = 0x0000;

   SCH_tasks_G.Delay   = 0;

   SCH_tasks_G.Period= 0;



   SCH_tasks_G.RunMe   = 0;



   return Return_code;       // return status

   }



void SCH_Report_Status(void)

   {

#ifdef SCH_REPORT_ERRORS



   if (Error_code_G != Last_error_code_G)

      {

      Error_port = 255 - Error_code_G;

      

      Last_error_code_G = Error_code_G;



      if (Error_code_G != 0)

         {

         Error_tick_count_G = 60000;

         }

      else

         {

         Error_tick_count_G = 0;

         }

      }

   else

      {

      if (Error_tick_count_G != 0)

         {

         if (--Error_tick_count_G == 0)

            {

            Error_code_G = 0; // Reset error code

            }

         }

      }

#endif

   }





void SCH_Go_To_Sleep()

   {

   PCON |= 0x01;   

   //PCON |= 0x01;    // Enter idle mode (#1)

   //PCON |= 0x20;    // Enter idle mode (#2)

   }

shaozh 发表于 2007-5-15 15:22:19

多发啦
-----此内容被shaozh于2007-05-15,15:28:47编辑过

eddia2000 发表于 2007-5-15 18:42:45

不錯哦.收下了.

ddllxxrr 发表于 2007-5-16 13:52:03

看这大家都说不错,那一定没错,我收了,谢谢./emotion/em025.gif

Forever 发表于 2007-5-17 10:30:31

一定要顶一下,太好了!强烈支持!

mtxmxt 发表于 2007-8-30 20:11:00

谢谢楼主、9楼的朋友。

zhiwei 发表于 2007-8-30 22:02:46

多谢分享。

mljda 发表于 2007-8-30 22:45:51

跟风学习

chendaon 发表于 2007-8-31 08:57:39

顶一下,跟风学习

lan_boy001 发表于 2007-8-31 11:12:40

值得赞扬!!能够把超星的转成PDF!!

lan_boy001 发表于 2007-8-31 11:17:19

怎么下载速度只有几K啊??amoke现在这个速度怎么这么慢呐、、、、、、、、、???????????

7782736 发表于 2007-8-31 12:32:51

已下载。。。

谢谢

edawn 发表于 2007-8-31 13:53:43

感谢感谢,可以不用去买了。

下载中....

jacky2602000 发表于 2007-8-31 16:37:56

呵呵,找了很久了啊.终于等到了.感谢!!!

simone 发表于 2007-8-31 18:08:30

网上有一个版本,档案大小跟这个一样,不知是不是同一个版本

分辨度不够,看来不够清楚

leon11hk 发表于 2007-9-1 00:42:49

下载了两天,看了之後觉得好像看故事书-.-

引用了超大量例子说明一件事情但却表明不了在说明的问题所要用到的详细解决方法.其它看到210页中的一个例仔是这样子的:

void main(void)

{

        //设置调度器

        SCH_Init_T2();

        //为"Flash_LED"任务准备

        LED_Flash_Init();

        //增加"Flash LED"任务(1000ms亮,1000ms灭)

        //定时单位为时标(1ms时标间隔)

        //(最大的间隔/延迟是65535个时标)

        SCH_Add_Task(LED_Flash_Update, 0, 1000);

        //开始调度

        SCH_Start();//刷新任务

        while(1)

        {

                SCH_Disptch_Tasks();

        }

}

void SCH_Update(void) interrupt INTRTTUPT_Timer_2_Overflow

{

        //刷新任务

        ......

}

//

这个例子到底是如何表达这个 "合作式调度器" 呢!?

其实是不是说在一个程程式运行的时後,就不知道将要做些什麽,要接到一些输入或者本身想要定时

做一些时情,而家些事情将会在main 主体中置位,但是是在其中一个中断里作这些加到到的事件,当然

在做这些事之前要先将某些要做的动作置位,这样中断里就可以利用这些置位和相关的参数做中断里做事!? 当中断(这个我想在设置调度器的时後要先输入一些参数,如是多少间隔就要查一下你有没有事要做)

里查到你有事要做,而参数要你做一次或多次或每隔一段时间做事的.

假如中断查到要做一个动作就是闪led的一个动作置位了就检查这个事件的参数,如果一次就做完後就把

这个动作清0 如果要是做多次的就把这个参数减1 看看是否等於0,如果是的话清0(当然可以加很多动作)

//

但是如果加入有10个任务,检查做处理都是一个一个的顺序做把?

我是看不太懂里面所说的调度器是不是我想的那一种....

//

最初想到的一些概念是来自linux,看到书里介和网上介绍了一些linux处理任务的问题,

要是有一个任务要做,系铳就是做这件事,要是有n种任务,它可以同时处理n个,而这种处理是自动按时

按要用到的ram自动分配给任务,要是任务多了,就会所有任务的运作都会变慢...

难道这书是要介绍这样的软件设计结构吗!!!!!!??????

//

哪位大侠可以教教我这个合作式调度器 或者说调度器到底是什麽一个概念呢?

bobowu 发表于 2007-9-12 20:58:07

谢谢lz,收下了,好好学习学习

liyangbbs 发表于 2007-9-27 13:18:47

最近在学校图书馆借的。光盘也有。感觉光盘内容很不错的,推荐一下。既然上面已经有仁兄上载了,我也省了。

poppush 发表于 2007-9-27 13:30:57

记号      要看

ycii 发表于 2007-10-15 17:14:58

谢谢了..又有一些感悟.

btjlp 发表于 2007-10-16 13:33:30

非常感谢

fugeone 发表于 2007-10-26 21:13:36

此书相当好!!!买过了!!!

andyli 发表于 2007-10-27 15:23:36

好东西,谢谢。

dgdzov 发表于 2007-11-13 16:14:34

好东西,顶一下

liqu 发表于 2007-11-15 10:43:14

Gorgon Meducer,你的书名是什么,什么时间出版?

stevenlu 发表于 2007-12-5 13:46:15

在书店看到了,好厚哦,
支持一下

ecat 发表于 2007-12-5 13:51:25

26兆,好大的文件啊。

zgx2008 发表于 2008-1-8 20:50:13

顶!

huys02 发表于 2008-1-8 22:19:49

的确好书,最近从图书馆刚借的,还在看,硬件软件设计思想讲的很清晰。

astankvai 发表于 2008-1-8 22:21:52

呵呵,我在学校看过这本书,当时没有什么时间看(应试教育要忙着考试),可惜,下了超星的,现在超星要收费了,麻烦。这个是好东东来的啊,顶起来。

huys02 发表于 2008-1-8 22:27:05

传文件很慢啊,还想把一本“电子学艺术”这本电子书也上传的,英文版的,The Art of Electronics。

huys02 发表于 2008-1-8 22:41:08

500多M的随书CD上传就失败了,就传 The Art of Electronics
Djvu格式的,该阅读器(绿色版)可以另外再下,
上传文件的确很要耐性。。比下载慢多了

bozai 发表于 2008-1-9 00:21:37

顶!这书我有一本。很不错。

wqsjob 发表于 2008-1-12 10:26:18

先顶一下

lane1984ks 发表于 2008-1-29 13:55:27

谢谢楼主分享

viqomk 发表于 2008-3-9 21:38:01

还可以,谢啦!~正在学习中!

blocksky 发表于 2008-3-13 10:55:22

好东西!支持,感谢!

hlb_312991 发表于 2008-3-19 14:01:51

谢了!

shawn_17 发表于 2008-6-6 19:12:25

楼主能不能也把光盘源码共享出来啊?期待中

winter 发表于 2008-6-14 07:46:45

9楼小乐传了

lovechenhui 发表于 2008-6-14 11:07:37

呵呵,顶一个,图书馆有,但是要考试了,没时间看,呵呵~

hnywx 发表于 2008-6-14 16:44:08

顶一个                                 .

gvren 发表于 2008-6-15 19:17:17

太好了,我正准备买,先看看再说。感谢楼主。

proco 发表于 2008-7-30 22:16:17

谢谢共享

stayzhang 发表于 2008-7-30 23:55:57

有看过,不要犹豫,是本好书。

vxfxv 发表于 2008-8-4 15:01:59

谢谢!上次下到99%然后断在那了。终于又找到了。

xlxlab 发表于 2008-8-11 13:02:19

真是不错

tiandinanhai 发表于 2008-8-26 18:12:35

好东西,感谢好人的无私奉献
宝贝!!

jiu123 发表于 2008-9-11 15:41:50

3q

jjj206 发表于 2008-9-21 16:42:42

好书不下对不起自己~

RayXP 发表于 2008-9-29 01:21:19

mark

dk7725 发表于 2009-1-16 14:29:49

好东西

kucooboy 发表于 2009-3-23 17:40:47

顶上

chiwenhu 发表于 2009-3-23 23:56:57

这书我在书城
也看过
不错

lengqing1309 发表于 2009-3-24 09:43:07

MARK

wangff2531 发表于 2009-4-10 08:55:41

时间触发嵌入式系统设计模式 8051系列微控制器开发可靠应用留个记号

chjf 发表于 2009-4-10 10:59:05

不错,正在下载。

tonysu 发表于 2009-4-10 11:01:19

好书共享

xingli99 发表于 2009-4-26 21:21:14

谢谢!!!顶你!

LBH101 发表于 2009-8-4 14:25:13

支持一下,好资料

dasuantou 发表于 2009-8-4 17:23:24

顶你一W次. 支持好书PDF免费化,这也是强迫"开源".

dzyong 发表于 2009-12-26 22:42:57

公司下一次,家里再来下一次,傻孩子都说好,一定值得下!~~~~~~~~

smiler 发表于 2009-12-26 23:09:25

好书,以前一点都看不懂、现在有点晕,但每看一次都有收获。

zkf0100007 发表于 2009-12-26 23:29:57

多谢分享

maxsuntech 发表于 2009-12-30 20:41:55

xlshaoscu 发表于 2009-12-30 21:02:36

嘿嘿,刚从图书馆借了这本书正在看,很好的一本书,正在研读中

tear086 发表于 2010-1-3 20:29:15

mark

AIHHLI 发表于 2010-1-3 21:14:31

按个爪印...

tedden 发表于 2010-1-3 21:14:33

顶,谢谢楼主分享~

yihongmeilang 发表于 2010-1-9 14:41:19

谢谢

wukaka 发表于 2010-7-25 15:07:51

感谢:
楼主和【29楼】 shaozh
提供的好资料!
页: [1] 2
查看完整版本: 上传《时间触发嵌入式系统设计模式 8051系列微控制器开发可靠应用》PDF