做网站广告怎么做/互联网广告推广公司

做网站广告怎么做,互联网广告推广公司,武汉网站程序,深圳龙岗万达广场在嵌入式系统开发中,优化 CPU 工作效率对于提升系统性能、降低功耗、提高实时性至关重要。Keil 作为主流的嵌入式开发工具,提供了多种优化策略,包括 关键字使用、内存管理、字节对齐、算法优化 等。本文将从多个方面介绍如何在 Keil 工程中优…

在嵌入式系统开发中,优化 CPU 工作效率对于提升系统性能、降低功耗、提高实时性至关重要。Keil 作为主流的嵌入式开发工具,提供了多种优化策略,包括 关键字使用、内存管理、字节对齐、算法优化 等。本文将从多个方面介绍如何在 Keil 工程中优化 CPU 运行效率。

一、关键字优化

1. 使用 static 关键字

  • 减少栈操作:static 变量存放在 静态存储区,避免函数调用时频繁创建和销毁局部变量,减少 CPU 访问栈的开销。

  • 优化函数调用:static 限定函数作用域,编译器可以优化调用方式,如内联优化或删除未使用的函数。

示例:

static int counter = 0;  // 避免频繁创建局部变量,提升性能

2. 使用 inline 关键字

  • 减少函数调用开销:对于小的、频繁调用的函数,使用 inline 让编译器展开函数,减少栈操作,提高执行效率。

示例:

inline int add(int a, int b) {return a + b;  // 直接展开,提高性能
}

3. 使用 const 关键字

  • 优化编译器优化空间:const 变量不会被修改,编译器可将其优化为常量表达式,减少 RAM 访问,提高指令执行效率。

  • 避免全局变量占用 RAM:const 变量通常存储在 Flash(只读存储区),减少 RAM 使用,提高运行效率。

示例:

const uint32_t baud_rate = 115200;  // 存放在 Flash 中,减少 RAM 占用

4. 使用 volatile 关键字

  • 防止编译器优化:适用于 寄存器变量、外设寄存器、共享变量,避免编译器优化导致的错误,确保每次都从实际地址读取值。

  • 适用于中断变量、硬件寄存器访问等场景。

示例:

volatile uint8_t flag = 0;  // 确保每次读取的值都是最新的

二、字节对齐(结构体优化)

嵌入式系统中,结构体成员若未对齐,CPU 可能需要额外的 总线周期 读取数据,从而降低效率。

1. 使用 attribute((aligned(n))) 或 #pragma pack(n)

#pragma pack(4)  // 4字节对齐
typedef struct {uint32_t id;uint16_t value;uint8_t flag;
} __attribute__((aligned(4))) my_struct_t;
#pragma pack()
  • 尽量让结构体成员按 32-bit (4字节) 对齐,提高访问效率。

  • 结构体字段按照 uint32_t -> uint16_t -> uint8_t 顺序排列,避免填充字节,减少存储空间浪费。

三、内存管理优化

1. 减少堆(heap)使用

  • malloc/free 开销大,容易导致碎片化,应避免在 实时任务 或 中断 中使用。

  • 优先使用静态内存 (static 变量) 代替堆内存分配,提高执行效率。

2. 使用 DMA(直接存储访问)

  • 减少 CPU 负担,使用 DMA 传输数据(如 UART、SPI、I2C),CPU 仅需触发 DMA 传输,不用参与整个数据搬运过程。

  • 适用于大数据量传输场景,如传感器数据读取、LCD 屏幕刷新等。

四、指令优化(算法层面)

1. 使用位运算代替乘除法

>> 代替除法,<< 代替乘法,减少 CPU 指令执行时间。

int x = a * 8;   // 慢
int y = a << 3;  // 快

2. 使用查表法

预计算常用值 存入查找表(LUT),避免实时计算,如 sin() 和 cos()。

const uint8_t sine_table[256] = { /* 预计算数据 */ };
uint8_t value = sine_table[angle];  // 直接查表,提高效率

3. 使用循环展开

for (int i = 0; i < 4; i++) {sum += arr[i];  // 常规循环
}// 进行循环展开
sum = arr[0] + arr[1] + arr[2] + arr[3];  // 提高 CPU 指令并行度

4. 减少浮点运算

  • 浮点运算 (float) 比整数运算 (int) 慢,尽量使用整数计算。

  • 使用 fixed-point 计算替代浮点计算(如 Q31、Q15 格式)。

