亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? my_os.c~

?? avr Rtos 255 Task avr Rtos 255 Task
?? C~
字號:
#include "my_os.h"
#include <mega128.h>
//#include "global.h"
#include <stdlib.h>
//#include <inavr.h>

//externe
extern unsigned char t_sph;
extern unsigned char t_spl;
extern unsigned char t_r29;
extern unsigned char t_r28;
extern unsigned char task_time;
extern unsigned char ig,jg,kg,lg,mg,ng;
extern unsigned int global_inc_g;
extern unsigned int global_inc;
extern unsigned int inc;
extern unsigned char temp_g;
extern unsigned char b_start_so;
//extern S8 lcd_sem;
extern unsigned char lcd_coada[NR_MAX_TASK];


//folosita pentru initializarea t_sp si t_r in rutina timer
void get_tsp(void)
{
//initializare stiva (unde se gaseste adresa stivei)
    tem = (unsigned int) ((rtos[task_curent].adr_task)+OSTaskStkSize)>>8;
    t_sph=(unsigned char)(tem&0x00ff);
    t_spl=(unsigned char)((rtos[task_curent].adr_task)+OSTaskStkSize)&0xff;
//initializarea adresa pointer y
    tem = (unsigned int) ((rtos[task_curent].adr_task)+OSTaskStkSize-2)>>8;
    t_r29=(unsigned char)(tem&0x00ff);
    t_r28=(unsigned char)((rtos[task_curent].adr_task)+OSTaskStkSize-2)&0xff;
}

//salvarea variabilelor globale
void push_var(void)
{
//unsigned char ig,jg,kg,lg,mg,ng;
  rtos[task_curent].adr_task[OSTaskStkSize-5]=ig;
  rtos[task_curent].adr_task[OSTaskStkSize-6]=jg;
  rtos[task_curent].adr_task[OSTaskStkSize-7]=kg;
  rtos[task_curent].adr_task[OSTaskStkSize-8]=lg;
  rtos[task_curent].adr_task[OSTaskStkSize-9]=mg;
  rtos[task_curent].adr_task[OSTaskStkSize-10]=ng;
//  rtos[task_curent].adr_task[OSTaskStkSize-11]=(unsigned char)(global_inc_g&0x0ff);
//  rtos[task_curent].adr_task[OSTaskStkSize-12]=(unsigned char)((global_inc_g>>8)&0x0ff);

  rtos[task_curent].adr_task[OSTaskStkSize-11]=temp_g;
 // rtos[task_curent].adr_task[OSTaskStkSize-12]=init_t;
}
unsigned char comuta_task(void)
{
    if(task_varf==-1)//test daca este goala lista
      return 0;
//nou: task-ul este comutat numai daca este activat!
    do
    {
     if(task_curent>=task_coada)
       task_curent=task_varf-1;
     task_curent++;
     tem++;
    }while(!(rtos[task_curent].activ));
    task_time=rtos[task_curent].nr_timpi;
//initializare stiva (unde se gaseste adresa stivei)
    tem = (unsigned int) ((rtos[task_curent].adr_task)+OSTaskStkSize)>>8;
    t_sph=(unsigned char)(tem&0x00ff);
    t_spl=(unsigned char)((rtos[task_curent].adr_task)+OSTaskStkSize)&0xff;
//initializarea pointer y (unde se gaseste adresa registrilor r29 si r28)
    tem = (unsigned int) ((rtos[task_curent].adr_task)+OSTaskStkSize-2)>>8;
    t_r29=(unsigned char)(tem&0x00ff);
    t_r28=(unsigned char)((rtos[task_curent].adr_task)+OSTaskStkSize-2)&0xff;

    return 1;
} 

 //restaurarea noilor variabile locale
void pop_var(void)
{
  ig=rtos[task_curent].adr_task[OSTaskStkSize-5];
  jg=rtos[task_curent].adr_task[OSTaskStkSize-6];
  kg=rtos[task_curent].adr_task[OSTaskStkSize-7];
  lg=rtos[task_curent].adr_task[OSTaskStkSize-8];
  mg=rtos[task_curent].adr_task[OSTaskStkSize-9];
  ng=rtos[task_curent].adr_task[OSTaskStkSize-10];
  temp_g=rtos[task_curent].adr_task[OSTaskStkSize-11];
}  
  
void start_so(void)
{
 //initializeaza vectorul de taskuri
  task_varf=task_coada=task_curent=-1;//initializeaza index vector taskuri
}     

