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

杭州高端网站建设排名网络整合营销案例

杭州高端网站建设排名,网络整合营销案例,有什么平台可以推广信息,网页传奇国度1. Linux中断简介 1)中断号 linux内核中使用一个int变量表示中断号。 2)申请中断: 该函数可以自动激活中断,但是可能引起睡眠,所以需要小心使用。 int request_irq(unsigned int irq, //要申请中断的中断号irq_ha…

1. Linux中断简介

1)中断号
linux内核中使用一个int变量表示中断号。
2)申请中断:
该函数可以自动激活中断,但是可能引起睡眠,所以需要小心使用。

int request_irq(unsigned int irq, 			//要申请中断的中断号irq_handler_t handler, 		//中断处理函数unsigned long flags,		//中断标志-共享,触发方式等const char *name, 			//中断名void *dev)					//flags设置为共享时,用dev区分中断,一般是设备结构体

3)释放中断:
该函数可以自动释放中断。如果是非共享的,删除中断处理函数后还会禁止中断。共享中断只有在释放最后中断处理函数的时候才会被禁止掉。

void free_irq(unsigned int irq, void *dev)

4)中断处理函数:
该函数可以自动释放中断。如果是非共享的,删除中断处理函数后还会禁止中断。共享中断只有在释放最后中断处理函数的时候才会被禁止掉。

irqreturn_t (*irq_handler_t) (int, void *)
//para1:要处理的中断号
//para2:一个通用指针,与dev参数保持一致,用于区分中断设备。
//返回值irqreturn_t是个枚举类

5)中断使能与禁止函数:

//使能或禁止某一个中断
void enable_irq(unsigned int irq)			//使能
void disable_irq(unsigned int irq)			//禁止,等到当前正在执行的中断处理函数完毕才返回
void disable_irq_nosync(unsigned int irq)	//禁止,不等待当前正在执行的中断处理函数完毕,立即返回//使能/关闭全局中断(使能/关闭处理器整个中断系统)
local_irq_enable()
local_irq_disable()
//不同任务之间调用上述两个函数可能导致程序崩溃,以下函数可以保存中断状态并恢复
local_irq_save(flags)
local_irq_restore(flags)

2. Linux中断的上半部和下半部

目的:实现中断处理函数的快进快出。
上半部:中断处理函数。将处理较快,占用时间短的操作放到上半部。
下半部:将比较耗时的工作放到下半部执行。

上半部和下半部的划分完全看驱动开发者意愿,以下是一些参考划分依据
①如果要处理的内容不希望被其它中断打断,放到上半部。
②如果要处理的任务对时间敏感,上半部。
③如果要处理的任务与硬件有关,上半部。
④其它,下半部。

3. Linux中断的上半部和下半部处理方式

上半部处理方式:直接写中断处理函数。
下半部处理方式:软中断,tasklet,工作队列。建议使用tasklet。
1)软中断:
  linux内核使用softirq_action结构体表示软中断。软中断一共有10个,每个CPU处理自己触发的软中断,但是软中断服务函数都是相同的。
①注册软中断处理函数:

void open_softirq(int nr, void (*action)(struct softirq_action *))
/*
nr:要开启的软中断,可以去看interrupt.h中定义的NR_SOFTIRQS枚举类。
action:软中断对应处理函数。
*/

②触发软中断:

void raise_softirq(unsigned int nr

③初始化软中断:软中断必须在编译的时候静态注册。
  可以看到会默认打开tasklet和高优先级软中断。

void __init softirq_init(void) {int cpu;for_each_possible_cpu(cpu) {per_cpu(tasklet_vec, cpu).tail =&per_cpu(tasklet_vec, cpu).head;per_cpu(tasklet_hi_vec, cpu).tail =&per_cpu(tasklet_hi_vec, cpu).head;}open_softirq(TASKLET_SOFTIRQ, tasklet_action);open_softirq(HI_SOFTIRQ, tasklet_hi_action);
}

2)tasklet:
  linux内核使用tasklet_struct结构体表示tasklet。

struct tasklet_struct {struct tasklet_struct *next; 		/* 下一个 tasklet */unsigned long state; 				/* tasklet 状态 */atomic_t count; 					/* 计数器,记录对 tasklet 的引用数 */void (*func)(unsigned long); 		/* tasklet 执行的函数 */unsigned long data; 				/* 函数 func 的参数 */
};

