test_proc_show()故意调用了一个kill_time()的函数,而kill_time()的函数,又调用了mdelay(2)和kill_moretime()的函数,该函数体内调用mdelay(...#include #include #include #include #include #include #include #include <linux/uaccess.h...; static struct proc_dir_entry *test_dir, *test_entry; static noinline void kill_moretime(void) { mdelay...(2); } static noinline void kill_time(void) { mdelay(2); kill_moretime(); } static int test_proc_show
unistd.h> #include // #include #include #include #include #include #include #include #include #include... i2c_write(blue_start - 4, pwm_half_value); i2c_write(0x25, reset_value); sys_mdelay...; i -= 3) { i2c_write(i, pwm_half_value); i2c_write(0x25, reset_value); sys_mdelay...0x24; i > 0; i -= 3) { i2c_write(i, 96); i2c_write(0x25, reset_value); sys_mdelay
(500); rt_pin_write(LED0_PIN, PIN_LOW); rt_thread_mdelay(500); } return RT_EOK...在Linux中对设备的访问有如下接口open,read,write,close等,其实RTT提供的设备驱动API也是如此。...(1000); pin_dev->ops->pin_write(&pin_dev->parent, LED_PIN, PIN_LOW); rt_thread_mdelay...(1000); } return RT_EOK; } 总结 其实很多人都在讨论说,没有Linux基础,学RTT很痛苦。...但是直接学Linux,如果你不去了解内核驱动代码,会少很多乐趣。但是Linux的驱动框架更加复杂,分析更加痛苦。所以作者认为,如果你学了RTT,再去学习Linux,分析驱动框架会更加简单方便。
内核代码,简单的字符设备: #include #include #include #include #include #include #include #include #include #include #include #include static...char __user *buf,size_t count,loff_t *ppos) { int len=5; if(*ppos > 0) { return 0; } mdelay...); } module_init (hello_init); module_exit (hello_cleanup); MODULE_LICENSE("GPL"); 读里面delay了5秒, 注意mdelay
-5.15/drivers/staging/fbtft/fbtft-core.c 添加头文件 #include #include 修改.../bitops.h> #include #include #include #include... #include #include #include #include #include #include #include <linux...(20); gpio_set_value(par->gpio.reset, 0); mdelay(20); gpio_set_value(par->gpio.reset, 1); mdelay(
源代码 3.1 mma7660设备端代码: IIC子系统 #include #include #include #include #include #include #include... #include #include #include #include <...val; /* Using test mode to probe chip */ i2c_smbus_write_byte_data(client, MMA7660_MODE, 0x00); mdelay...(10); i2c_smbus_write_byte_data(client, MMA7660_MODE, 0x04); mdelay(10); i2c_smbus_write_byte_data
安装 ENV 工具 和 risc-v toolchain RT-Thread 支持 Windows 和 Linux 两种编译开发环境,这里我打算在 Windows 下编译开发,所以需要先去 RT-Thread...GPIO_OSPEED_2MHZ, GPIO_PIN_5); while (1) { gpio_bit_reset(GPIOE, GPIO_PIN_3); rt_thread_mdelay...(300); gpio_bit_reset(GPIOE, GPIO_PIN_4); rt_thread_mdelay(300); gpio_bit_reset(GPIOE, GPIO_PIN_5);...rt_thread_mdelay(300); gpio_bit_set(GPIOE, GPIO_PIN_3); rt_thread_mdelay(30); gpio_bit_set(GPIOE,...GPIO_PIN_4); rt_thread_mdelay(30); gpio_bit_set(GPIOE, GPIO_PIN_5); rt_thread_mdelay(30); } 修改后的代码我推送到了
Ftrace简介 Ftrace是Linux进行代码级实践分析最有效的工具之一,比如我们进行一个系统调用,出来的时间过长,我们想知道时间花哪里去了,利用Ftrace就可以追踪到一级级的时间分布。...test_proc_show()故意调用了一个kill_time()的函数,而kill_time()的函数,又调用了mdelay(2)和kill_moretime()的函数,该函数体内调用mdelay(
rt_pin_write(LED_PIN, PIN_LOW); LOG_D("led on, count: %d", count); rt_thread_mdelay.../* LED 灯灭 */ rt_pin_write(LED_PIN, PIN_HIGH); LOG_D("led off"); rt_thread_mdelay..."ON" : "OFF"); /* 延时一段时间 */ rt_thread_mdelay(500); count++; } return...} } else if (rt_pin_read(PIN_KEY1) == PIN_LOW) { rt_thread_mdelay...} } else if (rt_pin_read(PIN_KEY2) == PIN_LOW) { rt_thread_mdelay
前言 Linux内核中gpio是最简单,最常用的资源(和 interrupt ,dma,timer一样)驱动程序,应用程序都能够通过相应的接口使用gpio,gpio使用0~MAX_INT之间的整数标识,...不能使用负数,gpio与硬件体系密切相关的,不过linux有一个框架处理gpio,能够使用统一的接口来操作gpio.在讲gpio核心(gpiolib.c)之前先来看看gpio是怎么使用的 使用gpio...使用gpio接口需要包含#include ,在驱动中使用延时函数mdelay,需要包含#include 文件,Documentation/gpio.txt...IRQ_TYPE_EDGE_FALLING); } else { set_irq_type(gpio_to_irq(sw->gpio), IRQ_TYPE_EDGE_RISING); } } 参考文章 Linux
/* 读取按键 KEY 的引脚状态 */ if (rt_pin_read(PIN_KEY0) == PIN_LOW) { rt_thread_mdelay...} } else if (rt_pin_read(PIN_KEY1) == PIN_LOW) { rt_thread_mdelay...} } else if (rt_pin_read(PIN_KEY2) == PIN_LOW) { rt_thread_mdelay...rt_pin_write(PIN_LED_G, PIN_HIGH); rt_pin_write(PIN_LED_B, PIN_HIGH); } rt_thread_mdelay
Kd_camera_hw.c (custom\viroyal73\kernel\camera\camera) #include #include #include #include #include #include... #include #include #include “kd_camera_hw.h” //#include...\n”);} mdelay(5); if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST...\n”);} mdelay(5); } #ifdef GPIO_CAMERA_AF_EN_PIN //@ for main to enable AF if (pinSetIdx == 0)
static AlarmManager mAlarmManager; private static PendingIntent pIntent; private static int mDelay...mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, // System.currentTimeMillis(), mDelay...pIntent); mAlarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+mDelay...开启新的定时任务 mAlarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+mDelay...方法代码: mAlarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+mDelay
mRadius, mPaint); // 画水波 canvas.restore(); if (mRadius <= mMaxRadius) { postInvalidateDelayed(mDelay...最后一次画水波,颜色减淡 } else { mPaint.setColor(Color.TRANSPARENT); // 结束水波动画 } postInvalidateDelayed(mDelay...) { initChild(event, mTouchTarget); mPaint.setColor(mPaintColor); postInvalidateDelayed(mDelay...else if (event.getAction() == MotionEvent.ACTION_UP) { bPressed = false; postInvalidateDelayed(mDelay
GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_ResetBits(GPIOB,GPIO_Pin_5); mDelay...(100); GPIO_SetBits(GPIOB,GPIO_Pin_5); mDelay(100); } /* * @brief ESP8266模块初始化 */ void ESP8266...USART2_Clear(); USART2_Write(USART2, (unsigned char *)cmd, strlen((const char *)cmd)); mDelay..., result))) //判断是否有预期的结果 { break; } else { mDelay...(sht20代码就不放出来了) /* 获取温湿度 */ SHT2x_MeasureHM(SHT20_Measurement_T_HM, &temp); mDelay
题目有点大,其实kernel的启动性能调整和android基本没什么关系,我想应该适用所有使用linux的嵌入式设备。 时间测量 说到性能调整,第一件该干的的事就是看下时间到底消耗在哪里。...在某些场合,用mdelay替换init function中的msleep,由于嵌入式设备的HZ是100,因此msleep(1)导致系统调度后,需要10几ms才能重新调度回来,所以对于msleep 5ms...以下都可以替换为mdelay。
/kernel.h> #include #include #include #include #include #include #include struct foo...break; msleep(20); rcu_read_lock(); mdelay...break; msleep(30); rcu_read_lock(); mdelay...包括但不限于:C/C++,Arm, Linux,Android,人工智能,单片机,树莓派,等等。在上面的【人人都是极客】公众号内回复「peter」,即可免费获取!!
mTranslationY = 400; private float mRotationX = 15; private long mDuration = 400; private long mDelay...super(baseAdapter); } @Override protected long getAnimationDelayMillis() { return mDelay
函数参数 timer:对应的定 时器结构体 函数返回值 返回0:成功 函数定义文件 \linux-3.5\include\linux\timer.h 2.4 关闭定时器 函数原型 int del_timer_sync.../kernel.h> #include #include static struct timer_list timer; static...内核提供的延时函数 Linux 内核中提供了进行纳秒、微秒和毫秒延迟。...void ndelay(unsigned long nsecs) ; void udelay(unsigned long usecs) ; void mdelay(unsigned long msecs...在内核中,最好不要直接使用mdelay()函数, 这将无谓地耗费CPU资源。
"Embeded FlyGe"); // write something to the internal memory u8g2.sendBuffer(); rt_thread_mdelay...sendBuffer(); // transfer internal memory to the display rt_thread_mdelay...FlyBrother"); // write something to the internal memory u8g2.sendBuffer(); rt_thread_mdelay...; u8g2.sendBuffer(); rt_thread_mdelay(1000); u8g2.clearBuffer();
领取专属 10元无门槛券
手把手带您无忧上云