国外课栈 - 国外电子信息技术

ARM Mbed调试,多线程,实时和库

 二维码 13
文章附图

背景知识视频教程


调试

错误通常有两种,编译时错误和运行时错误。 编译时错误通常是由于语法错误以及变量和函数的使用不当造成的。 可以相对容易地更正它们,否则您的代码将无法编译。 运行时错误更难消除。 但是,Arm Mbed提供了一种称为死亡灯的机制,当遇到运行时错误时,它将像警笛一样闪烁LED。 以下是一个典型的例子,将导致死亡灯出现。

</>

Arm Mbed 还包含一些用于报告运行时错误的功能,例如:

‐ printf()-将格式化的消息打印到USB串行端口(默认为stdout)。

‐ error()-将格式化的消息打印到USB串行端口,然后使用“警笛灯”熄灭。

定时器

计时器对于测量较小的时间变化非常有用,如以下示例所示。 它首先启动计时器,进行一些计算,然后停止计时器并读取经过的时间(以秒为单位)。 可以创建任意数量的Timer对象,并且可以独立启动和停止。

</>

下图显示了程序的Arduino串行监视器输出。 在此示例中,计算仅需3微秒

练习1

超时接口用于设置中断,以在指定的延迟后调用函数。 在以下示例中,函数“ fun()”已分配给超时事件,该事件将在2秒后中断主循环。 超时事件只会发生一次。 可以创建任意数量的超时对象,从而允许同时发生多个未决中断。

</>

下图显示了程序的Arduino串行监视器输出。 如我们所料,在程序运行2秒后,超时事件仅发生一次。

Ticker接口用于设置循环中断,以指定的速率重复调用函数。 在下面的示例中,一个函数“ fun()”已分配给一个Ticker事件,它将每2秒中断一次主循环。 一个Ticker事件将反复发生。

可以创建任意数量的Ticker对象,同时允许多个未完成的中断。 该函数可以是特定对象的静态函数或成员函数。

</>

下图显示了程序的Arduino串行监视器输出。 在这种情况下,Ticker事件每2秒发生一次。

网络时间协议(NTP)

网络时间协议(NTP)是一种网络协议,用于通过数据包交换的可变延迟数据网络在计算机系统之间进行时钟同步。 以下是一个简单的示例,显示了如何使用NTP从Internet获取时间信息。 它使用以下库:

</>

下图显示了对应结果

多线程和实时编程

多线程是Arm Mbed OS 5随附的强大功能。它允许您并行运行任务。 例如,您可以使用一个线程进行通信,并使用一个线程进行控制。

多线程是通过实时操作系统(RTOS)提供的,这是新的mbed OS 5的关键功能之一。现在,这种要求很高的功能已集成在mbed操作系统的核心中。 RTOS为操作系统和应用程序提供了本机线程支持,从而简化了网络堆栈等复杂而强大的应用程序组件的开发和集成。 RTOS需要非常有限的系统开销。

在Arm Mbed 中创建多线程程序非常简单。 只需导入“ mbed-rtos”库,创建一个描述您想做什么的函数,然后在线程中调用该函数即可。 以下程序使用主循环打印一条消息,并使用一个单独的线程调用“ fun_1()”函数以打印另一条消息。

</>

下图显示了示例的Arduino串行监视器输出。 如您所见,主循环线程每100 ms执行一次,独立线程每200 ms执行一次。

以下是上述示例的改进版本,其中创建了两个函数来打印两个消息,并在“ main()”函数中创建了两个线程来调用这两个函数。

</>

下图显示了示例的Arduino串行监视器输出。 如您所见,两个单独的线程同时运行

以下是另一个多线程示例,其中创建了两个函数来进行一些计算,并在“ main()”函数中创建了两个线程来调用这两个函数。 这两个函数都可以使用全局变量模式在它们之间共享信息。

</>

如下图所示,函数“ fun_2()”修改了mode的值,函数“ fun_1()”可以获取相应的更改。

我们还可以将上面的多线程代码与Web服务器代码结合在一起,以创建一个多线程Web服务器。

</>

导入

导出

编写您的库

发布您的库

版本控制

更新您的库

阅读完整文档

文章分类: 嵌入式ARM Mbed
分享到: