标biao
码龄7年
  • 992,838
    被访问
  • 382
    原创
  • 1,719
    排名
  • 8,766
    粉丝
关注
提问 私信

个人简介:我非常喜欢编程

  • 加入CSDN时间: 2015-09-27
博客简介:

biao2488890051的博客

查看详细资料
  • 7
    领奖
    总分 3,939 当月 339
个人成就
  • 获得1,009次点赞
  • 内容获得361次评论
  • 获得3,209次收藏
创作历程
  • 61篇
    2022年
  • 140篇
    2021年
  • 52篇
    2020年
  • 99篇
    2019年
  • 58篇
    2018年
  • 2篇
    2017年
成就勋章
TA的专栏
  • 多核调度
    8篇
  • 编译器
    24篇
  • 论文
    36篇
  • 实时系统
    46篇
  • 桌面操作系统
    45篇
  • 人生
    3篇
  • coq
    2篇
  • 3D建模 Sketch Up学习
    1篇
  • c++
    9篇
  • 建模技术
    1篇
  • 自我介绍
  • 带括号四则运算算法
    1篇
  • opengl
    7篇
  • 旋转矩阵变换
    1篇
  • qt
    41篇
  • c语言
    22篇
  • 算法
    5篇
  • ucosiii内核源码
    10篇
  • FPGA学习
    5篇
  • Python学习
    8篇
  • 神经网络
    2篇
  • 常见问题
    41篇
  • Nios
    7篇
  • 数学
    14篇
  • stm32
    36篇
  • matlab
    3篇
  • 语法
    3篇
  • web开发
    14篇
  • 3dmax
    2篇
  • 技巧总结
    2篇
  • stc单片机
    4篇
  • 计算机结构和程序原理
    9篇
  • 计算机结构与程序原理
    1篇
  • 语文
    1篇
  • ps
    1篇
自定义显示区
我自定义的模块显示在这里
  • 最近
  • 文章
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

多核调度算法—加速因子的作用

讨论这个任务集在单核上,各调度算法A,B的优劣性。所有任务的利用率{0.3,0.5,0.6},U=1.4我们发现这个任务集在单核上,本身就是不可调度的,那么对于算法A,B,还讨论调度优劣性有什么意义呢。比如A算法成功调度任务集的利用率上界是0.6,而B算法是0.7,我们说B算法优于A,但是对于上述本身就不可调度的任务集,这个比较就没有意义。但是如果我们用加速因子f,就会有意义,加速因子表示成功调度一个任务集相较于最优调度算法需要处理器提速的倍数。这个就不依赖于采用的任务集了,我只要提速处理器速度,总
原创
发布博客 23 小时前 ·
7 阅读 ·
0 点赞 ·
0 评论

多核实时调度—任务分配启发式算法解读

实时任务分配是背包问题(n个任务分配到m个背包中),为了获得理论最优的任务分配方法(穷举法,时间复杂度,即非多项式复杂度,为n的指数),NP-Hard,前面文章说了,PTAS算法可在运行时多项式时间复杂度以认为给定误差精度接近理论最优(其实原理就是预处理阶段提前用穷举法计算好了放在一个查找表里,运行时和这个表里进行查找匹配即可)多核实时调度—多项式时间复杂度最优任务分配算法PTAS解读_标biao的博客-CSDN博客背包问题的多种解法201226630407 - 百度文库PTAS方法虽然好,但是操作..
原创
发布博客 昨天 15:58 ·
15 阅读 ·
0 点赞 ·
0 评论

visio中保存后撤销无法使用

