发布信息

一种基于D1-H的RT-THREAD移植方法和系统 专利技术说明

作者:admin      2023-06-29 07:07:46     765



计算;推算;计数设备的制造及其应用技术一种基于d1-h的rt-thread移植方法和系统技术领域1.本技术涉及芯片技术领域,尤其涉及一种基于d1-h的rt-thread移植方法和系统。背景技术:2.目前已经推出并量产了d1-h应用处理器芯片,是全球首颗量产的搭载平头哥玄铁906risc-v的应用处理器,为万物互联aiot时代提供了新的智能关键芯片,d1芯片集成了自研的片内高速互联总线nsi和丰富应用接口,能够提供高性能的异构多核心计算处理和出色的图形加速能力。d1-h是risc-v架构的处理器,该产品可广泛应用于智能汽车、智能家电、智慧城市、智能商显、智能办公等多个领域。3.rtos凭借模块化、并发性、实时性等优势在嵌入式终端软件开发中逐步占据重要的地位,因此面向rtos的软件开发是d1-h的重要方面。rt-thread是上海睿赛德电子科技有限公司于2006年推出的一款开源及社区化发展的国产实时操作系统,具有可靠性高、功耗低、中间组件丰富易用等特点。4.目前,还没有见到现有技术中将rt-thread移植到d1-h中的技术方案。技术实现要素:5.有鉴于此,本技术的目的在于提出一种基于d1-h的rt-thread移植方法和系统,本技术能够针对性的解决现有的问题。6.基于上述目的,本技术提出了一种基于d1-h的rt-thread移植方法,包括:7.获取硬实时内核rt-thread nano,对所述硬实时内核的源码进行选取和裁剪,选择所述硬实时内核的板级支持包中的rboard.c和rtconfig.h文件、include文件夹和src文件夹,并在rt-thread分支中获取d1-h的cpu接口文件,将上述文件和文件夹添加到d1-h的user程序中;8.根据d1-h芯片的特性进行调试修改,完成移植。9.进一步地,所述rboard.c和rtconfig.h文件为两个板级配置文件以及移植好的样例工程。10.进一步地,所述include文件夹包括内核源码的函数声明以及相关宏定义。11.进一步地,所述src文件夹包括内核源码。12.进一步地,所述cpu接口文件包括:[0013][0014]进一步地,所述根据d1-h芯片的特性进行调试修改,完成移植,包括:[0015]修改所述rboard.c和rtconfig.h文件、cpu接口文件中的clint.c文件、所述src文件夹中的内核源码、替换默认计时器中断服务例程。[0016]进一步地,修改所述内核源码包括:[0017]修改rt-thread的启动方式:为rt_thread_startup和rt_application_init函数新增参数“void(*func)(void)”,用于指定主线程,同时修改rt_application_init函数中调用创建线程函数rt_thread_create的指定主线程函数参数为func;[0018]修改空闲线程的栈空间,通过idle.c中宏idle_thread_stack_size修改,增加栈空间至1024b。[0019]基于上述目的,本技术还提出了一种基于d1-h的rt-thread移植系统,包括:[0020]选取与裁剪模块,用于获取硬实时内核rt-thread nano,对所述硬实时内核的源码进行选取和裁剪,选择所述硬实时内核的板级支持包中的rboard.c和rtconfig.h文件、include文件夹和src文件夹,并在rt-thread分支中获取d1-h的cpu接口文件,将上述文件和文件夹添加到d1-h的user程序中;[0021]适配模块,根据d1-h芯片的特性进行调试修改,完成移植。[0022]总的来说,本技术的优势及给用户带来的体验在于:本技术成功的将rt-thread移植到d1-h中,填补了原来d1-h芯片不支持rt-thread的空白。附图说明[0023]在附图中,除非另外规定,否则贯穿多个附图相同的附图标记表示相同或相似的部件或元素。这些附图不一定是按照比例绘制的。应该理解,这些附图仅描绘了根据本技术公开的一些实施方式,而不应将其视为是对本技术范围的限制。[0024]图1示出根据本技术实施例的基于d1-h的rt-thread移植方法的流程图。[0025]图2示出根据本技术实施例的rt-thread移植测试结果图。[0026]图3示出根据本技术实施例的基于d1-h的rt-thread移植系统的构成图。[0027]图4示出了本技术一实施例所提供的一种电子设备的结构示意图。[0028]图5示出了本技术一实施例所提供的一种存储介质的示意图。具体实施方式[0029]下面结合附图和实施例对本技术作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。[0030]需要说明的是,在不冲突的情况下,本技术中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本技术。[0031]如图1所示,rt-thread的移植需要对源码进行选取剪裁并修改相关文件等工作,下面将详细介绍移植过程。[0032]1源码的选取与裁剪[0033]从官网下载3.1.5版本rt-thread nano,该版本是官方推出的硬实时精简内核,稳定性高且占用资源极低,主要包含板级支持包(board support package,bsp)、组件、相关头文件、cpu接口和内核源码五个部分,如表1所示。由于官方没有提供d1-h的bsp,因此需要对源码进行选取和裁剪。鉴于libcpu中并无d1-h的接口文件和组件并不影响rt-thread的运行,因此仅选择bsp中的rboard.c和rtconfig.h文件、include文件夹和src文件夹。[0034]表1rt-thread nano文件组成和选取[0035][0036][0037]rt-thread nano虽然暂未提供d1-h的cpu接口文件,但可在rt-thread分支中找到,根据运行需要,保留如表2所示的文件。[0038]表2d1-h的cpu接口文件说明[0039][0040]将上述选择的文件添加到d1-h的user程序中。[0041]2源码适配[0042]完成了源文件的选取后,还需要针对芯片的特性进行调试修改才能完成移植。[0043]1.修改clint.c[0044]任何操作系统都需要提供一个时钟节拍,以供系统处理所有和时间有关的事件。时钟节拍的实现依赖于定时器,通过定时器实现周期性中断。一般在arm cortex m系列cpu上使用内部的滴答定时器systick实现,而在risc-v系列cpu使用内部的计时器实现。risc-v架构定义了两个64位宽的寄存器mtime和mtimecmp,mtime用于反应当前计数器的数值,mtimecmp用于设置计时器的比较值。当mtime中的数值大于或等于mtimecmp中设置的比较值时,便会产生计时器中断。计时器中断会一直拉高,直到软件重写mtimecmp的值,使其大于mtime中的值,才会清除计时器中断。为保持计时器中断周期运行,需要在计时器中断服务例程中根据当前mtime的值,重写mtimecmp。[0045]在clint.c中,已实现计时器初始化函数clint_timer_init和设置mtimecmp函数clint_timer_cmp_set_val,这两个函数都需要使用到counter函数,用于获取mtime的值。但clint.c中并未实现该函数,因此需要自行添加。在c906中,未将mtime寄存器的地址映射出来,因此无法直接获取mtime的值,但可通过csrr指令读取mtime的镜像time获取其值,具体实现方式如下:[0046][0047]2.修改rboard.c[0048]rboard.c主要用于实现系统时钟配置、时钟节拍配置以及内存堆配置,三者在函数rt_hw_board_init中完成,因此rborad.c的修改主要针对于rt_hw_board_init函数。首先,由于已在spl程序中初始化了系统时钟,因此rt_hw_board_init中无需再次初始化;其次,clint.c中已实现计时器初始化函数clint_timer_init,因此在rt_hw_board_init直接调用即可;最后,内存堆配置需要堆的起始地址与结束地址这两个参数,rboard.c中默认使用数组作为堆,并实现了获取堆的起始地址与结束地址函数,因此堆配置无需更改,只需根据需要修改数组的大小即可。特别地,内存堆功能是否使用取决于宏rt_using_heap是否开启,当开启内存堆功能后,默认值较小,在使用时应适当增大,否则可能会申请内存失败或者创建线程失败,另外该值需要小于芯片的ram大小,本技术根据实际需求,分配了10kb大小的堆空间。rt_hw_board_init函数的具体实现如下:[0049][0050]3.修改rtconfig.h[0051]rtconfig.h通过开关宏定义来使能或关闭rt-thread的某些功能。如设置系统最大优先级、是否使用互斥量、信号量、内存堆等功能,用户可根据实际需求,自行更改。[0052]4.修改内核源码[0053]内核源码主要是修改rt-thread的启动方式和空闲线程的栈空间。[0054]1)rt-thread的启动方式[0055]rt-thread的默认启动方式是entry函数调用启动函数rt_thread_startup,在启动函数中调用主线程初始化函数rt_application_init,默认将main作为主线程,因此需要修改启动文件,使其在启动时跳转至entry函数执行,而不是跳转至main。但为更好体现rt-thread的启动流程,因此不修改启动文件,启动跳转时依然跳至main,main不作为主线程,而由main调用启动函数,用户可自行指定主线程。这样,需对rt_thread_startup和rt_application_init函数作一定修改。具体实现如下:[0056]为rt_thread_startup和rt_application_init函数新增参数“void(*func)(void)”,用于指定主线程,同时修改rt_application_init函数中调用创建线程函数rt_thread_create的指定主线程函数参数为func。[0057]2)空闲线程的栈空间[0058]每个线程都有自己的栈空间,线程栈空间分配过小时,可能会使得线程运行终止,因此要合理分配栈空间大小。本技术在对移植好的rt-thread进行实际测试时,发现当线程切换到空闲线程时,线程停止运行。经过调试,发现空闲线程默认的栈空间为256b,当增加栈空间至1024b后,空闲线程运行正常,可通过idle.c中宏idle_thread_stack_size修改。[0059]5.替换默认计时器中断服务例程[0060]rt-thread提供了中断管理方法,当系统没有实现类似中断向量表的功能,物理中断要和用户的中断服务例程相关联,就需要使用中断管理接口对中断进行管理,这样当发生中断时就可以触发相应的中断,执行中断服务例程。而本技术不使用interrupt_gcc.s文件中提供的中断入口函数,也不使用rt-thread提供的中断管理接口。[0061]rt-thread在arm cortex-m架构下,通常以systick定时器作为时间滴答,结合可挂起系统调用(pendable supervisor,pendsv)实现调度;而在risc-v架构中,通常使用risc-v计时器替换systick定时器,使用risc-v软件中断替换pendsv,但也可不使用软件中断,直接在任务切换函数中进行上下文的切换。对于d1-h,rt-thread使用了后者,即不使用软件中断。[0062]综上,只需要替换已建立的d1-h中断系统中的默认计时器中断服务例程为tick.c中已实现的计时器中断服务例程tick_isr即可维持调度器运转。[0063]3移植测试[0064]在主线程中创建红灯、绿灯和蓝灯三个用户线程,其中,绿灯线程和蓝灯线程共用同一个互斥量,实现绿灯和蓝灯周期亮暗反转,反转周期分别为2秒和1秒;红灯线程通过事件和串口中断通信,当串口接收到一帧数据(帧头3a+四位数据+帧尾0d 0a)时,控制红灯的亮暗,三个用户线程优先级一致。通过串口工具查看输出测试结果如图2所示,可以看到三个用户线程被正常调度,红灯在串口中断的控制下进行亮暗反转,绿灯和蓝灯线程按照设定的2秒和1秒延时各自周期循环运行,表明rt-thread功能正常,成功移植rt-thread至d1-h。[0065]申请实施例提供了一种基于d1-h的rt-thread移植系统,该系统用于执行上述实施例所述的基于d1-h的rt-thread移植方法,如图3所示,该系统包括:[0066]固化引导模块201,用于运行内部固化引导程序;[0067]spl模块202,用于运行片内sdram中的spl程序;[0068]应用程序模块203,用于运行ddr中的应用程序,至此d1-h启动完成。[0069]本技术的上述实施例提供的基于d1-h的rt-thread移植系统与本技术实施例提供的基于d1-h的rt-thread移植方法出于相同的发明构思,具有与其存储的应用程序所采用、运行或实现的方法相同的有益效果。[0070]本技术实施方式还提供一种与前述实施方式所提供的基于d1-h的rt-thread移植方法对应的电子设备,以执行上基于d1-h的rt-thread移植方法。本技术实施例不做限定。[0071]请参考图4,其示出了本技术的一些实施方式所提供的一种电子设备的示意图。如图4所示,所述电子设备20包括:处理器200,存储器201,总线202和通信接口203,所述处理器200、通信接口203和存储器201通过总线202连接;所述存储器201中存储有可在所述处理器200上运行的计算机程序,所述处理器200运行所述计算机程序时执行本技术前述任一实施方式所提供的基于d1-h的rt-thread移植方法。[0072]其中,存储器201可能包含高速随机存取存储器(ram:random access memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口203(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网、广域网、本地网、城域网等。[0073]总线202可以是isa总线、pci总线或eisa总线等。所述总线可以分为地址总线、数据总线、控制总线等。其中,存储器201用于存储程序,所述处理器200在接收到执行指令后,执行所述程序,前述本技术实施例任一实施方式揭示的所述基于d1-h的rt-thread移植方法可以应用于处理器200中,或者由处理器200实现。[0074]处理器200可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器200中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器200可以是通用处理器,包括中央处理器(central processing unit,简称cpu)、网络处理器(network processor,简称np)等;还可以是数字信号处理器(dsp)、专用集成电路(asic)、现成可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本技术实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本技术实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器201,处理器200读取存储器201中的信息,结合其硬件完成上述方法的步骤。[0075]本技术实施例提供的电子设备与本技术实施例提供的基于d1-h的rt-thread移植方法出于相同的发明构思,具有与其采用、运行或实现的方法相同的有益效果。[0076]本技术实施方式还提供一种与前述实施方式所提供的基于d1-h的rt-thread移植方法对应的计算机可读存储介质,请参考图5,其示出的计算机可读存储介质为光盘30,其上存储有计算机程序(即程序产品),所述计算机程序在被处理器运行时,会执行前述任意实施方式所提供的基于d1-h的rt-thread移植方法。[0077]需要说明的是,所述计算机可读存储介质的例子还可以包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他光学、磁性存储介质,在此不再一一赘述。[0078]本技术的上述实施例提供的计算机可读存储介质与本技术实施例提供的基于d1-h的rt-thread移植方法出于相同的发明构思,具有与其存储的应用程序所采用、运行或实现的方法相同的有益效果。[0079]需要说明的是:[0080]在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备有固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本技术也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本技术的内容,并且上面对特定语言所做的描述是为了披露本技术的最佳实施方式。[0081]在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本技术的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。[0082]类似地,应当理解,为了精简本技术并帮助理解各个发明方面中的一个或多个,在上面对本技术的示例性实施例的描述中,本技术的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本技术要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本技术的单独实施例。[0083]本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。[0084]此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本技术的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。[0085]本技术的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(dsp)来实现根据本技术实施例的虚拟机的创建系统中的一些或者全部部件的一些或者全部功能。本技术还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者系统程序(例如,计算机程序和计算机程序产品)。这样的实现本技术的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。[0086]应该注意的是上述实施例对本技术进行说明而不是对本技术进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本技术可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干系统的单元权利要求中,这些系统中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。[0087]以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本技术揭露的技术范围内,可轻易想到其各种变化或替换,这些都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以所述权利要求的保护范围为准。









图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!




内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,发布内容不收取任何费用也不接任何广告!




免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

相关内容 查看全部