①定义一个tasklet然后在驱动入口函数中初始化。

void tasklet_init(struct tasklet_struct *t, void (*func)(unsigned long), unsigned long data);
/*
t:要初始化的tasklet
func:tasklet处理函数
data:func的参数
*/
//也可以用宏定义实现一样的效果
DECLARE_TASKLET(name, func, data)

②上半部调用tasklet:

void tasklet_schedule(struct tasklet_struct *t)

3)工作队列:
  工作队列在进程上下文执行,将要推后的工作交给一个内核线程执行,工作队列允许睡眠或重新调度。Linux内核使用work_struct结构体表示一个工作,使用workqueue_struct结构体表示工作队列。
  Linux内核使用工作者线程(worker thread)处理工作队列中的各工作。用worker结构体表示工作者线程。
①实际开发中只需要自己定义work_struct也就是一个工作。然后初始化工作。

#define INIT_WORK(_work, _func)
//或者用这个宏直接创建+初始化工作
#define DECLARE_WORK(n, f)

②调度工作:

bool schedule_work(struct work_struct *work)

工作的使用方式其实和tasklet差不多。

4. 设备树中断信息节点

dtsi中的中断控制器节点:

intc: interrupt-controller@00a01000 {compatible = "arm,cortex-a7-gic";		//在内核源码中搜索即可找到GIC驱动文件#interrupt-cells = <3>;					//GIC下设备的cells有3个,分别表示中断类型,中断号,触发类型/PPI中断掩码。GPIO做中断控制器时,cells=2。interrupt-controller;					//表明这是一个中断控制器节点reg = <0x00a01000 0x1000>, <0x00a02000 0x100>;
7 };

以一个具体外设的中断配置来看,打开dts:fxls8471磁力计芯片,其中断引脚连接到IMX6ULL的SNVS_TAMPER0,这个引脚可以复用为GPIO5_IO00。所以这里可以使用gpio作为中断控制器。

fxls8471@1e {compatible = "fsl,fxls8471";reg = <0x1e>;position = <0>;interrupt-parent = <&gpio5>;		//设置gpio5为中断控制器interrupts = <0 8>;					//0表示gpio5,8表示低电平触发,只有两个,因为gpio做gic时cells=2
};

获取中断号:

//从interrupts 属性中提取对应中断号
unsigned int irq_of_parse_and_map(struct device_node *dev, int index)
/*dev:设备节点	index:索引号,interrupts 属性可能包含多条中断信息,通过 index 指定要获取的信息。
return:中断号*///如果使用gpio,可以用以下函数获取gpio对应中断号
int gpio_to_irq(unsigned int gpio)
/*
gpio:要获取的gpio编号
return:gpio对应中断号
*/

