CN102830981B - 一种用于嵌入式系统软件开发工具的实现方法 - Google Patents
一种用于嵌入式系统软件开发工具的实现方法 Download PDFInfo
- Publication number
- CN102830981B CN102830981B CN201210334812.0A CN201210334812A CN102830981B CN 102830981 B CN102830981 B CN 102830981B CN 201210334812 A CN201210334812 A CN 201210334812A CN 102830981 B CN102830981 B CN 102830981B
- Authority
- CN
- China
- Prior art keywords
- module
- projects
- file
- compiling
- development environment
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 23
- 230000009885 systemic effect Effects 0.000 title claims abstract description 15
- 238000011161 development Methods 0.000 claims abstract description 48
- 238000012545 processing Methods 0.000 claims abstract description 8
- 238000000151 deposition Methods 0.000 claims description 21
- 230000003068 static effect Effects 0.000 claims description 3
- 230000009286 beneficial effect Effects 0.000 abstract description 2
- 230000018109 developmental process Effects 0.000 description 40
- ZVKAMDSUUSMZES-NZQWGLPYSA-N OS II Natural products CC(=O)N[C@H]1[C@H](OC[C@@H](O)[C@@H](O)[C@@H](O)CO)O[C@H](CO)[C@H](O[C@H]2O[C@H](CO)[C@@H](O)[C@H](O)[C@H]2O)[C@@H]1O[C@@H]3O[C@H](CO)[C@@H](O)[C@H](O)[C@H]3O ZVKAMDSUUSMZES-NZQWGLPYSA-N 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000033772 system development Effects 0.000 description 1
Landscapes
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种用于嵌入式系统软件开发工具的实现方法,具体包括如下步骤:步骤a1、将一多平台编译工具链与开发工具连接,以对应不同操作系统平台和不同中央处理器的编译参数作为多平台编译工具链中对应工具链的入口;步骤a2、开发工具为待开发的项目工程建立带有对应目标操作系统和目标中央处理器的编译参数以及统一的目录结构并包含有项目工程所需文件的独立的开发环境;步骤a3、对项目工程进行编译时根据开发环境中的编译参数选择多平台编译工具链中对应的工具链进行编译以生成目标文件。具体有益效果是:实现复杂且可定制的多模块开发模式,并可以实现不同操作系统和处理器跨平台的开发编译,从而提高开发效率,降低错误率。
Description
技术领域
本发明涉及一种软件开发工具,尤其涉及一种用于嵌入式系统软件开发工具的实现方法。
背景技术
在通信行业的嵌入式系统开发中,经常需要开发不同操作系统如Linux、uC/OS-II以及不同的处理器如MIPS(Microprocessor without interlocked piped stages 无内部互锁流水级的微处理器)、PowerPC(Performance Optimized With Enhanced RISC PC 增强精简指令集性能优化架构)平台的嵌入式软件系统,并且工程项目的软件开发往往是复杂的多模块协同开发,而现有的开发平台无法适应这种开发特点,使得开发人员在开发过程中不得不在多个开发平台间转换,造成工作效率低,易出现错误等问题。
发明内容
针对上述问题,现提供一种旨在实现跨平台开发编译的用于嵌入式系统软件开发工具的实现方法。
具体技术方案如下:
一种用于嵌入式系统软件开发工具的实现方法,其中,具体包括如下步骤:
步骤a1、将一多平台编译工具链与所述开发工具连接,以对应不同操作系统平台和不同中央处理器的编译参数作为所述多平台编译工具链中对应工具链的入口;
步骤a2、所述开发工具为待开发的项目工程建立带有对应目标操作系统和目标中央处理器的编译参数以及统一的目录结构并包含有所述项目工程所需文件的独立的开发环境;
步骤a3、对项目工程进行编译时根据所述开发环境中的编译参数选择所述多平台编译工具链中对应的工具链进行编译以生成目标文件。
优选的,所述开发环境包括用于存放所述项目工程用到的头文件目录、用于存放编译过程中生成的中间目标文件和所述项目工程的各个模块对应的静态库文件的工程文件目录、用于存放所述项目工程需要用到的外部库文件的库文件目录以及用于存放所述项目工程的各模块的模块目录结构。
优选的,所述开发环境包括与目标系统对应的系统组件及所述系统组件的配置参数,所述系统组件及所述系统组件的配置参数分别以头文件的形式存放于所述开发环境的顶层目录中。
优选的,所述开发环境包括所述项目工程对应的应用程序的入口初始化函数,所述入口初始化函数以应用程序初始化源文件的形式存放于所述开发环境的顶层目录中。
优选的,所述编译参数以处于所述开发环境目录结构顶层的编译文件的形式存放于所述开发环境中,所述编译文件中还存放有所述项目工程模块清单、各模块的从属关系,以及可通过所述开发工具改变的与所述多平台编译工具链中各编译工具对应的编译选项所需的变量。
优选的,所述模块目录结构包括用于存放单个一级模块的一级模块目录和用于存放单个二级模块的二级模块目录,所述一级模块若存在对应的二级模块则所述一级模块中仅存放所述二级模块的名称且该一级模块目录中包含用于存放对应的所述二级模块的二级模块目录。
优选的,所述步骤a3对所述项目工程编译的过程具体包括如下步骤:
步骤b1、根据所述项目工程顶层目录中的编译文件中的所述项目工程的模块清单选择一个未编译的一级模块;
步骤b2、判断选中的所述一级模块是否存在对应的二级模块,如存在对应的二级模块,则根据选定的所述一级模块中记录的对应的二级模块的名称逐一编译选定的所述一级模块对应的二级模块,如不存在对应的二级模块则对选定的所述一级模块进行编译;
步骤b3、重复步骤b1至步骤b2直至所述项目工程的所有模块均被编译;
步骤b4、根据所述项目工程顶层目录中的编译文件中的编译参数对应的目标操作系统判断是否要对编译完成的所述项目工程的模块的库文件进行链接;
步骤b5、对不需要链接的目标操作系统生成可执行文件,对需要链接的目标操作系统输出所述项目工程经编译的模块库文件。
优选的,所述开发工具根据所述开发环境顶层目录中的编译文件中的模块清单为每个所述模块生成对应的编译文件并存放于用于存放对应模块的目录中。
上述技术方案的有益效果是:
实现复杂且可定制的多模块开发模式,并可以实现不同操作系统和处理器跨平台的开发编译,从而提高开发效率,降低错误率。
附图说明
图1为本发明一种用于嵌入式系统软件开发工具的实现方法的实施例的流程框图;
图2为本发明一种用于嵌入式系统软件开发工具的实现方法的实施例中的项目工程编译过程的流程框图。
具体实施方式
下面结合附图和具体实施例对本发明作进一步说明,但不作为本发明的限定。
如图1所示,本发明一种用于嵌入式系统软件开发工具的实现方法的实施例,其中,具体包括如下步骤:
步骤a1、将一多平台编译工具链与开发工具连接,以对应不同操作系统平台和不同中央处理器的编译参数作为多平台编译工具链中对应工具链的入口;一种较优的实施方式是可采用GNU组织提供的一套完整的多平台编译工具链。
步骤a2、开发工具为待开发的项目工程建立带有对应目标操作系统和目标中央处理器的编译参数以及统一的目录结构并包含有项目工程所需文件的独立的开发环境;开发环境以对应目标系统和项目工程本身需求的目录结构予以体现。其中,开发环境包括用于存放项目工程用到的头文件目录、用于存放编译过程中生成的中间目标文件和项目工程的各个模块对应的静态库文件的工程文件目录、用于存放项目工程需要用到的外部库文件的库文件目录以及用于存放项目工程的各模块的模块目录结构。头文件目录可采用符合开发人员习惯的include这一字串进行命名,同样的,工程文件目录可采用build这一字串进行命名,库文件目录可采用lib这一字串进行命名。
进一步的,开发环境还包括与目标系统对应的系统组件及系统组件的配置参数,系统组件及系统组件的配置参数分别以头文件的形式存放于开发环境的顶层目录中。同时,开发环境还包括项目工程对应的应用程序的入口初始化函数,入口初始化函数以应用程序初始化源文件的形式存放于开发环境的顶层目录中。
编译参数以处于开发环境目录结构顶层的编译文件的形式存放于开发环境中,编译文件中还存放有项目工程模块清单、各模块的从属关系,以及可通过开发工具改变的与多平台编译工具链中各编译工具对应的编译选项所需的变量。
模块目录结构包括用于存放单个一级模块的一级模块目录和用于存放单个二级模块的二级模块目录,一级模块若存在对应的二级模块则一级模块中仅存放二级模块的名称且该一级模块目录中包含用于存放对应的二级模块的二级模块目录。
步骤a3、对项目工程进行编译时根据开发环境中的编译参数选择多平台编译工具链中对应的工具链进行编译以生成目标文件。
如图2所示,步骤a3对项目工程编译的过程具体包括如下步骤:
步骤b1、根据项目工程顶层目录中的编译文件中的项目工程的模块清单选择一个未编译的一级模块;
步骤b2、判断选中的一级模块是否存在对应的二级模块,如存在对应的二级模块,则根据选定的一级模块中记录的对应的二级模块的名称逐一编译选定的一级模块对应的二级模块,如不存在对应的二级模块则对选定的一级模块进行编译;
步骤b3、重复步骤b1至步骤b2直至项目工程的所有模块均被编译;
在对模块进行编译之前,需要为每个模块生成对应的编译文件并存放于用于存放对应模块的目录中,根据一级模块和二级模块的不同,分为一级模块编译文件和二级模块编译文件。其中二级模块编译文件是最终的模块编译文件,它会对该最终模块中所有源文件进行编译,并生成对应的模块库文件,而对于一级模块编译文件,需要根据对模块类型进行判断,如果该一级模块不包含有任何对应的二级模块,即该模块是作为最终模块存在的,则对该模块进行编译,并生成模块库文件即可;如果该一级模块包含有二级模块,则需要根据其二级模块的结构来逐一将执行权交给其二级模块,并分别编译并生成模块库文件。因此,在为工程各个模块生成编译文件时,只需要根据一级模块目录或者二级模块目录来相应生成一级模块文件与二级模块文件即可。
在对项目工程中包含的一级模块和二级模块在内的所有模块生成了编译文件之后,从项目工程顶层的编译文件开始,根据各模块目录结构,对项目工程中所有模块进行遍历,每到一个模块,都会判断该模块是否为最终模块,如果是,则编译该模块,并生成该模块相对应的库文件;如果不是最终模块,则逐一进入该模块目录中所有二级模块进行编译,并生成该模块相对应的库文件。
步骤b4、根据项目工程顶层目录中的编译文件中的编译参数对应的目标操作系统判断是否要对编译完成的项目工程的模块的库文件进行链接;
步骤b5、对不需要链接的目标操作系统生成可执行文件,对需要链接的目标操作系统输出项目工程经编译的模块库文件。
对项目工程中所有模块编译完成并生成相对应的模块库文件之后,根据嵌入式操作系统平台的不同,分别对整个项目工程的模块库文件进行处理,对于不需要和嵌入式操作系统编译链接的,如嵌入式Linux操作系统,只需要将模块库文件链接生成最终的可执行应用程序即可;而对于需要和嵌入式操作系统编译链接的,项目工程编译最终的目标文件就是项目工程各个模块的库文件,用户只需要将该项目工程的模块库文件输出给相对应的目标操作系统作为外部引用库文件即可作为二次开发。特别地,如果该项目工程的目标操作系统是开源的,如uC/OS-II嵌入式操作系统,则只需要将该操作系统源代码作为一个或多个模块存在于开发环境中,最终生成的模块库文件,包括所用操作系统相应库文件,一起编译链接生成最终的可执行镜像文件。
所有的项目工程配置维护管理都在开发环境顶层的编译文件中修改操作即可,不需要操作其它的配置文件,而对系统组件及其参数配置管理也是相对简便的。项目工程中的模块目录结构仅由开发环境顶层的编译文件中的参数来决定,即便模块中出现其它目录也是不被识别的。
为了方便调试,可以进入各个模块所在的目录,单独对模块进行编译,如果进入一级模块目录进行编译,则开发工具编译调试该一级模块对应的所有二级模块,如果不存在对应的二级模块,则仅编译调试该一级模块,如果进入了二级模块目录,则只对指定的单个二级模块进行编译调试。
以上所述仅为本发明较佳的实施例,并非因此限制本发明的实施方式及保护范围,对于本领域技术人员而言,应当能够意识到凡运用本发明说明书及图示内容所作出的等同替换和显而易见的变化所得到的方案,均应当包含在本发明的保护范围内。
Claims (6)
1.一种用于嵌入式系统软件开发工具的实现方法,其特征在于,具体包括如下步骤:
步骤a1、将一多平台编译工具链与所述开发工具连接,以对应不同操作系统平台和不同中央处理器的编译参数作为所述多平台编译工具链中对应工具链的入口;
步骤a2、所述开发工具提供待开发的项目工程建立带有对应目标操作系统和目标中央处理器的编译参数以及统一的目录结构并包含有所述项目工程所需文件的独立的开发环境;所述开发环境包括与目标系统对应的系统组件及所述系统组件的配置参数,所述系统组件及所述系统组件的配置参数分别以头文件的形式存放于所述开发环境的顶层目录中;
步骤a3、对项目工程进行编译时根据所述开发环境中的编译参数选择所述多平台编译工具链中对应的工具链进行编译以生成目标文件;所述编译参数以处于所述开发环境目录结构顶层的编译文件的形式存放于所述开发环境中,所述编译文件中还存放有所述项目工程模块清单、各模块的从属关系、以及可通过所述开发工具改变的与所述多平台编译工具链中各编译工具对应的编译选项所需的变量。
2.如权利要求1所述用于嵌入式系统软件开发工具的实现方法,其特征在于,所述开发环境包括用于存放所述项目工程用到的头文件目录、用于存放编译过程中生成的中间目标文件和所述项目工程的各个模块对应的静态库文件的工程文件目录、用于存放所述项目工程需要用到的外部库文件的库文件目录以及用于存放所述项目工程的各模块的模块目录结构。
3.如权利要求1所述用于嵌入式系统软件开发工具的实现方法,其特征在于,所述开发环境包括所述项目工程对应的应用程序的入口初始化函数,所述入口初始化函数以应用程序初始化源文件的形式存放于所述开发环境的顶层目录中。
4.如权利要求1所述用于嵌入式系统软件开发工具的实现方法,其特征在于,所述模块目录结构包括用于存放单个一级模块的一级模块目录和用于存放单个二级模块的二级模块目录,所述一级模块若存在对应的二级模块则所述一级模块中仅存放所述二级模块的名称且该一级模块目录中包含用于存放对应的所述二级模块的二级模块目录。
5.如权利要求1所述用于嵌入式系统软件开发工具的实现方法,其特征在于,所述步骤a3对所述项目工程编译的过程具体包括如下步骤:
步骤b1、根据所述项目工程顶层目录中的编译文件中的所述项目工程的模块清单选择一个未编译的一级模块;
步骤b2、判断选中的所述一级模块是否存在对应的二级模块,如存在对应的二级模块,则根据选定的所述一级模块中记录的对应的二级模块的名称逐一编译选定的所述一级模块对应的二级模块,如不存在对应的二级模块则对选定的所述一级模块进行编译;
步骤b3、重复步骤b1至步骤b2直至所述项目工程的所有模块均被编译;
步骤b4、根据所述项目工程顶层目录中的编译文件中的编译参数对应的目标操作系统判断是否要对编译完成的所述项目工程的模块的库文件进行链接;
步骤b5、对不需要链接的目标操作系统生成可执行文件,对需要链接的目标操作系统输出所述项目工程经编译的模块库文件。
6.如权利要求4所述用于嵌入式系统软件开发工具的实现方法,其特征在于,所述开发工具根据所述开发环境顶层目录中的编译文件中的模块清单为每个所述模块生成对应的编译文件并存放于用于存放对应模块的目录中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210334812.0A CN102830981B (zh) | 2012-09-12 | 2012-09-12 | 一种用于嵌入式系统软件开发工具的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210334812.0A CN102830981B (zh) | 2012-09-12 | 2012-09-12 | 一种用于嵌入式系统软件开发工具的实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102830981A CN102830981A (zh) | 2012-12-19 |
CN102830981B true CN102830981B (zh) | 2015-10-07 |
Family
ID=47334131
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210334812.0A Active CN102830981B (zh) | 2012-09-12 | 2012-09-12 | 一种用于嵌入式系统软件开发工具的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102830981B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105025254B (zh) * | 2014-06-13 | 2018-11-06 | 深圳市景阳科技股份有限公司 | 一种多平台监控终端系统开发方法 |
CN105812327B (zh) * | 2014-12-29 | 2020-07-10 | 航天信息股份有限公司 | 复合型多用通讯方法及系统 |
CN105824628B (zh) * | 2016-03-16 | 2019-05-24 | 湖南中车时代通信信号有限公司 | 安全计算机平台二次软件开发的方法 |
CN105893105A (zh) * | 2016-03-29 | 2016-08-24 | 乐视控股(北京)有限公司 | 一种针对多个编译平台的编译系统和方法 |
CN106202685B (zh) * | 2016-07-01 | 2019-10-08 | 合肥海本蓝科技有限公司 | 一种软硬件协同仿真加速器运行环境搭建方法和装置 |
CN106598607A (zh) * | 2016-12-19 | 2017-04-26 | 上海鸣啸信息科技股份有限公司 | 一种嵌入式乘客信息系统的软件开发方法 |
CN106775744B (zh) * | 2016-12-28 | 2021-02-23 | 北京五八信息技术有限公司 | 一种生成静态库的方法和装置 |
CN109240646B (zh) * | 2017-06-09 | 2023-07-25 | 龙芯中科技术股份有限公司 | 应用程序开发工具的构建方法、装置、设备和存储介质 |
CN108289250B (zh) * | 2017-12-27 | 2020-05-12 | 深圳市九洲电器有限公司 | 机顶盒操作系统管理方法及系统 |
CN108536431A (zh) * | 2018-04-04 | 2018-09-14 | 浙江小泰科技有限公司 | 一种全局命令行创建前端项目方法及系统 |
CN109918080A (zh) * | 2019-02-25 | 2019-06-21 | 深圳市创联时代科技有限公司 | 一种配置工具链的方法 |
CN109976750A (zh) * | 2019-03-28 | 2019-07-05 | 深圳市创联时代科技有限公司 | 一种基于嵌入式开发系统的组件源码配置和组件裁剪方法 |
CN112231211B (zh) * | 2020-10-14 | 2024-01-26 | 天津津航计算技术研究所 | 一种在嵌入式VxWorks操作系统下解决Qt应用调试的方法 |
CN114296742B (zh) * | 2022-03-08 | 2022-05-10 | 苏州万店掌网络科技有限公司 | 安装包创建方法、装置、设备及介质 |
CN115827056B (zh) * | 2023-02-01 | 2023-05-09 | 北京乐研科技股份有限公司 | 一种配置多种编译环境变换的方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101122866A (zh) * | 2007-09-12 | 2008-02-13 | 中兴通讯股份有限公司 | 集成开发环境中的程序代码编译方法 |
CN101630258A (zh) * | 2009-07-29 | 2010-01-20 | 精伦电子股份有限公司 | Windows平台上嵌入式Linux软件集成开发系统及其构建方法 |
CN101667134A (zh) * | 2009-09-23 | 2010-03-10 | 中兴通讯股份有限公司 | 一种构建编译系统的方法、一种编译系统及其构建装置 |
CN101859244A (zh) * | 2009-04-10 | 2010-10-13 | 中兴通讯股份有限公司 | 多工具链工程构建方法及系统 |
-
2012
- 2012-09-12 CN CN201210334812.0A patent/CN102830981B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101122866A (zh) * | 2007-09-12 | 2008-02-13 | 中兴通讯股份有限公司 | 集成开发环境中的程序代码编译方法 |
CN101859244A (zh) * | 2009-04-10 | 2010-10-13 | 中兴通讯股份有限公司 | 多工具链工程构建方法及系统 |
CN101630258A (zh) * | 2009-07-29 | 2010-01-20 | 精伦电子股份有限公司 | Windows平台上嵌入式Linux软件集成开发系统及其构建方法 |
CN101667134A (zh) * | 2009-09-23 | 2010-03-10 | 中兴通讯股份有限公司 | 一种构建编译系统的方法、一种编译系统及其构建装置 |
Also Published As
Publication number | Publication date |
---|---|
CN102830981A (zh) | 2012-12-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102830981B (zh) | 一种用于嵌入式系统软件开发工具的实现方法 | |
US9864590B2 (en) | Method and system for automated improvement of parallelism in program compilation | |
CN110870249A (zh) | 用于将高级语言代码编译为区块链平台上可执行的脚本的系统和方法 | |
US9250973B2 (en) | Apparatus and associated methodology of generating a multi-core communications topology | |
CN109976760A (zh) | 一种图形语言的交叉编译方法及交叉编译器 | |
US8418155B2 (en) | Generating parallel SIMD code for an arbitrary target architecture | |
Lazarescu | Wireless sensor networks for the Internet of Things: barriers and synergies | |
CN101859244A (zh) | 多工具链工程构建方法及系统 | |
CN104267999A (zh) | 一种对控制程序进行编译的方法和装置 | |
Floc'h et al. | GeCoS: A framework for prototyping custom hardware design flows | |
CN103197942A (zh) | 一种补丁的生成方法、打补丁的方法及装置 | |
CN109542446A (zh) | 一种编译系统、方法及编译器 | |
Posse | PapyrusRT: modelling and code generation | |
CN106648813B (zh) | 一种同步数据流程序的形式化编译方法 | |
Cardoso et al. | REFLECT: rendering FPGAs to multi-core embedded computing | |
Hück et al. | Source transformation of C++ codes for compatibility with operator overloading | |
Herrera et al. | A model-based, single-source approach to design-space exploration and synthesis of mixed-criticality systems | |
Carpenter et al. | A streaming machine description and programming model | |
Wichmann et al. | Specification and execution of system optimization processes with UML activity diagrams | |
Ubayashi et al. | Abstraction-aware verifying compiler for yet another MDD | |
CN108427558A (zh) | 一种c编译器的窥孔优化方法 | |
US20110023008A1 (en) | Method for optimizing an architectural model of a microprocessor | |
Sinha et al. | Competitors or Cousins? Studying the parallels between distributed programming languages SystemJ and IEC61499 | |
Arató et al. | A data flow graph generation method starting from C description by handling loop nest hierarchy | |
Bagnato et al. | SysML for modeling co-simulation orchestration over FMI: the INTO-CPS approach |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
PP01 | Preservation of patent right |
Effective date of registration: 20180313 Granted publication date: 20151007 |
|
PP01 | Preservation of patent right | ||
PD01 | Discharge of preservation of patent | ||
PD01 | Discharge of preservation of patent |
Date of cancellation: 20210313 Granted publication date: 20151007 |
|
PP01 | Preservation of patent right | ||
PP01 | Preservation of patent right |
Effective date of registration: 20210313 Granted publication date: 20151007 |
|
PD01 | Discharge of preservation of patent | ||
PD01 | Discharge of preservation of patent |
Date of cancellation: 20240313 Granted publication date: 20151007 |