在srslte中,代码的运行机制主要采用线程池,多队列,时间序列等方式来运作的。他们之间相互配合协调运作各个功能。在进入整个程序之前,笔者先简单的说一下线程池的基本原理,线程池实际上主要有两个部分的线程来维护,一个是工作者线程,另一个是任务者线程。他们共同维护一个任务队列,任务者线程往任务队列里面加任务,工作者线程就从任务队列里边取任务然后运行。整个运作的过程非常的庞大,其中维护了许多的队列,笔者目前也还没有完全弄明白多队列与线程池之间的运作关系。今天主要分享一下笔者近期学习srsLTE源码所得的一些内容。后面在学习的过程中还会继续分享,欢迎同行者一起交流。
首先,在enb端,程序的初始化过程是在 main.cc函数里边
从这里开始,初始化了各个层级,每个层级的初始化相互独立的,这也说明的了,各个层之间是一种并行运行的机制。笔者主要负责协议栈部分的内容,所以从协议栈初始化开始。
在这个函数里面也主要是对协议栈的各个层进行了初始化,包括,RRC,PDCP,RLC,MAC层。同时也开启了一个线程来运行任务。