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的架构兼容。
然而,h5 移动应用 源码官方提供的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();
}
完成以上步骤后,将工程编译并下载到开发板,务必关注终端输出,观察任务运行情况。 注意:移植过程中可能会遇到自定义应用程序入口的小视频站源码下载编译错误,这是正常现象,只需根据提示调整即可。通过以上详细步骤,你将能够成功将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无疑是一个不可或缺的伙伴。