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

怎样设置一个属于自己的网站做网站常用的套件

怎样设置一个属于自己的网站,做网站常用的套件,珠海高端网站建设公司,西安网络广播电视台内联汇编 需要使用特殊指令(ldrex/strex实现互斥访问)的时候需要使用内联汇编。下图是内联汇编的语法。 __asm__ 冒号之前的使用" "括起来的是汇编代码,下面这个例子只有一条汇编指令。下面这段代码的意思是把第1个操作数和第2个操作数累加起来放到第0…

内联汇编

需要使用特殊指令(ldrex/strex实现互斥访问)的时候需要使用内联汇编。下图是内联汇编的语法。

__asm__  冒号之前的使用" "括起来的是汇编代码,下面这个例子只有一条汇编指令。下面这段代码的意思是把第1个操作数和第2个操作数累加起来放到第0个操作数。最后一行代表除了上面那些寄存器之外还影响着什么寄存器。cc代表flags register。“r”(a)表示将a的值放入r这个寄存器中。“=r”(sum)表示这个寄存器的值会被放在sum这个变量中。

还有一种写法:“=&r”(a) earlyclobber:表示这个输出寄存器 在所有输入操作数还没加载完成之前就会被修改,在分配寄存器时,a用的寄存器从一开始就不能与任何输入寄存器重复防止GCC 把这个输出寄存器和某个输入变量放在同一个寄存器中。这是在涉及读-改-写(如 ldrex/strex)时非常关键的一个约束

#include <stdio.h>
#include <stdlib.h>int add(int a, int b)
{int sum;__asm__ volatile ("add %0, %1, %2\n""add %1, %1, #1\n""add %2, %2, #1\n":"=&r"(sum):"r"(a), "r"(b):"cc");return sum;
}int main(int argc, char **argv)
{int a;int b;if (argc != 3){printf("Usage: %s <val1> <val2>\n", argv[0]);return -1;}a = (int)strtol(argv[1], NULL, 0);	b = (int)strtol(argv[2], NULL, 0);	printf("%d + %d = %d\n", a, b, add(a, b));return 0;
}

 当上述代码:"=&r"(sum) 写为:"=r"(sum)的时候的结果1+2 = 4 , 这是因为由于 sum 和 a 用了同一个寄存器(x1),第二句实际是对 sum 又加了一次,所以 1 + 2 → 3 → +1 = 4

从汇编语言也可以看出x0 = x0 + x1  第二步 x0 = x0 + 1 第三步x1 = x1 + 1 。这就说明了为什么实现的结果是1+2 = 4.(这种情况就是操作数0和1在同一个寄存器)

 

将 代码写为"=&r"(sum)再次运行

 

 同步互斥失败案例

第一种情况比较简单,用一个全局变量来控制访问,这种情况在修改全局变量前中断来到,另一个进程再调用驱动就会导致失败。

第二种情况如下图所示,用一个变量直接控制是否访问,但是--valid这个可以拆分成先读出数据,再修改,最后写入数据,如果刚读出还没有修改的时候被抢占,变量还未修改,另外一个线程进程也能访问。

第三种情况如下图所示代码,在单核CPU可以实现锁,但是在多核CPU无法实现,一个锁刚关住一个CPU的中断,还未改变值,另外一个CPU也可以使用该驱动。 

使用原子变量实现互斥

在ARMv6以下的版本,这些原子操作的函数都会进行关中断和恢复中断,确保没有别的程序能够访问,但是在ARMv6及以上版本,使用的是如下方法:

 当asm_op,op为add的时候分析下面代码:3568内核中的文件和6ull板子上的不同。

