嵌入式开发:嵌入式基础——回调函数

2022-12-30 0 969

反弹表达式是合作开发者建立BIOS或自表述mesenchymal需的两个基本上且一般来说很关键性的基本上概念。反弹表达式是对可继续执行标识符的提及,它做为HTA给其它标识符,容许较低等级的应用软件层调用在较低等级层中表述的表达式 (10)。反弹容许驱动流程或库PDP合作开发者在较低层选定犯罪行为,但将同时实现表述留下来插件层。

  最简单的反弹表达式而已两个表达式指针,它做为HTA给另两个表达式。在绝大多数情况下,反弹将包涵四个部份:

  • 反弹表达式

  • 反弹注册登记

• 反弹继续执行

  右图表明了这四个部份怎样在众所周知的反弹同时实现中相互配合。

嵌入式开发:嵌入式基础——回调函数

具体来说,合作开发者建立将具备由插件合作开发者确认的同时实现原素的库或组件。比如,合作开发者建立了两个 GPIO BIOS,该BIOS具备两个受阻服务例程,其标识符由插件合作开发者选定。受阻能处置按键挪动或其它许多机能。BIOS不重视机能,只重视在运转时它知道在受阻促发时如果调用甚么表达式。在组件中调用反弹表达式的标识符一般来说称作电子学流程。

接下去,须要有许多方式来说下层标识符如果继续执行甚么表达式。有许多方式能努力做到这一点儿,但对BIOS组件,所推荐的作法是在组件内建立两个专门针对用作将表达式注册登记为反弹的表达式。保有两个原则上的表达式来注册登记反弹表达式使PDP合作开发者十分清楚反弹表达式已经开始注册登记到某一的电子学流程。当调用暂存器表达式时,将被调用的所需表达式做为HTA给组件并储存表达式门牌号。

最终,插件合作开发者撰写他们的插件,其中主要包括建立反弹和调用标识符的同时实现,该标识符将该表达式注册登记到库或组件中。继续执行插件时,合情理标识符储存反弹表达式门牌号,当须要继续执行机能时,它会中止提及反弹表达式并继续执行它。

合作开发者能考虑使用反弹的两个主要示例。具体来说,在BIOS中,合作开发者将不知道最终插件可能须要怎样使用任何受阻服务流程。如果合作开发者已经开始为某些微控制器外设建立库,则能使用反弹来选定所有受阻犯罪行为。使用反弹将容许合作开发者确保在插件合作开发者没有注册登记自表述反弹表达式的情况下,每个受阻都有一个默认的服务流程。当反弹与受阻一起使用时,合作开发者须要记住,须要遵循受阻的最佳实践。

嵌入式开发:嵌入式基础——回调函数

其次,只要插件中存在可能具备某一于同时实现犯罪行为的常见犯罪行为,就能使用反弹。比如,调用数组是一项十分常见的任务,须要在插件中继续执行。如果对某些插件,PDP合作开发者希望将数组原素调用为全零,而在另两个插件中他们希望将数组原素调用为随机数怎么办?在这种情况下,他们能使用反弹来调用数组。

ArrayInit 表达式接受两个指向具备原素大小的数组的指针,然后它还接受两个指向返回整数的表达式的指针。此时的机能尚未表述,但能由插件标识符表述。当调用 ArrayInit 时,合作开发者会传递他们选择的任何表达式来调用数组原素。

  带反弹的表达式:

  void ArrayInit(int * Array, size_t size, int (*Function)(void))

  {

for(size_t i = 0; i < size; i++)

  {

  Array[i] = Function();

  }

  }

  将原素调用为0:

  int Zeros(void)

  {

  return 0;

  }

  将原素调用为随机数:

  int Random(void)

{

  return rand();

  }

  表达式Zeros或Random被传递给ArrayInit,这取决于插件PDP合作开发者希望怎样调用数组。

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务