TMS320F280049C 学习笔记32 TMS320C28x Optimizing C/C++ Compiler 阅读随笔

本文主要是介绍TMS320F280049C 学习笔记32 TMS320C28x Optimizing C/C++ Compiler 阅读随笔,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 1 Introduction to the Software Development Tools
  • 2 Using the C/C++ Compiler
    • 2.3 Changing the Compiler's Behavior with Options
    • 2.5 Controlling the Preprocessor
    • 2.7 Understanding Diagnostic Messages
    • 2.11 Using Inline Function Expansion
    • 2.15 Live Firmware Update (LFU)
  • 3 Optimizing Your Code
  • 4 Linking C/C++ Code
  • 5 Post-Link Optimizer
  • 6 C/C++ Language Implementation
    • 6.3 Data Types
    • 6.5 Keywords
      • 6.5.1 The const Keyword![在这里插入图片描述](https://img-blog.csdnimg.cn/20210206205203815.png)
      • 6.5.5 The volatile Keyword
    • 6.9 Pragma Directives
    • 6.13 Initializing Static and Global Variables in COFF ABI Mode
      • 6.15.6 Built-In Functions
      • 6.15.7 Using the Byte Peripheral Type Attribute
  • 7 Run-Time Environment
    • 7.6 Using Intrinsics to Access Assembly Language Statements
      • 7.6.1 Floating Point Unit (FPU) Intrinsics
      • 7.6.2 Trigonometric Math Unit (TMU) Intrinsics
      • 7.6.3 Fast Integer Division Intrinsics
    • 7.10 System Initialization
  • 8 Using Run-Time-Support Functions and Building Libraries
    • 8.5 Library-Build Process
  • 9 C++ Name Demangler
  • 10 CLA Compiler
      • 10.1.1 CLA-Specific Options
      • 10.2.1 Variables and Data Types
      • 10.2.2 Pragmas, Keywords, and Intrinsics
  • 参考文献

前言

为了优化代码的执行速度,有必要熟悉编译器的工作方式,趁着假期翻一翻手册[1],200多页应该很快就能过一遍。

1 Introduction to the Software Development Tools

本章介绍了从代码到DSP可执行文件的编译流程。

2 Using the C/C++ Compiler

本章介绍了编译器支持的编译指令,大部分都可以在CCS工程的属性里设置。

2.3 Changing the Compiler’s Behavior with Options

总结一些我常用的命令作为备忘:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.5 Controlling the Preprocessor

在这里插入图片描述

2.7 Understanding Diagnostic Messages

这节描述了如何控制编译器的警告和报错信息。

2.11 Using Inline Function Expansion

对内联函数的应用做了介绍。

2.15 Live Firmware Update (LFU)

讲述了软件在线升级的方法。

3 Optimizing Your Code

详细描述了代码优化器的工作情况。
不想被编译器优化掉的变量可以加修饰符:

volatile // 特征修饰符,作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。

4 Linking C/C++ Code

Linking这个步骤以前没怎么了解过。
各种运行库(run-time-support library)是在这个阶段被连接的。
本章也介绍了 _c_int00 作为程序入口的作用。

5 Post-Link Optimizer

暂时用不到的功能。

6 C/C++ Language Implementation

6.3 Data Types

介绍了DSP支持的数据类型及范围
在这里插入图片描述

6.5 Keywords

总结了关键字。

6.5.1 The const Keyword在这里插入图片描述

6.5.5 The volatile Keyword

这个关键字的使用很关键!简单来说,就是避免自己定义的变量被编译器优化掉,具体参考原文。举个例子:
在这里插入图片描述
在这里插入图片描述

6.9 Pragma Directives

讲述了编译器指令 #pragma 的用法。

6.13 Initializing Static and Global Variables in COFF ABI Mode

讲述了全局变量初始化的要点。
在这里插入图片描述

6.15.6 Built-In Functions

一些编译器和硬件支持的函数。
在这里插入图片描述
在这里插入图片描述

6.15.7 Using the Byte Peripheral Type Attribute

讲述了如何定义位结构体,个人感觉在记录故障字的时候挺有用。

7 Run-Time Environment

表7.1介绍了内存中各个段名的意义,在编辑.cmd文件时可以用到。

7.6 Using Intrinsics to Access Assembly Language Statements

介绍了很多快速转化为汇编语言的内部函数,有些还是挺有用的。
在这里插入图片描述
在这里插入图片描述

7.6.1 Floating Point Unit (FPU) Intrinsics

这里很多的大小值比较很用,估计比自己定义宏要快很多。
在这里插入图片描述

7.6.2 Trigonometric Math Unit (TMU) Intrinsics

其中的硬件浮点数除法很有用。
在这里插入图片描述

7.6.3 Fast Integer Division Intrinsics

介绍了快速整数除法。

7.10 System Initialization

介绍了启动配置相关问题,暂时没看懂。

8 Using Run-Time-Support Functions and Building Libraries

8.5 Library-Build Process

讲述了如何编译自定义的run-time-support库。

9 C++ Name Demangler

暂时用不到的功能。

10 CLA Compiler

描述了编译CLA的C代码时编译器的工作方式,较为重要的一章。

10.1.1 CLA-Specific Options

介绍了在整数大小比较时可能出现的溢出错误及解决方案。

10.2.1 Variables and Data Types

指出当c28和CLA共同调用一个变量时,应在c28的代码中声明该变量。
为了实现c28和CLA的代码共用,最好使用32为int和float,否则变量的数据范围可能会改变,造成意想不到的错误。
在这里插入图片描述

10.2.2 Pragmas, Keywords, and Intrinsics

记录了一些编译器内建函数,同时,一些可以避免整数比较时越界的函数也在这里提供。

参考文献

  1. TMS320C28x Optimizing C/C++ Compiler v20.12.0.STS

这篇关于TMS320F280049C 学习笔记32 TMS320C28x Optimizing C/C++ Compiler 阅读随笔的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/398467

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名