1.å¦ä½ä½¿ç¨MDK建ç«ä¸ä¸ªSTM32å·¥ç¨
2.å¦ä½ä½¿ç¨MDK5.0建ç«STM32F103å·¥ç¨
3.ThreadX系列 | 最新v6.1.6版本在MDK中的移植方法
4.MDK编译出现“Target not created ”是什
5.问一下路过的大神keil5与keil5mdk 的区别是什么?
å¦ä½ä½¿ç¨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的架构兼容。
然而,脉聊源码app官方提供的tx_initialize_low_level.s试图自动接管处理器启动,这可能会引发一些问题。二、问题与调整
官方改动中涉及堆栈设置、向量表重定义和中断接管,这可能导致与STMLRCT6的中断管理冲突。为解决这个问题,我们定制了一个适配文件tx_initialize_low_level_bearpi.S:- 删除无用代码,注释掉官方部分,仅保留对STM启动文件中断处理的必要部分。
接下来,太阳主图源码移除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();
}
完成以上步骤后,将工程编译并下载到开发板,务必关注终端输出,观察任务运行情况。 注意:移植过程中可能会遇到自定义应用程序入口的ping命令源码在哪编译错误,这是正常现象,只需根据提示调整即可。通过以上详细步骤,你将能够成功将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无疑是一个不可或缺的伙伴。