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

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

?? udelay.c

?? 嵌入式linux下液晶編程院代碼, 可以在LINUX2.4內核下運行
?? C
字號:
/* $Id: udelay.c,v 1.12 2003/07/18 04:43:14 reinelt Exp $ * * short delays * * Copyright 1999, 2000 by Michael Reinelt (reinelt@eunet.at) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * * $Log: udelay.c,v $ * Revision 1.12  2003/07/18 04:43:14  reinelt * udelay: unnecessary sanity check removed * * Revision 1.11  2003/04/04 06:02:04  reinelt * new parallel port abstraction scheme * * Revision 1.10  2003/02/27 07:43:11  reinelt * * asm/msr.h: included hard-coded definition of rdtscl() if msr.h cannot be found. * * autoconf/automake/autoanything: switched back to 1.4. Hope it works again. * * Revision 1.9  2002/08/21 06:09:53  reinelt * some T6963 fixes, ndelay wrap * * Revision 1.8  2002/08/17 14:14:21  reinelt * * USBLCD fixes * * Revision 1.7  2002/04/29 11:00:28  reinelt * * added Toshiba T6963 driver * added ndelay() with nanosecond resolution * * Revision 1.6  2001/08/08 05:40:24  reinelt * * renamed CLK_TCK to CLOCKS_PER_SEC * * Revision 1.5  2001/03/12 13:44:58  reinelt * * new udelay() using Time Stamp Counters * * Revision 1.4  2001/03/12 12:39:36  reinelt * * reworked autoconf a lot: drivers may be excluded, #define's went to config.h * * Revision 1.3  2001/03/01 22:33:50  reinelt * * renamed Raster_flush() to PPM_flush() * * Revision 1.2  2000/07/31 10:43:44  reinelt * * some changes to support kernel-2.4 (different layout of various files in /proc) * * Revision 1.1  2000/04/15 16:56:52  reinelt * * moved delay loops to udelay.c * renamed -d (debugging) switch to -v (verbose) * new switch -d to calibrate delay loop * 'Delay' entry for HD44780 back again * delay loops will not calibrate automatically, because this will fail with hich CPU load * *//*  * * exported fuctions: * * void udelay (unsigned long usec) *  delays program execution for usec microseconds *  uses global variable 'loops_per_usec', which has to be set before. *  This function does busy-waiting! so use only for delays smaller *  than 10 msec * * void udelay_calibrate (void) (if USE_OLD_UDELAY is defined) *   does a binary approximation for 'loops_per_usec' *   should be called several times on an otherwise idle machine *   the maximum value should be used * * void udelay_init (void) *   selects delay method (gettimeofday() ord rdtsc() according *   to processor features * */#include "config.h"#include <stdlib.h>#include <stdio.h>#ifdef USE_OLD_UDELAY#include <time.h>#else#include <math.h>#include <unistd.h>#include <fcntl.h>#include <errno.h>#include <string.h>#include <sys/time.h>#ifdef HAVE_ASM_MSR_H#include <asm/msr.h>#else#warning asm/msr.h not found.#warning using hard-coded definition.#define rdtscl(low) \     __asm__ __volatile__("rdtsc" : "=a" (low) : : "edx")#endif#endif#include "debug.h"#include "udelay.h"#ifdef USE_OLD_UDELAYunsigned long loops_per_usec;void ndelay (unsigned long nsec){  unsigned long loop=(nsec*loops_per_usec+999)/1000;    __asm__ (".align 16\n"	   "1:\tdecl %0\n"	   "\tjne 1b"	   : /* no result */ 	   :"a" (loop));}/* adopted from /usr/src/linux/init/main.c */void udelay_calibrate (void){  clock_t tick;  unsigned long bit;    loops_per_usec=1;  while (loops_per_usec<<=1) {    tick=clock();    while (clock()==tick);    tick=clock();    ndelay(1000000000/CLOCKS_PER_SEC);    if (clock()>tick)      break;  }    loops_per_usec>>=1;  bit=loops_per_usec;  while (bit>>=1) {    loops_per_usec|=bit;    tick=clock();    while (clock()==tick);    tick=clock();    ndelay(1000000000/CLOCKS_PER_SEC);    if (clock()>tick)      loops_per_usec&=~bit;  }}#elsestatic unsigned int ticks_per_usec=0;static void getCPUinfo (int *hasTSC, double *MHz){  int fd;  char buffer[4096], *p;    *hasTSC=0;  *MHz=-1;    fd=open("/proc/cpuinfo", O_RDONLY);  if (fd==-1) {    error ("open(/proc/cpuinfo) failed: %s", strerror(errno));    return;  }  if (read (fd, &buffer, sizeof(buffer)-1)==-1) {    error ("read(/proc/cpuinfo) failed: %s", strerror(errno));    close (fd);    return;  }  close (fd);  p=strstr(buffer, "flags");  if (p==NULL) {    debug ("/proc/cpuinfo has no 'flags' line");  } else {    p=strstr(p, "tsc");    if (p==NULL) {      debug ("CPU does not support Time Stamp Counter");    } else {      debug ("CPU supports Time Stamp Counter");      *hasTSC=1;    }  }    p=strstr(buffer, "cpu MHz");  if (p==NULL) {    debug ("/proc/cpuinfo has no 'cpu MHz' line");  } else {    if (sscanf(p+7, " : %lf", MHz)!=1) {      error ("parse(/proc/cpuinfo) failed: unknown 'cpu MHz' format");      *MHz=-1;    } else {      debug ("CPU runs at %f MHz", *MHz);    }  }}void udelay_init (void){  int tsc;  double mhz;    getCPUinfo (&tsc, &mhz);    if (tsc && mhz>0.0) {    ticks_per_usec=ceil(mhz);    debug ("using TSC delay loop, %u ticks per microsecond", ticks_per_usec);  } else {    ticks_per_usec=0;    debug ("using gettimeofday() delay loop");  }}void ndelay (unsigned long nsec){  if (ticks_per_usec) {    unsigned int t1, t2;        nsec=(nsec*ticks_per_usec+999)/1000;    rdtscl(t1);    do {      rep_nop();      rdtscl(t2);    } while ((t2-t1)<nsec);      } else {        struct timeval now, end;        gettimeofday (&end, NULL);    end.tv_usec+=(nsec+999)/1000;    while (end.tv_usec>1000000) {      end.tv_usec-=1000000;      end.tv_sec++;    }        do {      rep_nop();      gettimeofday(&now, NULL);    } while (now.tv_sec==end.tv_sec?now.tv_usec<end.tv_usec:now.tv_sec<end.tv_sec);  }}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品福利av| 日韩一区二区在线看| 国产精品中文字幕欧美| 日韩成人免费电影| 视频一区中文字幕国产| 亚洲综合一区在线| 亚洲综合免费观看高清在线观看| 综合久久一区二区三区| 国产精品电影一区二区| 国产精品网站在线观看| 亚洲欧洲色图综合| 自拍偷自拍亚洲精品播放| 亚洲日本免费电影| 一区二区三区中文在线观看| 亚洲国产欧美在线| 青青草伊人久久| 久久99久久99| av在线一区二区三区| 日本道色综合久久| 欧美三区免费完整视频在线观看| 欧美日韩精品系列| 精品国产3级a| 国产精品久久免费看| 亚洲综合999| 韩国精品主播一区二区在线观看| 国产成人在线影院| 91激情在线视频| 欧美一区二区在线观看| 国产精品免费丝袜| 偷拍一区二区三区| 国产高清亚洲一区| 欧美日韩一区二区欧美激情| 日韩免费视频一区| 亚洲精品视频在线观看网站| 日韩精品一级二级| 国产v日产∨综合v精品视频| 欧美日韩视频一区二区| 久久久91精品国产一区二区三区| 亚洲人吸女人奶水| 麻豆视频一区二区| 91在线国产观看| 欧美不卡一区二区三区四区| 亚洲欧洲www| 韩国成人精品a∨在线观看| 91官网在线观看| 精品国产91洋老外米糕| 亚洲精品成a人| 国产精品一二二区| 欧美一区二区视频观看视频| 亚洲精品高清在线| 国产精品一级在线| 日韩亚洲欧美成人一区| 亚洲一区在线观看视频| 国产98色在线|日韩| 欧美乱妇15p| 亚洲激情中文1区| 成人高清视频在线| 精品欧美黑人一区二区三区| 亚洲大尺度视频在线观看| 成人免费毛片a| 久久久久久久网| 免费久久精品视频| 欧美日韩在线不卡| 亚洲日本在线天堂| 成人aa视频在线观看| 久久综合色8888| 久久99国内精品| 欧美精品久久99久久在免费线 | 日韩精品一区二区三区四区| 一区二区欧美视频| 91社区在线播放| 中文字幕一区二区日韩精品绯色| 国产成人啪免费观看软件| 精品国产免费一区二区三区四区 | 自拍偷拍国产亚洲| 99riav一区二区三区| 国产精品美女久久久久高潮| 国产乱妇无码大片在线观看| 精品国产乱码久久久久久蜜臀 | 蜜桃视频一区二区三区在线观看 | av中文字幕不卡| 中文字幕在线观看一区二区| 成人黄色片在线观看| 国产精品理论在线观看| www.成人在线| 亚洲女与黑人做爰| 欧美影片第一页| 日韩精品午夜视频| 日韩欧美激情在线| 国产精品99久久久久久宅男| 国产亚洲污的网站| 99久久精品免费| 亚洲一级不卡视频| 日韩一卡二卡三卡四卡| 国产精品综合二区| 中文字幕永久在线不卡| 欧美视频一区二区三区在线观看| 日韩精品一级二级| 久久精品一区四区| 91精品1区2区| 久久精品国产久精国产| 久久久不卡网国产精品二区| 99这里都是精品| 五月天婷婷综合| 久久精品在这里| 欧美性xxxxx极品少妇| 麻豆国产一区二区| 亚洲欧美国产77777| 日韩一区二区三区av| 成人黄色a**站在线观看| 亚洲国产另类精品专区| 亚洲精品一区二区在线观看| eeuss影院一区二区三区| 午夜激情一区二区| 国产精品美女久久久久高潮| 欧美日韩免费高清一区色橹橹 | 久久av中文字幕片| 亚洲欧美一区二区三区国产精品 | 99精品国产一区二区三区不卡| 亚洲激情网站免费观看| 精品免费视频.| 欧美综合亚洲图片综合区| 国产一区二区在线看| 午夜欧美2019年伦理 | 色婷婷久久综合| 国产在线精品免费| 天天av天天翘天天综合网色鬼国产| 亚洲精品在线免费播放| 欧美精品tushy高清| 不卡影院免费观看| 国内精品国产三级国产a久久 | 日韩在线卡一卡二| 一区二区在线观看免费视频播放| 久久免费看少妇高潮| 3d成人h动漫网站入口| 色一情一伦一子一伦一区| 丁香六月综合激情| 国产一区二区在线免费观看| 日本视频一区二区| 亚洲国产日韩一级| 亚洲一区在线播放| 亚洲人成小说网站色在线 | 欧美亚洲一区二区三区四区| 99视频精品在线| 成人开心网精品视频| 国产精品夜夜嗨| 国产精品一区二区在线观看不卡 | 欧美国产亚洲另类动漫| 精品剧情在线观看| 欧美一区二区三区视频免费| 欧美优质美女网站| 日本高清成人免费播放| 在线视频综合导航| 色8久久人人97超碰香蕉987| eeuss鲁一区二区三区| 99国产精品99久久久久久| 91亚洲国产成人精品一区二区三 | 亚洲婷婷国产精品电影人久久| 久久综合狠狠综合| 久久久久久夜精品精品免费| 久久九九国产精品| 国产精品久久久久天堂| 亚洲欧美二区三区| 亚洲国产日韩在线一区模特| 五月天丁香久久| 美女爽到高潮91| 经典三级在线一区| 国产成人a级片| 99久久国产综合色|国产精品| 99视频热这里只有精品免费| 91国模大尺度私拍在线视频| 51久久夜色精品国产麻豆| 日韩精品一区二区三区蜜臀| 久久久精品黄色| 亚洲视频在线观看三级| 同产精品九九九| 麻豆中文一区二区| 成人国产一区二区三区精品| 欧美专区日韩专区| 欧美一区二区三区四区视频| 国产性天天综合网| 亚洲精品美腿丝袜| 久草中文综合在线| 不卡一二三区首页| 欧美日韩视频在线一区二区| 日韩你懂的在线播放| 国产精品美女视频| 天堂成人免费av电影一区| 精品系列免费在线观看| 国产亚洲欧美中文| 久久精品在线免费观看| 亚洲柠檬福利资源导航| 欧美久久久久久蜜桃| 国产精品久久看| 国产suv精品一区二区6| 精品免费国产一区二区三区四区| 婷婷久久综合九色综合绿巨人 | 欧美电视剧免费全集观看| 亚洲国产精品麻豆| 在线亚洲+欧美+日本专区|