DSP编程时 c_int00是什么内容


写在前面的话:
关于DSP开发中更多的细节与小技巧在公众号【iFTrue未来已来】中有系列文章的多期发布。
查看方式:
1) 微信扫描下方二维码,关注公众号【iFTrue未来已来

2) 后台回复关键字 “【 Bootloader 】” 即可获取所有Bootloader相关文章的目录
3) 点击公众号菜单栏可以浏览DSP相关文章


c_int00(也作_c_int00)是C/C++程序初始化代码的入口地址,完成建立C程序的运行环境。它是运行支持库(如rts2800_ml.lib)中的一个重要函数。

DSP上电时,由Bootloader负责引导至c_ini00。

1 c_int00完成的工作

1) 定义系统栈.stack,并初始化栈指针,配置相关寄存器
2) 初始化全局变量(.cinit)
3) 若使用C++,还会完成全局对象构造(.pinit)
4) 调用main函数运行C程序
5) 当main函数return时,调用exit函数

用户可以对c_int00函数进行修改,但修改后的函数必须完成以上任务。

2 系统初始化

在TI官网找到了rts2800_ml.lib对应的boot.asm源文件,其中核心内容为c_int00函数,其中关于“定义系统栈.stack,并初始化栈指针,配置相关寄存器”等系统初始化的部分如下

该部分完成了C程序运行的基础条件设置,不包括对全局变量的初始化。此时如果进入main函数执行应用程序的话,需要注意所有全局变量将不再遵守C语言定义时初值的标准规定,也就是说,除非在程序中对全局变量重新赋值,否则全局变量的初值是随机的。需要说明的是除了全局变量初值随机,程序是可以完整准确运行的。这可以应用到用户自定义c_int00的场合,在程序开始执行后重新对所有全局赋值,从而减少该部分的工作量,例如二次Bootloader,当二次Bootloader执行完毕进入main之前重新调用c_int00即可。

(说明:二次Bootloader需要自定义c_int00的原因是希望C环境初始化完毕后不必进入main函数,而是进入二次Bootloader的主程序)

3 全局变量初始化

全局变量初始化(.cinit)分为两种初始化方式:运行时自动初始化、加载时初始化。
1) 运行时自动初始化
.cinit段与其他段一并从目标文件加载入存储器,链接器定义了一个名为CINIT的符号,用来标识初始化表的首地址。程序开始运行时,C启动程序将表中的数据复制给.bss段中特定的变量,这便允许将初始化数据放入ROM/FLASH中,在每次程序开始时将其复制到RAM中,从而达到ROM/FLASH保存初值、RAM中运行变量的目的。
.cinit段初始化表的格式如下图所示

>(图源:TMS320C28x Optimizing C/C++ Compiler v18.1.0.LTS User's Guide)

2) 加载时初始化:
连接器将.cinit段头中的STYP_COPY置位为1,并告知加载器不要把.cinit中的表加载入存储器并将符号CINIT赋值-1,告诉启动器初始化表不在储存器中,因此启动时不执行初始化。而由加载器直接把目标文件的.cinit复制到RAM的.bss中。

更详细的内容参考《TMS320C28x Optimizing C/C++ Compiler v18.1.0.LTS User’s Guide》7.9.3节

4 全局对象构造

全局对象构造(.pinit)用于C++变成环境,与全局变量初始化过程类似,不详细表述。

5 main函数与exit函数的调用

当完成以上过程之后,整个C程序运行环境就完整地构建好了,便可以进入main函数调用应用程序了

当main函数返回时调用的exit函数,但我们通常会在main函数中放置无限循环来保证main函数不被跳出。若main函数一旦跳出,将调用exit函数,保证程序能够安全退出并重新进入main函数。

阅读过程有疑问
微信扫描二维码
发私信交流
iFTrue

更多关于Bootloader的内容,可以微信扫下面二维码**【iFtrue未来已来】**交流

> 感谢阅读