//functia creaza un task
unsigned char creaza_task(void (*taskf)(void),unsigned char numar)
{
    unsigned int i;
//1.pozitionarea taskului in lista
    if(task_varf==-1)//daca lista este vida
    {
      if(task_coada>=NR_MAX_TASK-1)//daca indexul nu este mai mare decat numarul de task-uri
        return T_EROARE;
      task_coada++;//incrementeaza indexul coada
      task_curent=task_varf=task_coada;
//initializare
    }
    else//daca lista are cel putin un element
    {
      if(task_coada>=NR_MAX_TASK-1)
        return 0;
      task_coada++;
    }
    rtos[task_coada].nr_timpi=numar;//initializare timpi task
    rtos[task_coada].activ=1;//initializare task on/off
    for(i=0;i<OSTaskStkSize;i++)
      rtos[task_coada].adr_task[i]=(unsigned char)i;//initializare stiva in total
//salvarea pointer functie
    i = (unsigned int) taskf;
    rtos[task_coada].adr_task[OSTaskStkSizeHard-1]=(unsigned char)i&0x0ff;//ocmps functie
    rtos[task_coada].adr_task[OSTaskStkSizeHard-2]=(unsigned char)((i>>8)&0x0ff);//ocms functie
//initializarea stivei
    i = (unsigned int) rtos[task_coada].adr_task+OSTaskStkSizeHard-3;
    rtos[task_coada].adr_task[OSTaskStkSize-1]=(unsigned char)i&0xff;
    rtos[task_coada].adr_task[OSTaskStkSize-2]=(unsigned char)(i>>8)&0xff;
//initialiarea pointer y
    i = (unsigned int) rtos[task_coada].adr_task+62;
    rtos[task_coada].adr_task[OSTaskStkSize-3]=(unsigned char)i&0xff;
    rtos[task_coada].adr_task[OSTaskStkSize-4]=(unsigned char)(i>>8)&0xff;

    return 1;
} 
  

//folosita pentru initializarea t_sp si t_r pentru primul task care se va executa
void init_task(void)
{
 //initializare stiva (unde se gaseste adresa stivei)
    task_time=rtos[task_curent].nr_timpi;
    tem = (unsigned int) ((rtos[task_curent].adr_task)+OSTaskStkSize)>>8;
    t_sph=(unsigned char)(tem&0x00ff);
    t_spl=(unsigned char)((rtos[task_curent].adr_task)+OSTaskStkSize)&0xff;
//initializarea pointer y
    tem = (unsigned int) ((rtos[task_curent].adr_task)+OSTaskStkSize-2)>>8;
    t_r29=(unsigned char)(tem&0x00ff);
    t_r28=(unsigned char)((rtos[task_curent].adr_task)+OSTaskStkSize-2)&0xff;
//initialiarea pointer y - la primul task stiva software este pregatita pentru incarcare valori registrii!
    tem = (unsigned int) rtos[task_curent].adr_task+80;
    rtos[task_curent].adr_task[OSTaskStkSize-3]=(unsigned char)tem&0xff;
    rtos[task_curent].adr_task[OSTaskStkSize-4]=(unsigned char)(tem>>8)&0xff;
}  

