• [其他语言] armv8 neon加速汇编指令与armv7 32位对比
    化鲲为鹏,我有话说最近在研究视频解码器的代码,他们用的armv7 neon,即32位的neon指令寄存器,如何在鲲鹏arm64位系统运行,进一步的,如何优化重新代码,使用armv8提供的neon指令?先来说,如何做到armv7 32位neon和armv8 64位neon指令兼容性?推荐使用arm-neon.h头文件提供的内联汇编函数,编译器已经做了兼容。如果追求性能,也可以自己再写一套armv8 neon的实现,但这样代码可移植性差。其次,armv8 neon对armv7 neon性能更好吗?未必,原因:1、armv7和armv8都使用了128位的寄存器,只是armv7 128寄存器的个数比armv8少了一半。如果引用的寄存器数量不超过16,不引起寄存器与内存交换数据,那么性能应该持平;2、armv7 neon和armv8 neon指令没有精简,即CPU执行周期是一样的。armv8 neon和armv7 neon有哪些不同呢?1、armv8a have scalar NEON operations;2、armv8a NEON shares status flag with CPU;3、armv8a has wider registers and new instructions;4、it's possible to use chain of one-cycle MACs with fast path;上面的4点来自stackoverflow的讨论以上是个人的理解,欢迎讨论!
  • [技术干货] 【趁热打“帖”】Keil5简介、下载、安装及破解教程
                   这个帖子我已经写第二遍了,现在都没有写的欲望了,原因是这样的,我在写这篇帖子的时候,写完了准备上传附件,发现不管上传什么附件都提示类型错误,然后我想反正会自动保存到草稿箱(之前有退出过,而且草稿箱里的内容都完好),就刷新一下,然后内容全部没了。然后就提示我华为云账号没登陆,这个设定真的是。。。       不知道你们有没有碰到过,平时在用着华为云的产品,突然就又要重新登陆华为云账号,这可能是华为为了安全性设置的,一段时间不用就会自动退出账号。有时候离开或者转去微信谈工作,很有可能长时间不操作。希望官方能够改进一下。或者给个设置选项,让我们自己选择是否自动退出账号。我相信大部分人工作都是在自己的或公司的电脑上。(其实是有设置选项的,只是当时没找到而已)以下正文1、keil简介Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。--来自百度百科2、软件下载Keil开发环境可以在官网下载:https://www.keil.com/download/product/官网下载需要填写个人信息,非常麻烦,因为附件最多放20M的资料,所以我把 keil 5.28软件安装包、Pack包、常用驱动等放在了百度网盘上,需要的小伙伴可自行下载  链接:https://pan.baidu.com/s/1ZLp4TqbyZiWKgBOO-0zpGg 提取码:re3t(我不太喜欢设回复可见,你们拿了资源能在底下留个言么?感谢也好,吐槽也好,扣1也好,不要做伸手党,最好还能关注一下我哈,谢谢大家)3、软件安装之前我在这个步骤写了一大堆的,现在就放个我之前从导师那拿来的教程吧,这教程不知道是我老师写的还是来自于哪里。安装教程网上一大堆,虽然我之前写的教程丢了,但步骤都差不多。详情看附件:keil5软件安装与工程建立说明文档如果没有购买keil软件也是可以使用的,但是代码的编译量是有限制的。教程里面也有破解教程,但仅供学习交流使用,请24小时内删除,还请大家多多支持正版。
  • [技术干货] 华为IoT Studio产品介绍
    作为一个开发者,每天都离不开IDE的帮助。而一个好用的集成开发环境,能够大大的提高开发效率。今天就要给大家推荐一个简单易用的物联网端侧IDE——华为IoT Studio。1       什么是IoT Studio华为IoT Studio是支持LiteOS嵌入式系统软件开发的工具,支持C、C++、汇编等多种开发语言,为您提供开发、构建、调试的一站式全流程开发体验。2       产品亮点功能丰富的SDK示例工程•        IoT Studio提供了丰富的SDK示例工程,用户可基于示例工程快速创建可运行的工程原型。•        集成10分钟快速上云工程,用户可以基于智慧路灯案例体验10分钟快速上云。•        支持ARM Cortex-M、Cortex-A、RISC-V等多种内核芯片。•        兼容多种硬件开发板平台。 基于云端模型构建IoT Studio可根据云端设备模型的Profile文件自动生成C语言代码框架,确保程序能够正常编译调试,提升上云对接效率。支持LWM2M/CoAP等协议。 SDK图形化配置•        图形化配置SDK模块功能•        自动识别并管理模块间依赖关系•        模块配置后一键编译运行 3       产品优势3.1 简单易用IoT Studio支持一键安装,安装步骤简单。安装包小,软件占用资源少,配置也十分简单。支持C&C++、汇编、HTML以及JavaScript等等各种语言,用户能够快速上手操作。3.2 高效的代码调试功能断点控制•        支持普通断点和条件断点•        C文件和.s汇编文件均可添加断点•        兼容软件断点反汇编调试•        C源码和反汇编自动高亮联动•        支持反汇编断点•        可针对反汇编文件单步、跳入、跳出 3.3 更加智能的编码辅助•        智能提示/自动补齐 符号智能联想,按符号类型快速、准确联想,补齐语法关键字和语法结构•        符号定义引用跳转以及符号列表查看•        函数调用树查看 以图形的方式展示•        强大的搜索功能 帮助开发者快速找到所需要的文件、字符串、函数等•        自动排版/格式对齐 使代码编辑界面干净整洁,目录结构一目了然 4       产品快速定位问题的能力通信模组检测工具IoT Studio在与OC云端连通使用时,用户使用通信模组检测工具可以快速定位模组与云端连通性问题,自动化检测NB-IoT模组硬件与云端通信状态,准确定位问题发生阶段并提供解决建议。提高开发效率。 Watchpoint监视点•        支持添加读、写变量监视•        支持对内存地址读写监视•        监视点触发时自动暂停在对应代码行 查看内存和变量•        查看实时的内存地址数据•        支持导出内存数据(文本和二进制格式)•        支持添加变量和表达式监视•        支持调试过程中修改内存和变量值 系统异常自动捕获•        OS异常时自动捕获并展示异常堆栈•        帮助您快速定位问题所在的代码行 好了,看完IoT Studio强大的功能介绍,您是否心动了呢?赶紧戳如下链接下载安装体验吧https://developer.obs.cn-north-4.myhuaweicloud.com/idea/IoT-Studio.zip
  • [C/C++] GCC编译过程简介
    gcc 语言编译全过程:预处理->编译->汇编->链接一、GCC快速入门Gcc指令的一般格式为:Gcc [选项] 要编译的文件 [选项] [目标文件]其中,目标文件可缺省,Gcc默认生成可执行的文件名为:a.out我们来看一下经典入门程序"Hello World!"# vi hello.c#include <stdlib.h>#include <stdio.h>void main(void){printf("hello world!\r\n");}用gcc编译成执行程序。#gcc hello.c该命令将hello.c直接生成最终二进制可执行程序a.out这条命令隐含执行了(1)预处理、(2)汇编、(3)编译并(4)链接形成最终的二进制可执行程序。这里未指定输出文件,默认输出为a.out。如何要指定最终二进制可执行程序名,那么用-o选项来指定名称。比如需要生成执行程序hello.exe那么#gcc hello.c -o hello.exe二、GCC的命令剖析--四步走从上面我们知道GCC编译源代码生成最终可执行的二进制程序,GCC后台隐含执行了四个阶段步骤。GCC编译C源码有四个步骤:预处理-----> 编译 ----> 汇编 ----> 链接现在我们就用GCC的命令选项来逐个剖析GCC过程。1)预处理(Pre-processing)在该阶段,编译器将C源代码中的包含的头文件如stdio.h编译进来,用户可以使用gcc的选项”-E”进行查看。用法:#gcc -E hello.c -o hello.i 作用:将hello.c预处理输出hello.i文件。[root]# gcc -E hello.c -o hello.i[root]# lshello.c  hello.i[root]# vi hello.i# 1 "hello.c"# 1 "<built-in>"# 1 "<command line>"# 1 "hello.c"# 1 "/usr/include/stdlib.h" 1 3# 25 "/usr/include/stdlib.h" 3# 1 "/usr/include/features.h" 1 3# 291 "/usr/include/features.h" 3# 1 "/usr/include/sys/cdefs.h" 1 3# 292 "/usr/include/features.h" 2 3# 314 "/usr/include/features.h" 3# 1 "/usr/include/gnu/stubs.h" 1 3# 315 "/usr/include/features.h" 2 3# 26 "/usr/include/stdlib.h" 2 3# 3 "hello.c" 2void main(void){printf("hello world!\r\n");}2)编译阶段(Compiling)第二步进行的是编译阶段,在这个阶段中,Gcc首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,Gcc把代码翻译成汇编语言。用户可以使用”-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。选项 -S用法:[root]# gcc –S hello.i –o hello.s 作用:将预处理输出文件hello.i汇编成hello.s文件。[root@richard hello-gcc]# lshello.c  hello.i  hello.s如下为hello.s汇编代码[root@richard hello-gcc]# vi hello.s.file   "hello.c".section    .rodata.LC0:.string "hello world!\r\n".text.globl main.type   main,@functionmain:pushl   %ebpmovl    %esp, %ebpsubl    $8, %espandl    $-16, %espmovl    $0, %eaxsubl    %eax, %espsubl    $12, %esppushl   $.LC0call    printfaddl    $16, %espmovl    $0, %eaxleaveret.Lfe1:.size   main,.Lfe1-main.ident  "GCC: (GNU) 3.2.2 20030222 (Red Hat Linux 3.2.2-5)"3)汇编阶段(Assembling)汇编阶段是把编译阶段生成的”.s”文件转成二进制目标代码.选项 -c用法:[root]# gcc –c hello.s –o hello.o 作用:将汇编输出文件test.s编译输出test.o文件。[root]# gcc -c hello.s -o hello.o[root]# lshello.c  hello.i  hello.o  hello.s4)链接阶段(Link)在成功编译之后,就进入了链接阶段。无选项链接用法:[root]# gcc hello.o –o hello.exe 作用:将编译输出文件hello.o链接成最终可执行文件hello.exe。[root]# lshello.c  hello.exe  hello.i  hello.o  hello.s运行该可执行文件,出现正确的结果如下。[root@localhost Gcc]# ./helloHello World!在这里涉及到一个重要的概念:函数库。读者可以重新查看这个小程序,在这个程序中并没有定义”printf”的函数实现,且在预编译中包含进的”stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实现”printf”函数的呢?最后的答案是:系统把这些函数实现都被做到名为libc.so.6的库文件中去了,在没有特别指定时,gcc会到系统默认的搜索路径”/usr/lib”下进行查找,也就是链接到libc.so.6库函数中去,这样就能实现函数”printf” 了,而这也就是链接的作用。你可以用ldd命令查看动态库加载情况:[root]# ldd hello.exelibc.so.6 => /lib/tls/libc.so.6 (0x42000000)/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)函数库一般分为静态库和动态库两种。静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为”.a”。动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为”.so”,如前面所述的libc.so.6就是动态库。gcc在编译时默认使用动态库。 
  • 这九项传统编程语言的招聘岗位需求仍然坚挺
    市场研究机构Gartner称,随着婴儿潮技术人员的纷纷退休,技能缺口越来越大,许多企业面临新的挑战。企业需要更新旧技术或者招聘技能在逐渐消失的人才,这导致市场对传统技能有新的需求。更新旧技术可能耗费资源;随着经验更丰富的员工离开劳动力队伍,许多公司可能发现自己缺乏现在被认为过时的技能。 美国《计算机世界》杂志的一项调查发现,虽然65%的企业没有在寻求传统技能,但35%的企业仍在物色拥有传统编程技能的员工,以支持重要的传统系统。虽然你可能不想特地去学这九项技能,但如果已经拥有这方面的经验,可能会让你成为适合某个岗位的独特人选。 1.DB2 DB2起源于上世纪70年代的IBM,IBM最终在1983年发布了DB2(IBM数据库2)。DB2是针对特定的平台,面向IBM的操作系统。但在90年代,IBM使用通用代码开放了DB2。今天,DB2可以在多个平台上运行,包括Linux、Unix和Windows,帮助公司企业管理本地存储和云存储。 它是比较受企业欢迎的传统编程语言之一,13%的企业称自己仍支持DB2平台,招聘拥有DB2技能的人才。数据库管理员、软件工程师、程序员和软件开发员是最可能拥有DB2经验的群体。 2.C C是知名度最高的编程语言之一。它是一种通用的命令式计算机编程语言,历史可追溯到1969年。19**,美国国家标准学会和国际标准化组织使它成为了标准。C最初被设计为一种跨平台运行的直接、低级的编程语言,目前仍然是一种灵活且广泛使用的编程语言。 它嵌入到众多软硬件中:从微控制器到超级计算机,不一而足。它孕育出了几种语言,包括C++、Java、JavaScript、C#、Perl、Python和Swift等等。软件工程师、电气工程师、开发员和程序员是最有可能拥有C技能的群体;10%的企业表示仍然需要支持C平台,仍招聘拥有C技能的人才。 3.COBOL Cobol代表“面向商业的通用语言”,这是一种专为企业设计的计算机编程语言。Cobol创建于1959年,被编入到众多传统系统中。虽然它正慢慢被更新颖的现代编程语言所取代,但企业界仍需要维护传统系统。它最初基于格雷丝•霍珀(Grace Hopper)完成的编程语言工作,格雷丝被业界尊称为“Cobol之母”。 Cobol最初是作为一种可移植的编程语言开发的,以便美国国防部处理数据。国防部要求计算机制造商提供这种语言,这帮助该语言这些年来巩固了其地位。如今,它在金融行业、政府部门和企业行政管理系统中最常见。Cobol技能在程序员和开发员中最为常见,9%的企业仍表示自己需要Cobol。 4.汇编语言 汇编语言(有时称为汇编程序语言)是一种通常针对某种软硬件的语言。作为一种低级编程语言,它是最基本的编程语言之一,无法跨设备移植。当高级语言行不通或者速度是个关键因素时,通常使用汇编语言。 调查发现,8%的企业仍然需要支持汇编,所以你在求职过程中,仍可以强调拥有这项传统技能。汇编语言是最早使用文本的编程语言之一,所以将它列在简历上还能表明:除了现代语言外,你还掌握基础语言。 5.Perl Perl是一类开源通用编程语言,类似于C语言,但运行起来通常快于像C和C++这些结构化语言。它于1987年开发出来,但最新版本:Perl 5在2017年5月才发布。此外还有Perl 6,尽管它属于Perl家族,却与Perl 5独立运营。 就传统编程语言而言,Perl仍在市场占有一席之地。报告发现,5%的企业仍然支持和需要这项技能。你可能找不到需要Perl的一大堆工作,但它让你可以在任何寻求这项传统技能的公司找到立足之地。软件工程师、设计验证工程师、软件开发员、系统管理员和程序员是最有可能在简历上列有Perl技能的群体。 6.Delphi和Object Pascal Delphi与Object Pascal密切相关:Delphi使用基于Pascal的编程语言。Object Pascal是一种易于使用的高级编程语言,而Pascal旨在成为一种通用的低级编程语言。Delphi于上世纪90年代开发出来,1995年发布,最初面向Windows 3.1,此后孕育出了多个版本、迭代和单独的语言。 只有3%的调查对象表示仍然支持和需要Delphi和Object Pascal技能。你会发现Delphi技能在软件开发员、工程师和程序员当中最常见。 7.Fortran语言 Fortran代表公式翻译,专为科学算法而设计,最常被工程师和数学家用于航空航天、机械和软件工程等领域。Fortran是本文中最古老的编程语言,上世纪50年代由IBM开发,几十年来一直用于天气预报、计算物理及其他高性能计算任务的主要编程语言。 只有3%的调查对象表示仍然支持和需要Fortran技能,但随着经验更丰富的IT员工换工作或退休,这种情况可能会改变。你可能仍应该在简历或LinkedIn简介上列入这项技能,说不定一些企业在物色拥有特定传统技能的求职者。软件工程师、航空航天工程师和机械工程师是最有可能在简历上列有Fortran技能的求职者。 8.REXX 扩充重结构化执行程序(REXX)由IBM的员工在1979年至1982年开发,这是一种结构化的高级解释性编程语言,旨在易学易读。它最常用作一种脚本和宏语言,处理数据和文本,或生成报告。该语言旨在简单易学,即使非程序员也能学会和使用这种语言,因此成为企业界的一种热门选择。 它不是最吃香的传统技能,只有3%的调查对象表示仍然支持和需要这项技能。你会发现这项技能常常与计算机程序员、软件工程师、应用系统分析员和大型机程序员联系在一起。 9.Pascal Pascal于上世纪60年代末开发出来,这种命令式、过程式编程语言最初是为教授编程语言设计的。如今,它基本上已C、C++和Java所取代,但仍充当编程入门语言。Pascal用于结构化编程(需要非常注重细节),已成为教新生的一种流行语言,不过在企业界不那么流行。 只有2%的企业表示,它们仍然支持和需要Pascal;虽然并不多见,但也让拥有Pascal技能的人颇有价值。软件工程师和软件开发员是最可能拥有Pascal技能的求职者。 标题:9 legacy programming skills still in demand,作者:Sarah K. White
总条数:50 到第
上滑加载中