【擒拿主升源码】【cryengine3 源码】【afn视频源码解析】mdk源码

来源:企业平台源码

1.如何使用MDK建立一个STM32工程
2.如何使用MDK5.0建立STM32F103工程
3.ThreadX系列 | 最新v6.1.6版本在MDK中的移植方法
4.MDK编译出现“Target not created ”是什
5.问一下路过的大神keil5与keil5mdk 的区别是什么?

mdk源码

如何使用MDK建立一个STM32工程

       ç¬¬ä¸€æ­¥ï¼šèŽ·å–ST库源码

       å…³äºŽèŽ·å–ST公司的STM固件库源码,有几种方法。我们可以在百度上搜,网上有进行了分享,也可以到ST公司的官网进行查找并下载。不过,如果英文不好的话,要在官网上找到STM固件库确实是件很吃力的事。在官网上可以根据英文提示按不同条件进行筛选,具体操作如下图所示:

       END

       ç¬¬äºŒæ­¥ï¼šæ–°å»ºå·¥ç¨‹æ–‡ä»¶å¤¹â€”—《STM工程模板》

       é¦–先,新建工程文件夹《STM工程模板》,然后再在该文件夹下新建6个文件夹,分别为:《Doc》、《Libraries》、《Listing》、《Output》、《Project》和《User》。其中,《Doc》用于存放各种说明文档;《Libraries》用于存放各种库文件;《Listing》用于存放编译时产生的中间文件;《Output》用于存放生成的下载所需的文件;《Project》用于存放工程文件;《User》用于存放用户文件,即我们自己编写的各种源文件。具体情况如下图所示:

       END

       ç¬¬ä¸‰æ­¥ï¼šå‘建立的工程文件夹中添加库文件

       å°†åº“文件中的inc和src文件夹复制到模板工程文件夹下的FWLIB文件夹。具体操作情况如下图:

       å°†åº“文件中CoreSupport文件夹下的文件复制到工程模板文件夹下的CMSIS文件夹。具体操作情况如下图:

       å°†åº“文件中DeviceSupport文件夹下的相关文件复制到工程模板文件夹下的CMSIS文件夹。具体操作情况如下图:

       å°†åº“文件中startup文件夹下arm中的文件全部复制到工程模板文件夹下的startup文件夹。具体操作情况如下图:

       å°†åº“文件中Project文件夹下的相关文件复制到工程模板文件夹下的User文件夹中。具体操作情况如下图:

       END

       ç¬¬å››æ­¥ï¼šä½¿ç”¨MDK(Keil)新建工程模板

       é¦–先得选择CPU,这个在新建工程时,会有一个选择芯片的界面,我们只需按提示以及自己的实际情况来选择就好了。具体操作情况如下图:

       æ›´æ”¹å·¥ç¨‹åï¼ˆå°†é»˜è®¤çš„工程名改为“Template”的方法:选中工程,按“F2”键)并为工程添加项目组(Add group to project)。具体操作情况如下图:

       åˆ†åˆ«å‘各个项目组中添加我们刚刚从库中复制过来的文件文件(Add files to group)。具体操作情况如下图:

如何使用MDK5.0建立STMF工程

       1.解压stmfx_stdperiph_lib.zip 可以从ST官方网站免费下载。

       2.创建一个Demo文件夹

        2.1 新建子文件夹User,用于存放用户源程序

        2.2 新建子文件夹Project,用户KEIL工程文件

        2.3 在Project下依次创建Obj和List子文件夹,存放编译过程中产生的中间文件。

       3. 复制源代码到Demo文件夹

        3.1 将stmfx_stdperiph_lib\STMFx_StdPeriph_Lib_V3.1.2Libraries文件整体复制到Demo文件夹下。这就是ST的标准库,是以源代码形式提供的。

        3.2 将库中的演示代码IOToggle中的文件复制到Demo\User文件夹.

       4. 新建一个Keil MDK工程

        4.1 启动Keil MDK,点击菜单 New uVision Project,然后按向导进行操作

        4.2 选择CPU类型为 STMFZE (这是安富莱STM开发板采用CPU类型)

        4.3 当提示是否复制启动代码时,请选择否。(我们用最新的库中的启动代码,不用Keil软件自带的旧版本启动文件)

        4.4 根据自己的需要修改Target名字。(名字任意)

        4.5 为了便于代码管理,在这个Project下创建几个Group (名字可以任意)

        User : 存放用户自己写的源代码

        RVMDK : 存放启动文件(汇编文件)

        StdPeriph_Driver : 存放ST标准库文件

        CMSIS : 存放CMSIS接口文件(这也是库的一部分)

        4.6 创建好Group后,我们开始依次添加文件。

       5. 修改源代码。我们将修改main.c 文件,换成我们自己跑马灯程序。

       6. 配置工程, 点击“Options”按钮

        6.1 切换到Output。

        选择Object文件夹。

        在Create Hex File 前打钩。

        6.2 切换带Listing。

        选择Listings文件夹

        6.3 切换到C/C++

        添加两个预编译宏 STMFX_HD, USE_STDPERIPH_DRIVER (这是ST库用到了这两个宏)

        修改Includes路径

        6.4 切换到Debug

        选择硬件调试器(缺省是软件仿真),我们选择Cortex-M3 J-Link调试器

        再 Run to main前打钩

        6.4 切换到Utilities

        选额调试器类型,我们选择Cortex-M3 J-Link

        点settings按钮,添加Flash编程算法,我们选择STM高密度器件,Flash容量K字节

       7. 配置工程完毕。下面开始编译。

       8. 编译OK,开始调试。

       9. 教程结束。

