00:01
大家好,这期视频呢,我来简单讲解一下我的l link核心运行库,它的软件的结构啊。现在画面上看到的呢,就是我的运行库,它的。呃,结构控图。嗯,因为采用的呢是面向对象的,嗯,编程思维,所以呢,这里面会涉及到一些拈和接口。文件的这样一个概念。首先呢,大致讲解一下。这个核心运行库总共是有多少个?模块。第一个呢,是l link的。呃,接口就是1和2。呃,这一个呢,是。
01:00
就是本期视频里面。主要讲解的。嗯,接口文件这里面呢,是装载着LDD的,呃,翻译成C语言的代码,以及LDD的那相关的变量过程,数据的约束,还有就是MCU的,嗯。各种驱动资源的集合都存放在l link interface.原文件和l link interface头文件之中。第二个呢是driver文件,这个呢是存放着所有跟IO link通讯相关的。串口。呃,外部中断软件中断定时器等资源的驱动代码。接下来呢是l link lib interfe interrupt, 这个呢是因为l link, 它的通讯呢,包括软数据的接收,数据的处理超时。
02:10
都是采用中断的形式来实现的,诶这里面呢,是interrupt文件呢,是存放了所有的I link中断的服务函数。L link lib five, 这里面存放的呢,是l link需要的F芯片的工作函数。包括CQ线的状态切换、驱动方向切换。各种状态的查询这些函数。I link lib include头文件呢,是存放了。核心运行库的所有的头文件。经由这个文件呢,可以将I link内部的各种变量传递出去。用户只需要包含I link lib in include头文件,就可以访问整个核心运营库的所有API以及定义的所有变量。
03:14
A link lib protocol.这个呢,就是l link核心运行代码的协议层,就是所有的协议的各种各样的数据处理,交互指令的解析,这些内部的核心算法都包含在这里面。所以呢。有了这些分层,就有了程序的整个结构框架,首先呢,从最下面往上讲起。我们可以看到最下面包含的呢是llinkinterface.h。我们之前的文。呃,段落里面讲到的是,这里面存放的是什么,是各种变量。
04:00
Values.呃,以及各种MCU的。资源的外设,比如说呃,窗口,You are.的那个阿叉。诶错了,或者是P。哎,又写错了,我问题不大。呃,这些这些针对MCU的资源的外设的一些约束,以及呢,我们的s Du的一些参数。比如说我有index。100。这样的参数,呃,它会对应的一个value,这里面呢,都会包含在这个llinkliveinterface.h之中,所以呢,呃,由于它包含了所有的模块。需要的各种。
05:00
定义它呢,作为最底层的一个一个文件向上呢,给l link call.这就是l link核心运算库l link five I link driver.这些驱动文件提供MCU的引脚资源约束,啊在这里面呢,比如说l five.它里面是有,比如说。Q second type.Signal.Type.这样的函数有。CQ.Driver它的驱动模式以及一些其他的内部函数,比如说呃,有有一些get函数,Get.呃。CAL type就是获取当前的驱动模式,因为CQ呢是单线传输,它会有IORXTX这样的模式。
06:11
啊,你这三种模式呢,是同时只能存在一种啊由其呃,SIO呢,就是IO的模式。然后RXTX对应的是SDCI,也就是数据通讯,但是呢,RX和TX呢,同时只能存在一种模式,这个时候呢,对外可能会有一些监控,这些所有的运行的函函数和运行的动作函数都存放在l link five之中,然后以API接口的形式传给l link car.而这里面呢,会就是运用我刚才说的,比如说c single type这样的函数去内部去执行,当我收到了一些数据。进行处理,处理完收收数据的时候,收。
07:00
这个时候需要调用呃sign type变成R叉RX模式来去去接收,然后内部进行一系列的处理,处理完成之后呢,肯定是需要往外发送嘛,这个时候就需要调用CQ c type set CQ cqu type函数,将整呃CQ线路的模式变成成T叉,所以它需要调用这个这些API,然后呢,I有个driver是也是一样的,这里面的存放着比如说呃窗口UR的呃receive。Receive函数,然后呢,Urt的发送函数send,这些函数都是以API的形式传递给I link call.然后来调用。这个呢,呃,然后在此处呢,就会有llinkliinterface.c,这个呢,函数是存放着所有LDD定义的交互变量的动作函数,比如说我这里面有扩程数据PD的更新。
08:05
Update, 呃,只有pd out的更新,Pd out update.那这些动作呢,都会存放在I live interface c之中,比如说我有,呃,我定义了一个DEMO,我的DEMO里面呢,是什么意思呢?是有一个led。Led呢,它会以500ms的间隔去闪烁啊,我定义了,呃,U16就是5号整形16比特的PD印。啊,那这个数据呢,就需要去定期的呃,交互给主站,主站来获取,那么呢,我在这里面呢,定义了是。我有。PD0。
09:01
PD1两个变量,这里呢用PD0来作为led的state。也就是说我led是0,那么PD0就是0 led是呃呃是低电平,Led是低电平,那么PD0就是0。呃,Led呢是高电平,那么PD0就是1,然后呢,PD1这一位呢,是记录着led它的闪烁的次数啊,然后它会在上面一直在不断的加加,不断的加加,然后呢,这这里面就会有一个函数叫。IO link lib pd in.Update这个函数呢,里面呢,就会把我的呃,这个buffer。
10:01
0。等于我的PD0。8份1=PD1。所以呢,这个这个这个所有的动作函数都都包含在这里面,不仅如此,还有is Du的读read。和写right,还有system command command这些所有的交互。的动作都包含在这里面,然后它的交互的内容都是根据LDD。啊。转变过来的。如果不用。我的代码生成的上面1,那这个时候呢,都需要开发者自己去写它的每一个每一个变量,比如说要读要read,那么这个时候呢。这个时候好一点儿了,这个时候那个有一个。
11:04
I'LL link lib is Du u.Read函数,这里面包含了index index.然后呢,程序里面会是什么叫Switch判断index case.比如说是个100,然后这里面去执行你的response,呃,一堆东西。啊,比如说再有一个那个萨米下面往下添加,添加,那么用户呢,就需要去根据。设备的需要l link l DD写完了之后去一条一条的往下去去写这些东西,那么如果设备包含的参数比较少。一二十个,那写了就写了也不难,但是当我们的设备是一个smart sensor是一个比较复杂的呃设备,那这个时候它的变量可能达到几十个甚至上百个,那这个时候我又写LDD,又要去把LDD转变成这个这个相对应的C代码,那这个工作量其实是很庞大的,所以呢,我这里面有的这个。
12:26
代码生成这个上位机直接将我需要的变量。把我的L各种数据的交互动作函数直接生成出来,那这个时候呢,我用户只需要写一遍LDD,剩下的工作都交给上飞机去完成啊,那这个时候呢,会有这样的函数去提供给L,另一个靠它呢,嗯,状态机state machine.哎,走到这一步,走到对应的步骤,比如说是pd update, 就去就去调用那个刚才说的p update或者pd out update函数,这时候调用的是s Du.
13:12
Read.状态机,那这个时候就去调用呃,Read函数,如果是right,就继去调用right函数啊,这是这是我们的这个接口。啊,然后呢,它上面呢,会以提供API到更上层,就是我们的main函数,然后就可以在mainin函数里面去调用它的API去获取,我当时是当时的状态机获取到一些呃变量这些值,然后呢,这是这是这是这边,然后呢是右边这一侧,同样呢,llinkliinterface.h会给l link Co一些头文件提供它的LDD交互变量。啊,然后呢,这些交互变量呢,会以头文件的形式再向上传递,包含在了a link lib include t HR, 因为面向对象编程嘛,不希望外层次的呃,拈块对内部的拈块有过多的耦合,那么这个时候呢,我只需要提供一个linglibinclude.h这样的头文件出去。
14:21
啊,那外层次呢,比如说main函数只需要包含这样一个lliveinclude.h这样的头文件就可以,相当于是把我整个下方的所有的。内容功能全包含在内,这样结合API,结合内部的这些个变量,Y6。就可以拿到外面去使用了。啊,想要读一些状态,就调用调用API,想要对一些个变量进行赋值。或者读取某些变量的值,那这个时候呢,这里这里面会有一个结构体。这里面呢,我就会存放各种各样的value,那这个时候呢,我们比如说像我刚才说的那个led,那实际上在。
15:09
这个结构体里面呢,是IO link is Du.第二,然后,嗯。有一个value。什么之类的,然后呢,呃,下面是Y6Y6几Y6几,你可以给它起不同的名字,那这个时候呢,就像我们刚才这个变量,就可以拿到外面去对它进行赋值,去对它进行一个判断啊,所以这个时候我整个的。呃,工作就完成了,而。后面的我的工作呢,是这条横线以下。这些内容都是由我的核心运算库去完成。包括。接口文件的生成,就是LDD的翻译,包括FA芯片的驱动,包括我Ling核心算库所占用的MCU的资源,都会在这里面去写好。
16:10
啊,都会体现在奥link driver之中,各种各样的串口,各种各样的中断定时器。啊,这些这些外设资源全都是写好,也就是说用户实际上拿到的是这条横线以下这样的一个大包。啊,在实际的使用过程中,只需要包含这个ilinklibinclude.h图文件,然后对我的I link核心运算库的一些。初始化函数。调用。那么剩下的工作全都是由内部去完成了,包括比如说像我刚才说的,我它的这个I link运行是有一些中断的,包括接收中断,发送完成中断,超时中断,但是这里面都会在Ling live interrupt这里面都完成了。那么用户在拿到这个东西的时候就不需要有任何的其他的动作,包括我会提供一个自己的LDDDEMO的这个这个interface,那么只需要在main函数里边初始化,包含了include.h文件好,剩下的东西变异直接运行就可以跑我的DEMO。
17:20
好,现在这就是我的程序的大概的,呃,框架和一个运行流程。
我来说两句