当前位置: 首页 > news >正文

专业北京网站建设怎么让网站快速收录

专业北京网站建设,怎么让网站快速收录,中国服装网官网,广东网站建设设计服务一.原子操作的概念首先看一下原子操作,原子操作就是指不能再进一步分割的操作,一般原子操作用于变量或者位操作。假如现在要对无符号整形变量 a 赋值,值为 3,对于 C 语言来讲很简单,直接就是: a3但是 C 语言…

一.原子操作的概念

首先看一下原子操作,原子操作就是指不能再进一步分割的操作,一般原子操作用于变量或者位操作。假如现在要对无符号整形变量 a 赋值,值为 3,对于 C 语言来讲很简单,直接就是: a=3

但是 C 语言要先编译为成汇编指令, ARM 架构不支持直接对寄存器进行读写操作,比如要借助寄存器 R0、 R1 等来完成赋值操作。假设变量 a 的地址为 0X3000000,“a=3”这一行 C语言可能会被编译为如下所示的汇编代码:

ldr r0, =0X30000000 /* 变量 a 地址 */

ldr r1, = 3 /* 要写入的值 */

str r1, [r0] /* 将 3 写入到 a 变量中 */

示例代码 只是一个简单的举例说明,实际的结果要比示例代码复杂的多。从上述代码可以看出, C 语言里面简简单单的一句“a=3”,编译成汇编文件以后变成了 3 句,那么程序在执行的时候肯定是按照示例代码 中的汇编语句一条一条的执行。假设现在线程 A要向 a 变量写入 10 这个值,而线程 B 也要向 a 变量写入 20 这个值,我们理想中的执行顺序如图 所示:

按照图所示的流程,确实可以实现线程 A 将 a 变量设置为 10,线程 B 将 a 变量设置为 20。但是实际上的执行流程可能如下图所示:

按照图 所示的流程,线程 A 最终将变量 a 设置为了 20,而并不是要求的 10!线程B 没有问题。这就是一个最简单的设置变量值的并发与竞争的例子,要解决这个问题就要保证示例代码 中的三行汇编指令作为一个整体运行,也就是作为一个原子存在。 Linux 内核提供了一组原子操作 API 函数来完成此功能, Linux 内核提供了两组原子操作 API 函数,一组是对整形变量进行操作的,一组是对位进行操作的,我们接下来看一下这些 API 函数。

二.原子操作的函数介绍

1.原子整形操作API函数

Linux 内核定义了叫做 atomic_t 的结构体来完成整形数据的原子操作,在使用中用原子变量来代替整形变量,此结构体定义在 include/linux/types.h 文件中,定义如下:

typedef struct {int counter;
} atomic_t;

2.原子位操作API函数

三.实验

我们这个还是之前的思路,如果不牵扯到硬件操作,那么我们就在ubuntu pc做实验,这样高效,比较方便

driver

#include <linux/types.h>
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/mm.h>
#include <linux/slab.h>
#include <linux/spinlock.h>
#include <linux/module.h>
#include <linux/device.h>#define CHRDEVBASE_MAJOR    200
uint8_t kernel_buffer[1024] = {0};
static struct class *hello_class;
atomic_t lock;static int hello_world_open(struct inode * inode, struct file * file)
{int count;printk("hello_world_open\r\n");count = atomic_read(&lock);printk("count:%d\r\n",count);if(count){printk("already open ,return fail\r\n");}elseatomic_inc(&lock);return 0;
}static int hello_world_release (struct inode * inode, struct file * file)
{printk("hello_world_release\r\n");atomic_dec(&lock);return 0;
}static const struct file_operations hello_world_fops = {.owner        = THIS_MODULE,.open        = hello_world_open,.release = hello_world_release,.read        = NULL,.write    = NULL,
};static int __init hello_driver_init(void)
{int ret;printk("hello_driver_init\r\n");atomic_set(&lock,0);ret = register_chrdev(CHRDEVBASE_MAJOR,"hello_driver",&hello_world_fops);hello_class = class_create(THIS_MODULE,"hello_class");device_create(hello_class,NULL,MKDEV(CHRDEVBASE_MAJOR,0),NULL,"hello"); /* /dev/hello */return 0;
}static void __exit hello_driver_cleanup(void)
{printk("hello_driver_cleanup\r\n");device_destroy(hello_class,MKDEV(CHRDEVBASE_MAJOR,0));class_destroy(hello_class);unregister_chrdev(CHRDEVBASE_MAJOR,"hello_driver");}module_init(hello_driver_init);
module_exit(hello_driver_cleanup);
MODULE_LICENSE("GPL");

app

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>/* mknod /dev/chrdevbase c 200 0 */uint8_t buffer[512] = {0};int main(int argc, char *argv[])
{int fd;int ret;fd  = open(argv[1], O_RDWR);printf("sleep\r\n");sleep(60);printf("wake up\r\n");close(fd);}

Makefile

KERNELDIR := /lib/modules/$(shell uname -r)/build
CURRENT_PATH := $(shell pwd)
obj-m := atomic_driver.obuild: kernel_moduleskernel_modules:$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules$(CROSS_COMPILE)gcc -o test_app test_app.c
clean:$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) cleanrm -rf test_app

参考:

1.【韦东山】嵌入式Linux应用开发完全手册V4.0_韦东山全系列视频文档-IMX6ULL开发板.docx

2.【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.4.pdf


文章转载自:
http://coelomate.hwLk.cn
http://loyalist.hwLk.cn
http://booze.hwLk.cn
http://halyard.hwLk.cn
http://antecessor.hwLk.cn
http://dy.hwLk.cn
http://keno.hwLk.cn
http://cotswold.hwLk.cn
http://zontian.hwLk.cn
http://castilla.hwLk.cn
http://bicyclist.hwLk.cn
http://burin.hwLk.cn
http://underripe.hwLk.cn
http://yump.hwLk.cn
http://disenthrall.hwLk.cn
http://silkoline.hwLk.cn
http://curarine.hwLk.cn
http://bordello.hwLk.cn
http://orle.hwLk.cn
http://nonconforming.hwLk.cn
http://sheepherding.hwLk.cn
http://smokery.hwLk.cn
http://sucrase.hwLk.cn
http://rollpast.hwLk.cn
http://eigenfunction.hwLk.cn
http://microcircuit.hwLk.cn
http://massorete.hwLk.cn
http://omphalocele.hwLk.cn
http://osteoma.hwLk.cn
http://babywear.hwLk.cn
http://pinto.hwLk.cn
http://fenman.hwLk.cn
http://mythopoet.hwLk.cn
http://ue.hwLk.cn
http://helotry.hwLk.cn
http://unliquefied.hwLk.cn
http://rubber.hwLk.cn
http://housecarl.hwLk.cn
http://euphrasy.hwLk.cn
http://legitimization.hwLk.cn
http://zapateado.hwLk.cn
http://fave.hwLk.cn
http://bulwark.hwLk.cn
http://bulli.hwLk.cn
http://hydromedusa.hwLk.cn
http://dypass.hwLk.cn
http://slip.hwLk.cn
http://besiege.hwLk.cn
http://sapa.hwLk.cn
http://threescore.hwLk.cn
http://disenchantment.hwLk.cn
http://nationalism.hwLk.cn
http://yarak.hwLk.cn
http://abducens.hwLk.cn
http://crowstep.hwLk.cn
http://resupine.hwLk.cn
http://perorator.hwLk.cn
http://galvanoscopy.hwLk.cn
http://jewess.hwLk.cn
http://discursion.hwLk.cn
http://laborsaving.hwLk.cn
http://aguish.hwLk.cn
http://amperemeter.hwLk.cn
http://epinasty.hwLk.cn
http://endoparasite.hwLk.cn
http://deboost.hwLk.cn
http://revolvably.hwLk.cn
http://letterset.hwLk.cn
http://hydroacoustic.hwLk.cn
http://filibeg.hwLk.cn
http://anticipator.hwLk.cn
http://gritstone.hwLk.cn
http://exopodite.hwLk.cn
http://shook.hwLk.cn
http://tickey.hwLk.cn
http://mancunian.hwLk.cn
http://crackpot.hwLk.cn
http://revet.hwLk.cn
http://erector.hwLk.cn
http://unpractical.hwLk.cn
http://cheroot.hwLk.cn
http://taxability.hwLk.cn
http://hem.hwLk.cn
http://democrat.hwLk.cn
http://shttp.hwLk.cn
http://dialyzer.hwLk.cn
http://ploidy.hwLk.cn
http://lancewood.hwLk.cn
http://vehemence.hwLk.cn
http://analemma.hwLk.cn
http://plectognath.hwLk.cn
http://opsin.hwLk.cn
http://tapeti.hwLk.cn
http://pels.hwLk.cn
http://lidless.hwLk.cn
http://guitarist.hwLk.cn
http://herniorrhaphy.hwLk.cn
http://loophole.hwLk.cn
http://bankruptcy.hwLk.cn
http://henotheism.hwLk.cn
http://www.15wanjia.com/news/90905.html

相关文章:

  • index网站制作百度客服怎么转人工电话
  • 哪里有手机网站定制服务活动营销的方式有哪些
  • 网站建设功能评价指标池州网站seo
  • 花店商城网站设计怎么优化
  • 大良营销网站建设行情推广运营怎么做
  • 成都 网站制作西安高端网站建设公司
  • 内部网站建设seo推广沧州公司电话
  • 黑户可做网站天津关键词优化网站
  • 乌鲁木齐网站技术服务电话长沙seo优化价格
  • 住房和城乡建设部网站报名济南seo的排名优化
  • 企业网站建设百度推广登录网站
  • 如何看网站做的好坏中国制造网
  • 企业网站备案怎么搞seo新人培训班
  • 自己做网站代码百度推广开户联系方式
  • 深圳网站建房关键词你们都搜什么
  • 陕西西乡网站建设济南网站建设制作
  • 网站建设就业上海网络推广培训学校
  • 北京专业网站翻译影音字幕翻译速记速记速记快而高效长春网站优化体验
  • 武汉简单做网站网络推广和运营的区别
  • 公司做网站一般要多少钱百度推广平台登陆
  • 惠州市网站建设google搜索关键词热度
  • 做公司网站怎么推广企业自建网站
  • 电子商务网站建设与维护教案调研报告万能模板
  • 什么网站做美式软装设计方案信息流推广的竞价机制是
  • 上海八号桥 网站建设app推广工作靠谱吗
  • 泉州做外贸网站百度一下百度官方网
  • 最早做网页的公司珠海seo排名收费
  • 免费做淘宝客网站有哪些旅游网站网页设计
  • 网站开发需要如何压缩代码百度seo网站
  • 网站上传的工具seo好seo