DSP编程时 c_int00是什么内容相关推荐

  1. C语言在嵌入式系统编程时的注意事项

    C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言. 尽管C语言提供了许多低级处理的功 ...

  2. c语言程序框一点数字就消失,你用C语言编程时,会犯下面的错误吗?

    原标题:你用C语言编程时,会犯下面的错误吗? C编译的程序对语法检查并不像其它高级语言那么严格,这就给编程人员留下"灵活的余地",但还是由于这个灵活给程序的调试带来了许多不便,尤其 ...

  3. python语言的两种注释方法_python编程时添加中文注释的方法

    python编程时添加中文注释的方法 发布时间:2020-08-24 17:09:52 来源:亿速云 阅读:77 作者:小新 这篇文章主要介绍python编程时添加中文注释的方法,文中介绍的非常详细, ...

  4. 编程程序的名称要记住吗_学习编程时要记住的5件事

    编程程序的名称要记住吗 by Kurt 由库尔特 学习编程时要记住的5件事 (5 Things to Remember When You're Learning to Program) Learnin ...

  5. android 提供的方法,Android编程之创建自己的内容提供器实现方法

    本文实例讲述了Android编程之创建自己的内容提供器实现方法.分享给大家供大家参考,具体如下: 我们学习了如何在自己的程序中访问其他应用程序的数据.总体来说思 路还是非常简单的,只需要获取到该应用程 ...

  6. 编程时请选择正确的输入法,严格区分中英文

    计算机起源于美国,C语言.C++.Java.JavaScript 等很多流行的编程语言都是美国人发明的,所以在编写代码的时候必须使用英文半角输入法,尤其是标点符号,初学者一定要引起注意. 例如,上节我 ...

  7. 编程时程序无错却崩溃_程序员极度崩溃的 60 个瞬间,看到哪一个你哭了?

    传智点击蓝字关注我们↑↑↑↑ 时光如流,岁月不居,不知不觉中,我们迎来了充满希望的2019年.回首过去,收获与遗憾并存,总免不了有太多的感动,特别是整日加班工作的程序员们,相信他们的工作中一定有很多不 ...

  8. 纯新手DSP编程--5.18--调试(续)

    装载程序后,默认的配置,会自动打开一个反汇编窗口,你可以设置IDE,直接跳转到main,而不用打开反汇编窗口. 在反汇编窗口中,黄色小箭头指向c_init100,这不是用户代码的一部分,而是C语言引导 ...

  9. 纯新手DSP编程--5.15--CCS简述

    从昨天开始,自己从VC开发转向的DSP编程,工作需要,呵呵,知识还是自己的,认真学习... CCS最早是由GO DSP公司为TI公司的C6000系列开放的,后来TI收购了GO DSP,并将其扩展到它的 ...

  10. 学习编程时真正值得一读的一篇文章 与 书籍

    Teach Yourself Programming in Ten Years 彼得·诺维格(Peter Norvig)是美国计算机科学家.他是Google,LLC的研究总监,并曾担任Google搜索 ...

最新文章

  1. page_index--template.html(0)源码
  2. vb整合多个excel表格到一张_[Excel]同一工作簿中多个工作表保存成独立的表格
  3. 锦江公司 nginx 转发
  4. odbc mysql导出access_将mysql数据导入access数据库
  5. php vue seo,处理 Vue 单页面 SEO 的另一种思路
  6. 实训作业 4(界面2)
  7. python math库基本函数
  8. 手机平板连接电脑热点是用不了
  9. 设计主导型思维在商业领域的崛起,将对创意职业产生积极的溢出效应
  10. plc通过无线通讯连接服务器,PLC无线通讯
  11. 中元节,会吃的民族带你了解“鬼节”的习俗
  12. 1079: PIPI的存钱罐
  13. DevExpress v18.2版本亮点——Reporting篇(三)
  14. 专注少儿成长,掌门少儿打造多维思维启蒙体验
  15. [telink sig mesh] 周期Publish
  16. soc验证 c语言,一种Soc芯片验证方法与流程
  17. Linux查看CPU、内存、硬盘、操作系统相关详细信息
  18. 005 GO-高级数据类型(结构体和方法)
  19. WebGoat 网安攻击模拟操训
  20. 德云社怒怼信息泄露 300元买600多明星证件号

热门文章

  1. xmake中add_files的使用
  2. linux中etc目录的作用,/etc 目录的作用到底是干什么用的?
  3. 锂电池电量百分比计算_锂电池的电量、电压与放电时间的计算
  4. Jo-SRC: A Contrastive Approach for Combating Noisy Labels
  5. win7设置定时开关机
  6. 1.list倒叙输出
  7. python用smtp发邮件怎么抄送_Python发送邮件并抄送
  8. 微信小程序 —— 自定义picker选择器弹窗内容
  9. 电脑连接wifi浏览器打不开网页
  10. 软工课设-基于JAVA的​大学年级事务督办系统项目和源码​