问题现象:正在Visio里画图呢,保存后(ctr+s),发现无法撤销之前的步骤了,就好像保存后,会把历史操作步骤全部清空了,我感觉是个bug。(之前我的Visio也不这样(文件保存操作不影响undo和redo操作),而且别人电脑的visio也不这样)网上搜了一下,倒是也有人问过这个,但是没有给出答案。解决办法:经过我的测试,我把里面的内容全部复制,然后新建一个visio文件粘贴进去,发现这个新的visio文件里面却是可以保存后仍然撤销的(所以就通过这样方式解决吧,以后就用这个新的visi
原创
发布博客 昨天 11:03 ·
8 阅读 ·
0 点赞 ·
0 评论

多核实时调度—多项式时间复杂度最优任务分配算法PTAS解读

PTAS 针对periodic任务,在每个核上采用EDF调度,是一种可以以 误差接近理论最优的实时任务分配算法,其中 是一个我们人为指定的常数,最牛逼的是,该算法在运行时可以以多项式复杂度时间得到以为误差的最优分配结果。该方法的实现过程如下:首先指定(下面我们的分析用字母e代替了),然后穷举法生成所有可行的分配表,然后运行时(比如实时操作系统正在运行了)查找匹配该分配表,从而得到分配结果。详细过程如下:离散化利用率0-1的所有到区间:(e/(1+e), e],(e, e(1+e...
原创
发布博客 前天 22:01 ·
27 阅读 ·
1 点赞 ·
0 评论

多核实时调度任务分配解读

多个Periodic任务在m个核上分配(每个核采用EDF调度,因此每个核上界为1即可),其实最坏情况情况下最大利用率为 ,也就是任务集的利用率只要小于等于这个值,那就是一定可以调度的。其实也很好理解,每个任务都是,那么每个核刚好只能分配下一个任务,因此,此时,是可调度的,再来一个0.5利用率的,就不可调度了。但是任意来一个小于0.5的任务,就是可调度的了,因此,这样的极端情况总利用率为2.5了。...
原创
发布博客 前天 09:12 ·
10 阅读 ·
0 点赞 ·
0 评论

word复制某些公式无响应处理方法

说来也怪,有些公式复制就没问题,某一个公式复制就是有问题,仔细观察,那个公式其实没什么异样,所以总结来看,word还是有bug的,同样的我用wps试了,就是没问题,所以这里要给wps点赞。我的解决办法:用wps打开这个word文档,把公式复制好,保存关闭。再用word打开,就可以了,但是那个公式仍然还是不能复制,所以我把它删除,从复制好的那个公式复制回那儿,就可以了,而且这个公式再复制到别处也是没问题的。所以说到底,那个公式本身被word识别为有问题的公式。...
原创
发布博客 2022.05.15 ·
233 阅读 ·
0 点赞 ·
0 评论

c语言编译器UCC学习旅程 总结与感悟

在2013年上本科时候,刚开始学c语言时,程序编译运行。就很神奇,编译过程中,编译器怎么就知道成千上万行代码中哪句代码有问题,能定位到某一行某一列,甚至还能提示你如何修改代码,这是如何做到的呢,也太奇妙了吧!!!尽管有这样的疑惑,但是当时的我实在太菜,也不是计算机专业,于是也没有深究。但是这个疑惑和好奇一直伴随着我。后面读了计算机研究生,决定解开这个迷惑,寒假期间,于是按照网上推荐,买了经典的编译原理龙书,虎书等等多本书,看了感觉还是很高深,于是去B站看了哈工大老师的编译原理视频,感觉自己好像懂了,但是
原创
发布博客 2022.05.12 ·
187 阅读 ·
1 点赞 ·
2 评论

UCC编译器学习笔记21

在汇编代码生成中,一个很重要的问题就是寄存器的分配。在计算机中,CPU 的速度比内存的速度快得多,编译器应尽量有效地利用寄存器资源,减少对内存的不必要访问,从而提高由编译器生成的汇编代码的运行速度。在中间代码生成阶段,UCC 编译器用临时变量 t 来存放形如“t: a+b;”的公共子表达式的值;到了汇编代码生成时,UCC 编译器会尽可能地把这些公共子表达式的值存放在寄存器,当需要再次重用时,就可以直接由相应的寄存器中得到。不过,CPU 中寄存器的资源是很有限的,在 32 位的 x86 芯片上,
原创
发布博客 2022.05.10 ·
112 阅读 ·
0 点赞 ·
0 评论

x86汇编知识以及应用详解

基础知识:指令规则:movl $0 %eax,把常数0加载到eax寄存中。这里的后缀字母l表示long:4字节,此外还有w表示word:2字节(为了服从传统而已,其实现代意义的word就是4字节了),b表示byte:1字节。寄存器前面都得加个%,我猜这个是从编译器的指令模板来的,编译的指令模板就是movl %0 %1这样,其中%0表示占位符,也就是待替入的寄存器。x86的栈是高地址--->低地址增长的形式。x86寄存器名字不好记,没有arm的叫法容易区分(arm是R0-R15,多好听呀)。
原创
发布博客 2022.05.10 ·
121 阅读 ·
0 点赞 ·
0 评论

UCC编译器学习笔记20

UCC 编译器内部用英文单词 generate 来表示中间代码的生成,而用 emit 来表示汇编代码的生成,这里我们统一翻译为“生成”。第 30 至 34 行的代码用于保存寄存器的值,第 35 行用于在栈空间中预留内存空间,用来存放局部变量和临时变量,这部分工作被称为“Prologue 序言”,即在函数开始执行时要处理的工作。而图 6.1.1 第 53 至 57 行被称为“Epilogue 尾声”,用于恢复原先保存的寄存器值,第 58 行的汇编指令 ret 用于从栈中取出返回地址并返回。而函
原创
发布博客 2022.05.09 ·
167 阅读 ·
0 点赞 ·
0 评论

UCC编译器学习笔记19

switch case语句和if else语句到底有什么区别:switch case语句要求case后必须是常量,因此要求更为严格,但是该语句的执行效率最高,可以认为在O(1)时间匹配到目标分支执行。这是为什么呢,看下面switch (a)case constant1: xx;case constant2: xx;case constant3: xx;。。。编译器把case语句后面的常量进行了表格化跳转,就是和地址直接绑定在了一块,这样可以直接跳转,如下:case 0:
原创
发布博客 2022.05.09 ·
218 阅读 ·
0 点赞 ·
0 评论

UCC编译器学习笔记18

我们再分析条件表达式的翻译,以下给出了一段 C 程序及其对应的中间代码,我们生成临时一个临时变量 t0 用来存放 b+2 或 b+3 的值,然后再把 t0 赋值给变量 c。/************************************************************************Syntax conditional-expression: logical-OR-expression...
原创
发布博客 2022.05.09 ·
76 阅读 ·
0 点赞 ·
0 评论

UCC编译器学习笔记17

UCC在处理数组和结构体成员的时候,都是直接转为偏移值了,偏移值是以字节为单位,例如:int (*ptr)[4] = &arr;(*ptr)[2] ---> ptr[0][8] -----> (ptr, 8)ptr 是指向 int[4]数组的指针, C 程序员通过(*ptr)[2]来访问数组元素时,UCC 编译器会在语义检查CheckUnaryExpression 时构造成一棵形如([] ([] ptr 0) 8)的语法树(8是以字节为单位的),在翻译这个语法树时,我们会计算
原创
发布博客 2022.05.07 ·
385 阅读 ·
0 点赞 ·
0 评论

UCC编译器学习笔记16

方案2中,无论a为真还是假,都只需要跳转一次,但是方案1不是,因此UCC编译器选的是第二种中间代码生成方案。这个其实是个模板,就是待判断的表达式为真,则跳转到F2,否则顺序执行块会跳到Next2块。其实指令的执行,就分为两种,顺序执行,跳转执行(引起了控制流的改变)。顺序执行的最小单元,叫做块bblock。那么生成指令时候,无非就是执行指令(不需要产生有向边),或者跳转到块的指令(由于这个是一个块要到另一个块了,因此同时会产生一条有向边)...
原创
发布博客 2022.05.07 ·
59 阅读 ·
1 点赞 ·
0 评论

UCC编译器学习笔记15

关于结构体中,位域成员的赋值原理:struct PTE{int offset : 12;int pgNo : 20;}struct PTE pte = {64,3};给pte赋值,其实就是 (3<<12) | 64原理:由于struct PTE占32位,3想赋值给第二个成员,而64想赋值给第一个成员,而64的高12位一定会为0的(这是程序员肯定会控制的)...
原创
发布博客 2022.05.05 ·
286 阅读 ·
0 点赞 ·
0 评论

主流编译器比较

这里比较Clang和gcc:clang只需要完成词法和语法分析,代码优化和机器代码的生成工作由llvm完成。所以和全部由自己包下的gcc比起来,clang可以更专注地做好一件事。这种结构也使clang可以被单独拿出来用在其他的程序里。比如vim的clang_complete插件就是利用clang进行语法分析后给出精确的自动补全和语法错误提示的。而gcc就没法很方便地做到这一点。在实用性方面,除了有更快的编译速度更快和更友好的出错提示外,clang还内置有静态分析工具,可以对代码进行静态分析(
原创
发布博客 2022.05.05 ·
45 阅读 ·
0 点赞 ·
0 评论

UCC编译器学习笔记14

语法分析,并没有构建出类型系统,只是构建出关系骨架语义分析,才赋予了每个标识符灵魂
原创
发布博客 2022.05.04 ·
296 阅读 ·
0 点赞 ·
0 评论

UCC编译器学习笔记13

我们来思考个问题:int a;int a[3][4];假如有两个定义,现在我们要想描述出标识符a的类型信息,我们会怎么做呢,对于第一句代码:下面的Type类型中的categ置为一个数,即可表明它的类型了。 对于第二句代码:a不仅需要int信息,还有,它是指针信息,还有它是指向int * [3][4]的这些信息,这个仅仅Type类型中的成员是无法表述的了,因此需要最下面的typeDerivList类型,也就是复合类型,用来描述该标识符的更多信息。除了数组外,函数,指针,等也属于符合类型,有多
原创
发布博客 2022.05.04 ·
994 阅读 ·
0 点赞 ·
0 评论

UCC编译器学习笔记12

assert函数/***********************************************************assert(sym->kind == SK_TypedefName);(void)((e)||_assert(#e, __FILE__, __LINE__))(void)((sym->kind == SK_TypedefName)||_assert("sym->kind == SK_TypedefName", __FILE__,
原创
发布博客 2022.05.03 ·
237 阅读 ·
0 点赞 ·
0 评论

UCC编译器学习笔记11

语义检查就是建立成最完善的类型系统,这些类型是我们能读懂的信息了。而被声明的标识符的类型信息正好是分布在 DeclarationSpecifiers 和 Declarator 中,通过调用第 29 或 46 行的 DeriveType函数,会把这两部分的类型信息组合到一起,构造完整的类型信息。例如,对于 int arr[4]来说,int 是其声明说明符,而 arr[4]是声明符,只有把 int 和[4]组合到一起,我们才能得到arr 的类型信息为 int [4]。...
原创
发布博客 2022.05.03 ·
190 阅读 ·
0 点赞 ·
0 评论
加载更多