void PopSP(void)
{
  #asm("cli")
  #asm("  LDS R29,_t_sph");
  #asm("  LDS R28,_t_spl");
  #asm("  LD R16,-Y");
  #asm("  OUT 0x3d,R16");
  #asm("  LD R16,-Y");
  #asm("  OUT 0x3e,R16");

//in plus setare pointer y pentru stiva soft!
  #asm("  LDS R30,_t_r28");
  #asm("  LDS R31,_t_r29");
  #asm("  LD R28,-Z");
  #asm("  LD R29,-Z");

  b_start_so=1;
  #asm("sei")
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩女优制服丝袜电影| 蜜乳av一区二区三区| 午夜日韩在线电影| 国产揄拍国内精品对白| 91福利视频在线| 精品久久久久一区二区国产| 成人欧美一区二区三区视频网页 | 99久久99久久免费精品蜜臀| 欧美日韩午夜精品| 欧美高清在线精品一区| 美女脱光内衣内裤视频久久影院| 91麻豆.com| 久久免费看少妇高潮| 蜜乳av一区二区| 欧美色偷偷大香| 亚洲精品国产a久久久久久| 岛国精品在线播放| 欧美精品一区二区三| 首页国产欧美久久| 色88888久久久久久影院野外| 国产日产欧产精品推荐色 | 日韩精品乱码av一区二区| aaa欧美日韩| 国产精品久久久久久亚洲伦| 国产精品一品视频| 久久夜色精品国产欧美乱极品| 日本在线播放一区二区三区| 欧美视频第二页| 亚洲国产日产av| 欧美精品自拍偷拍| 视频在线观看国产精品| 欧美一级日韩不卡播放免费| 亚洲成人av在线电影| 欧美日韩1区2区| 全国精品久久少妇| 精品伦理精品一区| 国产一区二区三区精品欧美日韩一区二区三区 | 国产电影精品久久禁18| 26uuu久久天堂性欧美| 国内精品第一页| 久久久99精品免费观看不卡| 国产精品一区二区久久不卡| 欧美精品一区二区三区蜜桃| 国产精品性做久久久久久| 国产午夜亚洲精品理论片色戒 | 色综合中文综合网| 夜夜嗨av一区二区三区四季av| 91免费版在线看| 亚洲国产精品影院| 3d成人h动漫网站入口| 久久精品国产精品青草| 久久精品日韩一区二区三区| 成人动漫一区二区三区| 亚洲乱码日产精品bd| 69久久夜色精品国产69蝌蚪网| 久久国产精品99精品国产| 国产亚洲精品福利| 色94色欧美sute亚洲线路一ni | 成人精品鲁一区一区二区| 国产精品乱码久久久久久| 成人av动漫在线| 亚洲一区在线播放| 精品嫩草影院久久| 97成人超碰视| 免费成人在线观看视频| 国产精品久久福利| 91精品国产综合久久久久久久久久| 久久99久久精品| 亚洲裸体xxx| 精品粉嫩超白一线天av| 色视频成人在线观看免| 另类的小说在线视频另类成人小视频在线| 国产无遮挡一区二区三区毛片日本| 91女神在线视频| 久久99精品国产麻豆不卡| 日韩理论在线观看| 精品免费99久久| 欧美日韩一区中文字幕| 国产成人aaa| 蜜臀久久99精品久久久画质超高清| 国产精品高潮呻吟久久| 91精品国产高清一区二区三区蜜臀| 高清成人免费视频| 久久成人综合网| 亚洲一级二级三级在线免费观看| 国产亚洲美州欧州综合国| 欧美情侣在线播放| 不卡一区二区三区四区| 麻豆91免费看| 日韩精品一级中文字幕精品视频免费观看 | 综合久久一区二区三区| 日韩一卡二卡三卡四卡| 99久久精品免费| 国产精品一区二区91| 男女视频一区二区| 亚洲aⅴ怡春院| 亚洲精品国产成人久久av盗摄 | 91亚洲精品久久久蜜桃| 国产成人精品影院| 国产一区二区三区四| 蜜臀久久99精品久久久久久9| 亚洲国产日韩一区二区| 国产精品久久久久婷婷| 国产喷白浆一区二区三区| 欧美精品一区在线观看| 欧美不卡视频一区| 欧美一级欧美三级在线观看| 欧美人狂配大交3d怪物一区 | 丝袜亚洲精品中文字幕一区| 亚洲老妇xxxxxx| 亚洲男人的天堂在线aⅴ视频| 国产精品素人一区二区| 久久日韩粉嫩一区二区三区| 2020国产成人综合网| 精品久久久久一区| 精品av久久707| 久久嫩草精品久久久久| 久久久不卡网国产精品二区| 久久精品一区二区三区四区| 亚洲va中文字幕| 亚洲综合999| 五月婷婷另类国产| 毛片av一区二区三区| 美女在线一区二区| 国产精品一区二区你懂的| 成人免费毛片片v| 色综合av在线| 777亚洲妇女| 久久综合久色欧美综合狠狠| 国产亚洲欧洲一区高清在线观看| 国产欧美精品一区二区三区四区 | 韩国三级中文字幕hd久久精品| 激情久久五月天| 成人一区二区三区在线观看| 成人sese在线| 欧美吞精做爰啪啪高潮| 日韩一区二区在线看片| 日本一区二区三区国色天香| 日韩毛片视频在线看| 亚洲自拍偷拍综合| 精品在线观看视频| av午夜精品一区二区三区| 欧美怡红院视频| 精品国产一区二区三区忘忧草 | 久久99精品一区二区三区三区| 国产精品一卡二卡在线观看| av毛片久久久久**hd| 欧美日韩另类国产亚洲欧美一级| 精品国产不卡一区二区三区| 18欧美乱大交hd1984| 五月婷婷激情综合| 丁香激情综合五月| 欧美精品乱码久久久久久| 久久久99精品免费观看不卡| 一区二区成人在线视频| 国产最新精品精品你懂的| 91麻豆精品视频| 精品少妇一区二区三区日产乱码| 国产精品嫩草99a| 蜜乳av一区二区| 欧美少妇一区二区| 国产精品久久久久影院亚瑟 | 色综合色综合色综合色综合色综合 | 成人教育av在线| 日韩欧美中文一区| 亚洲精品日产精品乱码不卡| 国产综合久久久久影院| 欧美亚洲国产bt| 中文一区二区在线观看| 日韩成人伦理电影在线观看| 99这里都是精品| 久久综合精品国产一区二区三区| 亚洲一区二区在线免费观看视频| 国产高清不卡一区二区| 欧美一级片免费看| 亚洲成人久久影院| 91激情五月电影| 国产精品毛片大码女人| 韩国午夜理伦三级不卡影院| 欧美高清性hdvideosex| 亚洲人成伊人成综合网小说| 懂色av噜噜一区二区三区av| 日韩丝袜情趣美女图片| 亚洲国产精品久久久久婷婷884| 不卡av在线网| 国产精品欧美一区喷水| 国产精品一区二区无线| 精品国产99国产精品| 三级欧美韩日大片在线看| 欧美视频精品在线观看| 亚洲午夜私人影院| 在线免费观看日本一区| 亚洲美女在线国产| 91福利国产成人精品照片| 日韩伦理免费电影| 日本道色综合久久| 亚洲精品乱码久久久久久久久| 9色porny自拍视频一区二区| 国产精品久久免费看| www.日韩在线|