嵌入式编程,等待12.5 us

use*_*288 2 c embedded real-time

我正在使用C2000 F28069实验套件进行编程.我连续5次每12.5微秒切换一次GPIO输出.我决定不想使用中断(尽管我绝对必须这样做).我想在时钟周期方面等待那么多次.

我的时钟运行在80MHz,所以12.5 us应该是1000个时钟周期.当我使用循环时:

for(i=0;i<1000;i++)
Run Code Online (Sandbox Code Playgroud)

我得到的结果太长了(不是12.5 us).我可以使用哪些其他技术?

sleep(n);的东西,我可以在微控制器上使用?如果是这样,我需要下载哪个头文件,在哪里可以找到它?此外,现在我考虑它,sleep(n);需要一个int输入,所以甚至不工作...任何其他的想法?

RBe*_*eig 7

摘要:使用PWM或定时器外设生成输出脉冲.

首先,CPU的时钟速度与实际代码执行速度具有复杂的关系,并且在许多CPU中,在执行的不同阶段中涉及多于一个时钟速率.例如,您参考芯片有几个内部时钟源.此外,每个单独的指令可能需要执行不同数量的时钟,并且一些核可以同时执行部分(或全部)几个指令.

要严格创建一个不需要使用定时中断或其他硬件设备就可以执行12.5μs的循环,需要在汇编语言中仔细手动编码,同时仔细计算每条指令的执行时间.

但你是用C语言编写的,而不是汇编语言.

所以你要问的第一个问题是你的循环实际生成了什么机器代码.第二个问题是你启用了优化器,以及启用了什么级别.

如上所述,一个不错的优化器将确定循环for (i=0; i<1000; i++) ;没有可见的副作用,因此只是一种缓慢的写入方式;,并且可以完全删除.

如果它确实编译了循环,那么可以使用多达5条指令或少至一条或两条指令来天真地编写它.我并不熟悉这种特定的TI CPU架构,因此我不会尝试猜测最佳实现方式.

总而言之,了解CPU架构及其效率对于构建可靠高效的嵌入式系统非常重要.但考虑到该芯片具有内置的外围设备,可为PWM(脉冲宽度调制)输出以及通用硬件定时器/计数器提供硬件支持,您可以更好地学习使用硬件为您生成波形.

首先,我将收集CPU内核及其外围设备上可用的每个文档,尤其是应用笔记和示例代码.

C编译器将具有发出和保留汇编语言源文件的选项.我会用它作为指导来研究为关键循环和其他瓶颈生成的代码的结构,以及编译器的各种优化级别的影响.

工具套件应该有一个用于分析正在运行的代码的机制.在开始追求优化的英雄措施之前,首先要用它来确定实际的瓶颈.即使它缺乏适当的分析,您也可能有备用GPIO引脚,可以在代码的关键部分切换,并使用逻辑分析仪或示波器进行测量.