草庐IT

【ARM 嵌入式 编译系列 4.2 -- GCC 链接规范 extern “C“ 介绍】

文章目录extern"C"介绍extern"C"使用示例1.2.2作用场景上篇文章:ARM嵌入式编译系列4.1–GCC编译属性likely与unlikely学习下篇文章:ARM嵌入式编译系列5–GCC内建函数__builtin介绍extern“C”介绍extern“C”是一种链接规范,它用于告诉C++编译器按照C语言的方式来链接代码。这个关键字主要用于在C++代码中调用C语言的函数库。C++语言对函数进行了名字修饰(NameMangling),也就是说,C++编译器在编译函数的时候会给函数的名字添加一些额外的信息,例如函数的参数类型和数量。这样做的目的是为了支持函数的重载。然而,C语言不支持函

ARM(汇编指令)

.global_start_start: /*movr0,#0x5 movr1,#0x6 blLoop Loop:cmpr0,r1 beqstopsubhir0,r0,r1 subccr1,r1,r0 movpc,lr */ movr0,#0x1 movr1,#0x0 movr2,#0x64 blLoop Loop: cmpr0,r2 bhistop addr1,r1,r0 addr0,r0,#0x01 movpc,lrstop: Bstop .end 

ARM backtrace 实战分析

记录一下armbacktrace分析过程什么是ARMbacktraceARMbacktrace指的是在ARM架构下的程序调试过程中,获取当前函数调用栈帧的信息,以便定位问题所在。调用栈(CallStack)是一种数据结构,用于记录函数调用的顺序和嵌套关系,每次函数调用都会在栈上分配一个栈帧(StackFrame),保存了函数的局部变量、参数和返回地址等信息。backtrace是指获取调用栈的逆序列表,即从当前函数回溯到最开始的函数调用。ARMbacktrace通常用于调试应用程序中的错误,如崩溃、段错误等。通过分析backtrace信息,开发人员可以定位问题发生的位置,从而进行修复。在Linu

mac M1 arm芯片 进行docker rocketMq 本地部署(亲测可用)

由于macarm芯片的问题,导致随便拉取镜像会出现AMD64的警告,如果不想出现则可以gitclone https://github.com/apache/rocketmq-docker.git 拉代码自己编译镜像下面是根据别人已经上传的镜像进行的本地部署操作下面两个镜像都是某位老哥打包的,测试无问题1.拉取rocketMq镜像 该版本为5.0.0dockerpullcandice0630/rocketmq:5.0.0-alpine2.拉取rocketMq控制台镜像dockerpullcandice0630/rocketmq-console-ng:2.03.进行docker-compose编排

linux arm64 安装 ELK

linuxarm64安装ELK前言:本篇文章主要介绍如何在linux环境下安装ELK栈,包括es、kibana和logstash1.安装elasticsearch1.1下载eslinuxaarch64rpm包运行命令rpm-ivhelasticsearch-7.17.4-aarch64.rpm1.2创建es数据和日志目录mkdir/home/elasticsearchmkdir/home/elasticsearch/datamkdir/home/elasticsearch/logs1.3对数据和日志目录授权chownelasticsearch:elasticsearch-R/home/elas

/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28‘ not found__为什么了解内核、Linux系统构建、驱动的相关知识对应用开发有帮助

某项目中,我要给别人封装一个深度学习算法的SDK接口,运行在RK3588平台上,然后客户给我的交叉编译工具链是 然后我用他们给我的交叉编译工具链报下面的错误: aarch64-buildroot-linux-gnu-gcc--version/data/chw/aarch64/bin/ccache:/lib/x86_64-linux-gnu/libc.so.6:version`GLIBC_2.28'notfound(requiredby/data/chw/aarch64/bin/ccache)正常这种时候要升级glibc库,不想升级,然后我发现他们给我的交叉编译工具链带着buildroot,那说

Simulink 自动代码生成电机控制:在某国产ARM0定点MCU上实现自动代码生成无感电机控制

目录前言开发流程定点化的技巧代码生成运行演示总结前言这次尝试了在国产arm0内核的MCU上实现Simulink自动代码生成永磁同步电机无传感控制。机缘巧合之下拿到了一块国产MCU的电机控制板和一个5000RPM的小电机。最后实现了无传感控制,在这里总结下一些经验。芯片的参数如下:开发流程1.首先根据新的电机参数在浮点的模型上进行仿真验证,这里选择使用的观测器是龙伯格观测器新的电机和控制参数调整完后仿真没有问题  2. 不放心可以先在浮点的MCU上跑一把,一般电机参数和实际参数相差不大,仿真没问题,实际运行也没啥问题 3.把浮点模型定点化可以参考以下文章链接Simulink自动代码生成电机控制:

12.4 ARM异常处理

目录ARM异常处理(一)异常概念异常处理机制ARM异常源概念ARM异常源ARM异常模式ARM异常处理(二)ARM异常响应异常向量表异常返回IRQ异常举例​编辑ARM异常处理(三)异常优先级FIQ和IRQARM微架构流水线指令流水线ARM指令流水线PC的作用(取指)多核处理器多核处理器作用资源ARM异常处理(一)异常概念处理器在正常执行程序的过程中可能会遇到一些不正常的事件发生这时处理器就要将当前的程序暂停下来转而去处理这个异常的事件异常事件处理完成之后再返回到被异常打断的点继续执行程序 异常程序也是一段程序,如信号,网卡传输的数据拆包,像游戏中加减声音按键,由于速度很快,所以不被人所感知异常处

在Linux、Ubuntu中跨平台编译ARM(AARCH64)平台的binutils

Binutils是GNU(https://www.gnu.org/)提供的一组二进制工具的集合。通常,在已经安装了Linux操作系统的个人电脑上,系统就已经自带了这个工具集。但在进行嵌入式开发的时候,可能会用到支持ARM64平台的Binutils,这时就需要用到交叉编译。此前,在【1】我们已经介绍过Ubuntu中交叉编译的方法。对于一些规模不是很大的软件(例如gzip和findutils),此前的方法是可行的。但对于Binutils,安装过程中常常会遇到各种各样的问题。本文演示在Ubuntu22.04(系统是X86-64环境)上编译用于支持ARM64平台的Binutils的方法。假设你已经从G

嵌入式Linux:ARM驱动+QT应用+OpenCV人脸识别项目实现

一、前言:    这个项目主要分为两部分,客户端(ARM板端)负责利用OpenCV采集人脸数据,利用TCP将人脸数据发送给服务器,然后服务器根据人脸数据进行人脸识别,将识别后的结果返还给客户端,客户端对人脸数据进行解析,得到正确的人脸数据后,打开门锁。门锁涉及硬件操作,这一部分进行驱动的编写、注册与调用等。项目分为以下几部分内容:1、项目环境搭建    1)OpenCV利用Cmake进行编译并导入QT,保证OpenCV可以在服务器端调用;    2)OpenCV利用Cmake进行交叉编译,移植到ARM端,同时修改相关动态链接库lib,保证OpenCV可以在ARM端进行调用,完成环境图像信息采集