五、其他优化措施

1. 使用 O3 级别优化

  • Keil 提供 优化选项 O0 ~ O3,O3 优化级别最高,可自动优化代码执行效率,但可能影响调试。

  • O2 适用于大多数场景,O3 适用于对性能要求极高的任务。

2. 优化中断

  • 减少 ISR 执行时间,避免在中断中执行复杂运算。

  • 使用 __attribute__((interrupt)) 声明中断函数,优化编译器生成的中断代码。

3. 使用 CMSIS 和 ARM DSP 库

  • ARM 提供的 CMSIS-DSP 和 CMSIS-NN 库 对 Cortex-M 内核进行了优化,加速数学运算。

  • 例如,使用 arm_math.h 中的 arm_sqrt_f32() 计算平方根,比 sqrt() 更快。


总结

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/899597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java开发者指南:深入理解HotStuff新型共识算法

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、全栈领域优质创作者、高级开发工程师、高级信息系统项目管理师、系统架构师&#xff0c;数学与应用数学专业&#xff0c;10年以上多种混合语言开发经验&#xff0c;从事DICOM医学影像开发领域多年&#xff0c;熟悉DICOM协议及…

opencv图像处理之指纹验证

一、简介 在当今数字化时代&#xff0c;生物识别技术作为一种安全、便捷的身份验证方式&#xff0c;正广泛应用于各个领域。指纹识别作为生物识别技术中的佼佼者&#xff0c;因其独特性和稳定性&#xff0c;成为了众多应用场景的首选。今天&#xff0c;我们就来深入探讨如何利…

【STM32】知识点介绍一:硬件知识

文章目录 一、电源引脚简介二、电平信号三、电路分析 一、电源引脚简介 VCC、GND、VDD和VSS是电子电路中常见的术语&#xff0c;代表着不同的电源引脚或电压。 VCC&#xff08;Voltage at the Common Collector&#xff09;&#xff1a;VCC是指集电极&#xff08;Collector&am…

什么是 SEO(搜索引擎优化)?

您有网站吗&#xff0c;或者您正在考虑创建一个网站&#xff1f;您想吸引更多人加入您的业务吗&#xff1f;如果答案是肯定的&#xff0c;那么毫无疑问&#xff1a;SEO 应该是您营销工作的一部分。这是建立品牌和吸引用户访问您的网站的好方法。但它实际上意味着什么呢&#xf…

鸿蒙HarmonyOS NEXT设备升级应用数据迁移流程

数据迁移是什么 什么是数据迁移&#xff0c;对用户来讲就是本地数据的迁移&#xff0c;终端设备从HarmonyOS 3.1 Release API 9及之前版本&#xff08;单框架&#xff09;迁移到HarmonyOS NEXT&#xff08;双框架&#xff09;后保证本地数据不丢失。例如&#xff0c;我在某APP…

【现代深度学习技术】现代卷积神经网络04:含并行连接的网络(GoogLeNet)

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…

【ESP32】ESP32与MQTT通信:实现传感器数据监测与设备控制

ESP32与MQTT通信 1 项目概览2 硬件组成3 MQTT协议解析MQTT协议简介MQTT核心概念本项目中的MQTT应用 4 MQTT Broker选择EMQX Broker其他常用MQTT Broker 5 代码解析初始化与配置MQTT消息处理发布传感器数据 6 MQTT话题TOPIC设计7 EMQX的优势在IoT项目中的体现8 MQTT通信流程9 应…

每天一篇目标检测文献(六)——Part One

今天看的是《Object Detection with Deep Learning: A Review》 目录 一、摘要 1.1 原文 1.2 翻译 二、介绍 2.1 信息区域选择 2.2 特征提取 2.3 分类 三、深度学习的简要回顾 3.1 历史、诞生、衰落和繁荣 3.2 CNN架构和优势 一、摘要 1.1 原文 Due to object dete…

Arthas线上问题诊断器

Arthas是Alibaba开源的java诊断工具 解决问题 这个类从哪个jar 包加载的&#xff1f;为什么会报各种相关的Exception&#xff1f; 遇到问题无法在线上debug&#xff0c;不能直通过加载日志再重新发布 有什么办法可以监控到JVM的实时运行状态&#xff1f; …

[Lc5_dfs+floodfill] 简介 | 图像渲染 | 岛屿数量