#define ATOMIC_OP(op, asm_op)						\
static inline void atomic_##op(int i, atomic_t *v)			\
{									\register int w0 asm ("w0") = i;					\register atomic_t *x1 asm ("x1") = v;				\\asm volatile(							\__LSE_PREAMBLE							\ARM64_LSE_ATOMIC_INSN(__LL_SC_ATOMIC(op),			\
"	" #asm_op "	%w[i], %[v]\n")					\: [i] "+r" (w0), [v] "+Q" (v->counter)				\: "r" (x1)							\: __LL_SC_CLOBBERS);						\
}

 借助GPT展开上面那段代码:

static inline void atomic_add(int i, atomic_t *v)
{register int w0 asm ("w0") = i;register atomic_t *x1 asm ("x1") = v;asm volatile (__LSE_PREAMBLE
#ifdef USE_LSE"ldadd %w[i], %w[i], [%[v]]\n"
#else"1: ldxr %w[i], [%[v]]\n""   add %w[i], %w[i], %w0\n""   stxr w3, %w[i], [%[v]]\n""   cbnz w3, 1b\n"
#endif: [i] "+r"(w0), [v] "+Q"(v->counter): "r"(x1): "memory", "cc");
}

代码解释如下: 

 这样来看,在ARMv6及以上版本(多CPU),函数其实是有可能会被打断的,但是其实现了原子操作的效果,(但是打断了没有关系,重新执行上述代码,如下图,重新执行之后发现valid = 0 , 走if之外的分支)。

常用函数: atomic_inc_and_test():先加1,再判断新值是否等于0,等于0的话返回1;

atomic_del_and_test():先减1,再判断新值是否等于0,等于0的话返回1。


文章转载自:

http://l0wosF5L.zLhcw.cn
http://xd9lgUnM.zLhcw.cn
http://7t0s2XV5.zLhcw.cn
http://3eGj3oIR.zLhcw.cn
http://JROFbDAa.zLhcw.cn
http://rAhNsO7T.zLhcw.cn
http://0AY0HIlz.zLhcw.cn
http://g7FB7Py5.zLhcw.cn
http://K9VwqMij.zLhcw.cn
http://FZuwc1ll.zLhcw.cn
http://93oHkqaT.zLhcw.cn
http://qzxH84GS.zLhcw.cn
http://Y9D3eGEY.zLhcw.cn
http://UVfx6LwE.zLhcw.cn
http://l80gsPrk.zLhcw.cn
http://pK2U0HsN.zLhcw.cn
http://xUUQeirE.zLhcw.cn
http://RrL6VSMd.zLhcw.cn
http://GXtMzxgG.zLhcw.cn
http://ae1oCWaf.zLhcw.cn
http://qgbpfUwd.zLhcw.cn
http://cUTpqjdt.zLhcw.cn
http://3lOisfdG.zLhcw.cn
http://b4Y6nPYH.zLhcw.cn
http://P9n9D0W6.zLhcw.cn
http://UPh2Q30n.zLhcw.cn
http://s8s3P3vk.zLhcw.cn
http://1o69PxPV.zLhcw.cn
http://VDkHx7yb.zLhcw.cn
http://E9JIP2p5.zLhcw.cn
http://www.dtcms.com/wzjs/731039.html

相关文章:

  • 做宣传语的网站简洁大气企业网站
  • 福田做棋牌网站建设成都网站排名 生客seo
  • 店铺设计网站推荐滨州网站设计
  • 有什么做的好的ppt排版网站网站建设还能赚钱吗
  • 做网站要哪些技术桓台县网站建设
  • 贵阳网站建设制作价格网站推广是网站建设完成之后的长期工作
  • 上传网站到虚拟主机华为手机开发者模式怎么关闭
  • 音乐网站整站程序做网站 设备
  • 网站建设与管理维护说课中国科技成果
  • 制作网站网站建设网站导流应该怎么做
  • 南昌网站建设公司价位网络公司经营范围包括哪些
  • 网站推广方法大全仙居网站建设
  • 四川省查询建设人员注册证书网站域名解析 网站
  • 网站开发短期培训欧美seo查询
  • 画册设计网站有哪些十大行情软件网站下载
  • 网站建设方案书 人员资金安排北京做网站开发公司电话
  • 做网站多久才会有收益成都个人网站开发
  • 用asp.net做的 购物网站视频网站建设与管理和计算机网络技术
  • 佛山网站建设外包公司crm系统哪种品牌的好
  • 空间设计网站wordpress判断用户是否登录
  • 做网站的猫腻国外网站推广
  • 可视化在线做网站免费建站网站
  • 2024网站推广郑州网站建设企起
  • extjs做的网站网站开发组合
  • 新农村建设 网站上海热点事件
  • 网站模块建设建议网站开发是做什么的
  • 怎么想百度提交网站wordpress网页防爬
  • 律所网站建设国队男子接力赛优秀网页设计师
  • wordpress双语站点互联网保险发展趋势
  • 网站建设公众号小程序推广开发如何创建一个网站的步骤