ThreadX系列 | 最新v6.1.6版本在MDK中的移植方法

       探索ThreadX v6.1.6在STMLRCT6的高效移植路径

一、环境准备与源码引入

       开始于小熊派IoT开发板,首要任务是创建一个裸机工程,确保printf功能正常。使用MDK作为开发工具,我们首先从GitHub下载ThreadX的擒拿主升源码最新源码:

       - 在MDK工程中,新建threadX/common和ports组,选择AC5编译器。

       - 添加必要的.c和.s文件,并配置头文件和ASM路径,确保与STMLRCT6的架构兼容。

       然而,cryengine3 源码官方提供的tx_initialize_low_level.s试图自动接管处理器启动,这可能会引发一些问题。

二、问题与调整

       官方改动中涉及堆栈设置、向量表重定义和中断接管,这可能导致与STMLRCT6的中断管理冲突。为解决这个问题,我们定制了一个适配文件tx_initialize_low_level_bearpi.S:

       - 删除无用代码,注释掉官方部分,仅保留对STM启动文件中断处理的必要部分。

       接下来,afn视频源码解析移除HAL库的中断函数,转而使用STM的启动文件,确保中断处理更加精准。

三、应用代码编写

       在application_entry.c中,我们开始编写两个核心任务,它们将运行在创建的线程上:

       void my_thread1_entry(ULONG thread_input) {

        while(1) {

        printf("thread 1 application running...\r\n");

        tx_thread_sleep();

        }

       }

       void my_thread2_entry(ULONG thread_input) {

        while(1) {

        printf("thread 2 application running...\r\n");

        tx_thread_sleep();

        }

       }

       void tx_application_define(void *first_unused_memory) {

        tx_thread_create(&thread1, "thread 1", my_thread1_entry, ...);

        tx_thread_create(&thread2, "thread 2", my_thread2_entry, ..., thread2_stack, THREAD2_STACK_SIZE);

       }

       // 在main.c中启动内核

       void main() {

        printf("启动ThreadX在BearPi IoT Board上");

        tx_kernel_enter();

       }

       完成以上步骤后,将工程编译并下载到开发板,务必关注终端输出,观察任务运行情况。

       注意:移植过程中可能会遇到自定义应用程序入口的win锁机源码编译错误,这是正常现象,只需根据提示调整即可。

       通过以上详细步骤,你将能够成功将ThreadX v6.1.6移植到STMLRCT6,并开始构建你的实时操作系统应用。享受编程的乐趣,让多线程在BearPi IoT板上高效运转!

MDK编译出现“Target not created ”是什

       当MDK编译过程中遇到"Target not created"的错误,这通常意味着编译未能成功,原因可能包括以下几个方面:

       语法错误:检查源代码中是否存在拼写、标点或语法规则的暴利捉妖指标源码错误,比如未定义的变量。

       连接错误:如果程序试图调用外部函数但缺少相应的OBJ文件,这也会导致此问题。确保所有依赖文件已正确链接。

       程序大小限制:如果使用了Demo版MDK,编译后的程序大小必须在限制范围内,超过4K则无法创建目标。

       编译过程涉及将编程语言代码转化为机器码,通过编译器进行。编程语言可以是编译式或解释式,但选择取决于具体应用需求。

       编译程序主要包括两个关键步骤:

       词法分析:扫描源代码,将字符组合成单词,并形成单词符号串,这通常由词法分析器(扫描器)完成。

       语法分析:语法分析器依据语法规则检查单词符号串是否构成有效的程序结构,如表达式和语句。

       为了优化编译过程,会生成中间代码,这是一种介于源代码和机器语言之间的抽象表示,简化了编译器的逻辑结构,方便进行优化。

       总之,"Target not created"错误表明程序存在编译或链接问题,需要通过检查源代码、函数调用和程序大小来定位并解决。

问一下路过的大神keil5与keil5mdk 的区别是什么?

       对于编程界的高手们,Keil5与Keil5MDK究竟有何区别?

       首先,让我们来澄清这两个术语。Keil5更像是一个基础的编程工具,它专注于提供一个直观且用户友好的代码编辑环境,让你能够编写和编辑源代码。它是一个纯粹的IDE(集成开发环境),主要负责代码的编写和预览。

       然而,Keil5MDK则是一个更为全面的解决方案,它在Keil5的基础上,增添了针对ARM芯片开发的深度。MDK(Microchip Development Kit)包含了编译器,这是至关重要的一步,因为编译器是将你的源代码转化为可执行代码的关键工具。此外,MDK还内置了一系列库文件,这些文件为你提供了丰富的功能和模块,使得开发过程更加高效。更重要的是,它还配备了强大的调试和模拟支持,让你能够实时检查和调试程序,确保代码的正确运行。

       换句话说,如果你只有Keil5而没有MDK,那么你可能无法完整地进行从编程到烧录的全流程,因为MDK提供的这些额外功能对于硬件交互和调试至关重要。因此,对于进行嵌入式系统开发的工程师来说,Keil5MDK无疑是一个不可或缺的伙伴。

文章所属分类:探索频道,点击进入>>