目录 0.floodfill算法简介 1.图像渲染 题解 2.岛屿数量 题解 之前我们在 bfs 中有介绍过[Lc15_bfsfloodfill] 图像渲染 | 岛屿数量 | 岛屿的最大面积 | 被围绕的区域&#xff0c;现在我们来看看 dfs 又是如何解决的呢 0.floodfill算法简介 floodfill算法又叫洪水灌溉或者…

JVM类加载器详解

文章目录 1.类与类加载器2.类加载器加载规则3.JVM 中内置的三个重要类加载器为什么 获取到 ClassLoader 为null就是 BootstrapClassLoader 加载的呢&#xff1f; 4.自定义类加载器什么时候需要自定义类加载器代码示例 5.双亲委派模式类与类加载器双亲委派模型双亲委派模型的执行…

【SPP】RFCOMM 层在SPP中互操作性要求深度解析

蓝牙串口协议&#xff08;SPP&#xff09;通过 RFCOMM 协议实现 RS232 串口仿真&#xff0c;其互操作性是设备互联的关键。本文基于蓝牙核心规范&#xff0c;深度解析 RFCOMM 层的能力矩阵、信号处理、流控机制及实战开发&#xff0c;结合状态机、流程图和代码示例&#xff0c;…

Gossip协议:分布式系统中的“八卦”传播艺术

目录 一、 什么是Gossip协议&#xff1f;二、 Gossip协议的应用 &#x1f4a1;三、 Gossip协议消息传播模式详解 &#x1f4da;四、 Gossip协议的优缺点五、 总结&#xff1a; &#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&#xff0c;如果喜欢博主的讲解方式&…

【C++初阶】----模板初阶

1.泛型函数 泛型编程&#xff1a;编写与类型无关的通用代码&#xff0c;是代码复用的一种手段。模板是泛型编程的基础。 2.函数模板 2.1函数模板的概念 函数模板代表了一个函数家族&#xff0c;该函数模板与类型无关&#xff0c;在使用时被参数化&#xff0c;根据实参类型…

git-- github的使用--账户和本地连接

以下指令在git 执行bash 流程&#xff1a;先看有没有密钥&#xff1b; 没有的话&#xff0c;在电脑生成密钥对&#xff0c;公钥复制到github&#xff1b; 要想使用https&#xff0c;配置令牌&#xff0c;注意令牌有期限问题&#xff0c;连接不了有可能是期限问题 一个电脑对…

Angular由一个bug说起之十五:自定义基于Overlay的Tooltip

背景 工具提示&#xff08;tooltip&#xff09;是一个常见的 UI 组件&#xff0c;用于在用户与页面元素交互时提供额外的信息。由于angular/material/tooltip的matTooltip只能显示纯文本&#xff0c;所以我们可以通过自定义Directive来实现一个灵活且功能丰富的tooltip Overlay…

搭建QNX Software Center的Docker环境

背景 本人使用 Ubuntu Server 22.04 服务器&#xff0c;所以没有图形界面&#xff0c;而 QNX Software Center 需要图形界面。为了保证服务器环境的整理&#xff0c;计划使用Docker部署QNX Software Center 一瓶安装图形界面。本方既是实现方案的记录。 资源 Dockerfile&…

C#/.NET/.NET Core技术前沿周刊 | 第 31 期(2025年3.17-3.23)

前言 C#/.NET/.NET Core技术前沿周刊&#xff0c;你的每周技术指南针&#xff01;记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿&#xff0c;助力技术成长与视野拓宽。 欢迎投稿、推荐…

【STM32】WDG看门狗(学习笔记)

学习来源----->江协科技STM32 WDG简介 WDG&#xff08;Watchdog&#xff09;看门狗看门狗可以监控程序的运行状态&#xff0c;当程序因为设计漏洞、硬件故障、电磁干扰等原因&#xff0c;出现卡死或跑飞现象时&#xff0c;看门狗能及时复位程序&#xff0c;避免程序陷入长…

2023第十四届蓝桥杯大赛软件赛国赛C/C++ 大学 B 组(真题题解)(C++/Java题解)

本来想刷省赛题呢&#xff0c;结果一不小心刷成国赛了 真是个小迷糊〒▽〒 但&#xff0c;又如何( •̀ ω •́ )✧ 记录刷题的过程、感悟、题解。 希望能帮到&#xff0c;那些与我一同前行的&#xff0c;来自远方的朋友&#x1f609; 大纲&#xff1a; 一、子2023-&#xff…