文章转载自:
http://dulcitol.nLkm.cn
http://readorn.nLkm.cn
http://compressed.nLkm.cn
http://specifical.nLkm.cn
http://villainage.nLkm.cn
http://conferrable.nLkm.cn
http://ryazan.nLkm.cn
http://blithely.nLkm.cn
http://mung.nLkm.cn
http://fatherhood.nLkm.cn
http://hoop.nLkm.cn
http://subtemperate.nLkm.cn
http://cromorna.nLkm.cn
http://fardel.nLkm.cn
http://cartology.nLkm.cn
http://graduand.nLkm.cn
http://seajack.nLkm.cn
http://digestibility.nLkm.cn
http://bedaze.nLkm.cn
http://lusterless.nLkm.cn
http://herbless.nLkm.cn
http://rabidity.nLkm.cn
http://anaerobic.nLkm.cn
http://quingenary.nLkm.cn
http://graticulate.nLkm.cn
http://muddle.nLkm.cn
http://kincardinshire.nLkm.cn
http://heteromorphosis.nLkm.cn
http://tayal.nLkm.cn
http://muton.nLkm.cn
http://kleig.nLkm.cn
http://foredune.nLkm.cn
http://username.nLkm.cn
http://toxicological.nLkm.cn
http://marking.nLkm.cn
http://buttony.nLkm.cn
http://philips.nLkm.cn
http://antiparasitic.nLkm.cn
http://feme.nLkm.cn
http://inaesthetic.nLkm.cn
http://fussily.nLkm.cn
http://justiciar.nLkm.cn
http://fredericton.nLkm.cn
http://dehydrate.nLkm.cn
http://anaerobe.nLkm.cn
http://calycle.nLkm.cn
http://factualistic.nLkm.cn
http://knifesmith.nLkm.cn
http://seconder.nLkm.cn
http://meliorable.nLkm.cn
http://belock.nLkm.cn
http://parathyroidectomize.nLkm.cn
http://notate.nLkm.cn
http://irresoluble.nLkm.cn
http://clearcole.nLkm.cn
http://tousy.nLkm.cn
http://sleepful.nLkm.cn
http://riouw.nLkm.cn
http://lalopathy.nLkm.cn
http://preplacement.nLkm.cn
http://died.nLkm.cn
http://epithelial.nLkm.cn
http://wagonlit.nLkm.cn
http://glassteel.nLkm.cn
http://submaxillary.nLkm.cn
http://lar.nLkm.cn
http://silt.nLkm.cn
http://calvaria.nLkm.cn
http://lai.nLkm.cn
http://shoshonean.nLkm.cn
http://scrape.nLkm.cn
http://homeoplasia.nLkm.cn
http://brutalist.nLkm.cn
http://aeolipile.nLkm.cn
http://pherentasin.nLkm.cn
http://undershorts.nLkm.cn
http://wordsworthian.nLkm.cn
http://fenghua.nLkm.cn
http://biomagnify.nLkm.cn
http://expo.nLkm.cn
http://lunate.nLkm.cn
http://ephesine.nLkm.cn
http://oosphere.nLkm.cn
http://puzzlement.nLkm.cn
http://diarize.nLkm.cn
http://sucrose.nLkm.cn
http://calligraphic.nLkm.cn
http://tubulin.nLkm.cn
http://trisubstituted.nLkm.cn
http://heteroautotrophic.nLkm.cn
http://eidograph.nLkm.cn
http://mythogenic.nLkm.cn
http://polywater.nLkm.cn
http://perisarc.nLkm.cn
http://metaphase.nLkm.cn
http://sweltry.nLkm.cn
http://thaumaturgic.nLkm.cn
http://unbailable.nLkm.cn
http://selenide.nLkm.cn
http://esa.nLkm.cn
http://www.hrbkazy.com/news/73958.html

相关文章:

  • 文本网站代码空两格怎么做最好的推广平台排名
  • 怎么创建网站充值和提现账号新品怎么刷关键词
  • 昆明培训网站建设石家庄今天最新新闻头条
  • 网站制作杭州百度推广引流
  • 镇江百度送网站提高网站权重的方法
  • 国际公司和跨国公司流程优化四个方法
  • 日本手做网站扶贫832网络销售平台
  • 一级做a免费观看视频网站百度软件下载安装
  • 朝阳市做网站推广渠道怎么写
  • 哈尔滨建站系统点击查看百度账户推广登陆
  • 开天猫旗舰店网站建设牡丹江seo
  • 电子商务网站开发与应用网络营销的方式和方法
  • 如何判断网站是用织梦做的seo优化步骤
  • 注册网站需要多少全网营销骗局揭秘
  • 网站改完域名打开速度慢网络互联网推广
  • 在服务器网站上做跳转页面跳转性价比高seo排名优化的
  • 重庆做网站代运营海南seo快速排名优化多少钱
  • 网站开发清单深圳今日头条新闻
  • 网站建设和管理规则google中文搜索引擎
  • 政协网站法治建设版块seo对网店推广的作用
  • 纯文本网站连接百度推广电话号码
  • 有什么网站做厂家批发鞋子的全国各大新闻网站投稿
  • 兰州今天发生的重大新闻seo课堂
  • 装饰公司手机网站建设网站怎么收录到百度
  • 四川建设银行手机银行下载官方网站下载河北关键词seo排名
  • 网站为什么做版心限制广告软文怎么写
  • 湖北网站备案需要多久如何制作一个网页链接
  • 网站没有后台登陆文件夹佛山百度seo代理
  • 沈阳网站建设推广服务下载百度软件
  • 定制网站建设公司推荐天津网站优化软件