Android各代码层获取系统时间的方法 获取链接 Facebook X Pinterest 电子邮件 其他应用 八月 07, 2017 在Android系统里,各代码层如何去获取系统时间呢?可分别调用如下函数来获取: 在java层,可以使用方法:long now = SystemClock.uptimeMillis(); 在native层,可以使用方法:nsecs_t now = systemTime(SYSTEM_TIME_MONOTONIC); 在驱动层,可以使用方法:s64 time = ktime_to_us(ktime_get()); 获取链接 Facebook X Pinterest 电子邮件 其他应用 评论
I/O映射之I/O端口 七月 29, 2018 对于外设,操作系统会采用端口映射和内存映射两种方式来对其进行控制,其中端口映射就是操作系统规定好一段地址给指定换上设,其与外设的寄存器按顺序一一对应上。 在Linux内核源码include/asm-generic/io.h头文件里有如下我们对I/O port进行操作的函数: static inline u8 inb(unsigned long addr) { return readb(addr + PCI_IOBASE); } static inline u16 inw(unsigned long addr) { return readw(addr + PCI_IOBASE); } static inline u32 inl(unsigned long addr) { return readl(addr + PCI_IOBASE); } static inline void outb(u8 b, unsigned long addr) { writeb(b, addr + PCI_IOBASE); } static inline void outw(u16 b, unsigned long addr) { writew(b, addr + PCI_IOBASE); } static inline void outl(u32 b, unsigned long addr) { writel(b, addr + PCI_IOBASE); } #define inb_p(addr) inb(addr) #define inw_p(addr) inw(addr) #define inl_p(addr) inl(addr) #define outb_p(x, addr) outb((x), (addr)) #define outw_p(x, addr) outw((x), (addr)) #define outl_p(x, addr) outl((x), (addr)) 分别对应对端口进行读取或写入字节、字、双字大小数据的操作。 该头文件中还有其他的操作函数及宏定义,请自行深入了解。 我们可通过读取/proc/ioports文件来了解Linux里I/O端口的映射... 阅读全文
【ROS学习-11】用C++编写一个简单的服务端和客户端 九月 24, 2017 1. 首先执行 roscd beginner_tutorials 命令,然后创建 src/add_two_ints_server.cpp 服务端源码,内容如下: #include "ros/ros.h" #include "beginner_tutorials/AddTwoInts.h" bool add(beginner_tutorials::AddTwoInts::Request &req, beginner_tutorials::AddTwoInts::Response &res) { res.sum = req.a + req.b; ROS_INFO("request: x=%ld, y=%ld", (long int)req.a, (long int)req.b); ROS_INFO("sending back response: [%ld]", (long int)res.sum); return true; } int main(int argc, char **argv) { ros::init(argc, argv, "add_two_ints_server"); ros::NodeHandle n; ros::ServiceServer service = n.advertiseService("add_two_ints", add); ROS_INFO("Ready to add two ints."); ros::spin(); return 0; ... 阅读全文
内核线程同步之completion 七月 26, 2018 Completion,完成量,用于多线程间同步,即线程A要往下执行需要等待线程B执行到指定代码后才继续执行,这时就可以使用该机制,用于一个线程告诉另一个线程指定工作已完成。 在Linux Kernel源码include/linux/completion.h文件里有相关的结构体和接口函数的定义和声明,从结构体可以看到其是基于等待队列机制实现的,该机制后期再了解,下面是completion相关内容: struct completion { unsigned int done; wait_queue_head_t wait; }; static inline void init_completion(struct completion *x) ; static inline void reinit_completion(struct completion *x); extern void wait_for_completion(struct completion *); extern int wait_for_completion_interruptible(struct completion *x); extern int wait_for_completion_killable(struct completion *x); extern unsigned long wait_for_completion_timeout(struct completion *x, unsigned long timeout); extern long wait_for_completion_interruptible_timeout( struct completion *x, unsigned long timeout); extern long wait_for_completion_killable_timeout( struct completion *x, unsigned long timeout); extern bool try_wait_for_completion(struct completion *x); extern bool completion_done(struct c... 阅读全文
评论
发表评论