{"id":59,"date":"2020-06-06T19:34:38","date_gmt":"2020-06-06T11:34:38","guid":{"rendered":"https:\/\/jiangshibo.cn\/?p=59"},"modified":"2020-12-13T22:38:59","modified_gmt":"2020-12-13T14:38:59","slug":"2020%e5%b9%b4%e6%b1%bd%e8%bd%a6%e7%94%b5%e5%ad%90%e8%bd%af%e4%bb%b6%e4%b8%bb%e6%b5%81%e6%9e%84%e5%bb%ba%e6%96%b9%e6%a1%88%e8%ae%b2%e8%a7%a3-makefile","status":"publish","type":"post","link":"https:\/\/jiangshibo.cn\/index.php\/2020\/06\/06\/2020%e5%b9%b4%e6%b1%bd%e8%bd%a6%e7%94%b5%e5%ad%90%e8%bd%af%e4%bb%b6%e4%b8%bb%e6%b5%81%e6%9e%84%e5%bb%ba%e6%96%b9%e6%a1%88%e8%ae%b2%e8%a7%a3-makefile\/","title":{"rendered":"2020\u5e74\u6c7d\u8f66\u7535\u5b50\u8f6f\u4ef6\u4e3b\u6d41\u6784\u5efa\u65b9\u6848\u8bb2\u89e3-makefile"},"content":{"rendered":"<ul>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#1-\u524d\u8a00\">1. \u524d\u8a00<\/a><\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#2-makefile\">2. makefile<\/a>\n<ul>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#21-stm32\u5de5\u7a0b\u793a\u4f8b\">2.1. STM32\u5de5\u7a0b\u793a\u4f8b<\/a><\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#22-\u793a\u4f8b\u5de5\u7a0b\u6784\u5efa\u6559\u7a0b\">2.2. \u793a\u4f8b\u5de5\u7a0b\u6784\u5efa\u6559\u7a0b<\/a>\n<ul>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#221-\u73af\u5883\u51c6\u5907\">2.2.1. \u73af\u5883\u51c6\u5907<\/a><\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#222-\u76ee\u6807\u6784\u5efa\">2.2.2. \u76ee\u6807\u6784\u5efa<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><!--more--><\/p>\n<h1>1. \u524d\u8a00<\/h1>\n<p>\u5f53\u524d\uff0c\u5728\u6c7d\u8f66\u7535\u5b50\u8f6f\u4ef6\u4ea7\u54c1\u5f00\u53d1\u4e2d\uff0c\u7531\u4e8e\u8f6f\u4ef6\u67b6\u6784\u5212\u5206\u8d8a\u6765\u8d8a\u6cfe\u6e2d\u5206\u660e\uff0cMCAL BSW Bootloader \u90e8\u5206CDD \u590d\u6742\u8bbe\u5907\u9a71\u52a8\u7b49\u8981\u4e0d\u5c31\u662f\u76f8\u5bf9\u72ec\u7acb\uff0c\u8981\u4e0d\u5c31\u662f\u4e0d\u540c\u7ec4\u7ec7\u534f\u540c\u5f00\u53d1\uff0c\u6216\u8005\u76f4\u63a5\u8d2d\u4e70\u4f9b\u5e94\u5546\u7684\u4ee3\u7801\uff0c\u6240\u4ee5\u8d8a\u6765\u8d8a\u591a\u7684\u5f00\u53d1\u56e2\u961f\u91c7\u7528 \u6e90\u7801\u548c \u4e0d\u540c\u7684\u9759\u6001\u94fe\u63a5\u5e93\u8fdb\u884c\u534f\u540c\u7f16\u8bd1\u7684\u65b9\u5f0f\u6784\u5efa\u76ee\u6807\u6587\u4ef6\u3002<\/p>\n<p>\u800c\u4e14\u5728\u6c7d\u8f66\u884c\u4e1a\u4e2d\uff0c\u6574\u8f66\u5382\u5927\u591a\u91c7\u7528\u81ea\u5df1\u5b9a\u4e49\u7684\u4e8c\u8fdb\u5236\u8f6f\u4ef6\u7f16\u7801\u89c4\u8303\u6765\u786e\u4fdd\u8f6f\u4ef6\u7269\u6599\u7684\u5b89\u5168\u6027\u548c\u54c1\u724c\u65d7\u4e0b\u7684\u901a\u7528\u6027\uff0c\u5178\u578b\u4f8b\u5b50\u5982 PSA \u5bb6\u7684<em>.ulp \u6587\u4ef6\u548c Geely \u5bb6\u7684<\/em>.vbf \u6587\u4ef6\uff0c\u8fd9\u4e9b\u90fd\u662f\u57fa\u4e8e\u5d4c\u5165\u5f0f\u884c\u4e1a\u5185\u901a\u7528\u7684\u4e8c\u8fdb\u5236\u76ee\u6807\u6587\u4ef6 *.s19 *.hex \u7b49\u8fdb\u884c\u81ea\u5b9a\u4e49\u89c4\u5219\u4fee\u6539\uff0c\u589e\u52a0\u4e86\u4e0d\u540c\u7684\u52a0\u5bc6\u548c\u538b\u7f29\u7b97\u6cd5\u3002<\/p>\n<p>\u5c24\u5176\u6700\u8fd1python\u8fd9\u95e8\u8bed\u8a00\u5728\u884c\u4e1a\u5185\u7684\u6e17\u900f\uff0c\u5bfc\u81f4\u5de5\u7a0b\u5e08\u4e0d\u4ec5\u53ef\u4ee5\u4f7f\u7528py\u89e3\u6790\u548c\u751f\u6210arxml\uff0cdbc \uff0ca2l \u7b49\u6587\u4ef6\uff0c\u8fd8\u53ef\u4ee5\u5728\u6784\u5efa\u76ee\u6807\u8f6f\u4ef6\u4e2d\uff0c\u7f16\u5199py\u811a\u672c\uff0c\u6dfb\u52a0\u66f4\u4e3a\u5f3a\u5927\u7f16\u8bd1\u540e\u5904\u7406\u624b\u6bb5\uff0c\u4f8b\u5982\u63d2\u5165\u53ef\u53d8\u65f6\u95f4\u6233\u5e8f\u5217\u53f7\uff0c\u5408\u5e76\/\u62c6\u5206\u6807\u5b9a\u6587\u4ef6\uff0c\u6570\u636e\u538b\u7f29\/\u52a0\u5bc6\u7b49\u3002<\/p>\n<p>\u7efc\u4e0a\u6240\u8bc9\uff0c\u8f6f\u4ef6\u6784\u5efa\u6240\u8981\u6c42\u7684\u76ee\u6807\u65e5\u6e10\u590d\u6742\uff0c\u5df2\u7ecf\u8d85\u51fa\u4e86 \u96c6\u6210\u5f00\u53d1\u73af\u5883\u8f6f\u4ef6IDE (Tasking,CodeWarrior,GreenHill...) \u7684\u80fd\u529b\uff0c\u5e76\u4e14\u7b14\u8005\u524d\u671f\u7684\u6587\u7ae0\u4e5f\u8bb2\u5230\u4e86\u6301\u7eed\u96c6\u6210\u5728\u884c\u4e1a\u5185\u7684\u5e94\u7528\uff0c\u4f7f\u7528IDE \u4e5f\u6ca1\u6709\u529e\u6cd5\u5b9e\u73b0\u6301\u7eed\u96c6\u6210\uff0c\u63a5\u4e0b\u6765\u7b14\u8005\u5c06\u4e3a\u5927\u5bb6\u4ecb\u7ecd2020\u5e74\u4e24\u79cd\u4e3b\u6d41\u7684\u8f6f\u4ef6\u6784\u5efa\u65b9\u6848\uff0cmakefile \u548c modern cmake \u3002<\/p>\n<h1>2. makefile<\/h1>\n<p>\u5173\u4e8emakefile\u7684\u4ecb\u7ecd\u548c\u6559\u7a0b\uff0c\u5927\u5bb6\u53ef\u4ee5\u76f4\u63a5\u5230<strong>\u9648\u7693<\/strong>\u7684\u535a\u5ba2\u91cc\u5b66\u4e60\uff0c<a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/blog.csdn.net\/haoel\/article\/details\/2886\">\u8ddf\u6211\u4e00\u8d77\u5199 Makefile<\/a> \uff0c\u7b80\u5355\u6765\u8bb2 \uff0cmakefile \u5c31\u662fmake\u6784\u5efa\u7cfb\u7edf\u7684\u53ef\u6267\u884c\u811a\u672c\uff0c\u53ef\u4ee5\u5728\u91cc\u9762\u8bbe\u5b9a\u7f16\u8bd1\u5668\uff0c\u6e90\u7801\uff0c\u4ee5\u53ca\u8c03\u7528python\u7b49\u5176\u5b83\u53ef\u6267\u884c\u811a\u672c\u3002\u5982\u4e0b\u4e3a\u793a\u4f8b\u5de5\u7a0b\u548c\u76f8\u5173makefile\u6587\u4ef6\uff0c\u8bfb\u8005\u53ef\u4ee5\u4e0b\u8f7d\u6b64\u5de5\u7a0b\uff0clearn by doing\u3002<\/p>\n<p>\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u6c7d\u8f66\u7535\u5b50\u4ea7\u54c1\u4e3a\u5d4c\u5165\u5f0f\u8f6f\u4ef6\u5f00\u53d1\uff0c\u6240\u4ee5\u65e0\u8bba\u4f7f\u7528\u54ea\u4e2a\u7cfb\u7edf(windows ,linux, macos)\u90fd\u7b97\u662f\u4ea4\u53c9\u7f16\u8bd1\uff0c\u7531\u4e8e\u5d4c\u5165\u5f0f\u6700\u65e9\u53d1\u8ff9\u662fKeil\u3001IAR\u7b49\u7834\u89e3\u6216\u76d7\u7248\u7684IDE\u6a2a\u884c\uff0c\u5bfc\u81f4\u6700\u521d\u7684\u5f00\u53d1\u8005\u5927\u591a\u91c7\u7528windows\uff0c\u7531\u6b64\u4ea7\u751f\u7684\u6280\u672f\u751f\u6001\u79ef\u7d2f\u4e5f\u5927\u591a\u57fa\u4e8ewin\uff0c\u6240\u4ee5\u5373\u4fbf\u5230\u4eca\u5929\uff0c\u5f00\u53d1\u5d4c\u5165\u5f0f\u4e5f\u662f\u9996\u9009windows\u7cfb\u7edf\uff0c\u4f46\u662f\u968f\u7740\u5d4c\u5165\u5f0flinux\u4ee5\u53ca\u8f66\u8054\u7f51\u667a\u80fd\u9a7e\u9a76\u7b49\u65b0\u6280\u672f\u70b9\u7684\u5d1b\u8d77\uff0clinux\u7cfb\u7edf\u4e0b\u4e5f\u9010\u6e10\u5b8c\u5584\u4e86\u5f00\u53d1\u5de5\u5177\u94fe\uff0c\u5e76\u4e14\u6709\u4e86\u76f8\u5f53\u4e00\u90e8\u5206\u7684liunx\u7cfb\u7edf\u4e0b\u5d4c\u5165\u5f0f\u8f6f\u4ef6\u5f00\u53d1\u4eba\u5458\u3002<\/p>\n<p>\u7b14\u8005\u793a\u4f8b\u7684\u73af\u5883\u662f windows + wsl \uff0c\u7ec8\u7aef\u5de5\u5177\u4f7f\u7528cmder\uff0cwsl\u5b89\u88c5\u4e86ubuntu\uff0c\u5927\u5bb6\u4e5f\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528linux\u3002<\/p>\n<h2>2.1. STM32\u5de5\u7a0b\u793a\u4f8b<\/h2>\n<p>\u6b64\u793a\u4f8b\u5de5\u7a0b\u662f\u9488\u5bf9 STM32F4 DISCOVERY \u8fd9\u5757\u5f00\u53d1\u677f\uff0c\u5b58\u653e\u5728github\u4e0a\uff0c<a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/github.com\/ShiboJiang\/STM32_F429DISCO_led.git\">STM32_F429DISCO_led<\/a><\/p>\n<p>\u5176\u4e2d\uff0cmakefile\u6587\u4ef6\u5982\u4e0b:<\/p>\n<pre><code class=\"language-makefile \">#------------------------------------------------------------------------------\n# File       : \u901a\u7528Makefile\n# Enviroment : windows\n# Author     : Shibo Jiang\n# Time       : 2017.11.17\n# Version    : 0.5\n# Notes      : \u9488\u5bf9STM32F429\u8fd9\u6b3e\u82af\u7247\uff0c\u9700\u8981\u5b89\u88c5make\u548cpython\u7684\u73af\u5883\n#------------------------------------------------------------------------------\n\n#--------------------------------- \u7f16\u8bd1\u53c2\u6570 ------------------------------------\n# \u53c2\u6570\u540d\u79f0\uff1a\u663e\u793a\u7f16\u8bd1\n# \u53c2\u6570\u8bf4\u660e\uff1a\u5728\u8c03\u7528\u5de5\u7a0b\u65f6\u8f93\u5165 make V=1 \u6765\u663e\u793a\u7f16\u8bd1\u8fc7\u7a0b\uff0c\u5426\u5219\u9ed8\u8ba4\u4e0d\u663e\u793a\u7f16\u8bd1\u65f6\u7684\u6307\u4ee4\n\nifneq ($(V),1)\nQ       := @\nNULL    := 2&gt;\\dev\\null\nendif\n\n# \u53c2\u6570\u540d\u79f0\uff1a\u76ee\u6807\u76ee\u5f55\uff0c\u53ca\u76ee\u6807\u540d\u79f0\n# \u53c2\u6570\u8bf4\u660e\uff1a\u5de5\u7a0b\u7f16\u8bd1\u751f\u6210\u5bf9\u8c61\u5b58\u653e\u7684\u6587\u4ef6\u5939\uff0c\u53ca\u5de5\u7a0b\u6587\u4ef6\u540d\u79f0\n\nTARGET_FOLDER := build_result\nTARGET := .\\$(TARGET_FOLDER)\\LedProject\n\n# \u53c2\u6570\u540d\u79f0\uff1a\u4f18\u5316\u7b49\u7ea7\n# \u53c2\u6570\u8bf4\u660e\uff1a\u9ed8\u8ba4\u5171\u63d0\u4f9b5\u7ea7\u4f18\u5316\n#           -O0     \u65e0\u4f18\u5316(\u9ed8\u8ba4) \n#\n#           -O\/-O1  \u4f7f\u7528\u80fd\u51cf\u5c11\u76ee\u6807\u6587 \u4ef6 \u5927\u5c0f\u4ee5\u53ca\u6267\u884c\u65f6\u95f4\u5e76\u4e14\u4e0d\u4f1a\u4f7f\u7f16\u8bd1\u65f6\u95f4\u660e\u663e\u589e\n#                   \u52a0\u7684\u4f18\u5316.\u5728\u7f16\u8bd1\u5927\u578b\u7a0b\u5e8f\u7684\u65f6\u5019\u4f1a\u663e\u8457\u589e\u52a0\u7f16\u8bd1\u65f6\u5185\u5b58\u7684\u4f7f\u7528. \n#\n#           -O2     \u5305\u542b-O1\u7684\u4f18\u5316\u5e76\u589e\u52a0\u4e86\u4e0d\u9700\u8981\u5728\u76ee\u6807\u6587\u4ef6\u5927\u5c0f\u548c\u6267\u884c\u901f\u5ea6\u4e0a\u8fdb\u884c\u6298\u8877\n#                   \u7684\u4f18\u5316.\u7f16\u8bd1\u5668\u4e0d\u6267\u884c\u5faa\u73af\u5c55\u5f00\u4ee5\u53ca\u51fd\u6570\u5185\u8054.\u6b64\u9009\u9879\u5c06\u589e\u52a0\u7f16\u8bd1\u65f6\u95f4\u548c\n#                   \u76ee\u6807\u6587\u4ef6\u7684\u6267\u884c\u6027\u80fd. \n#\n#           -Os     \u4e13\u95e8\u4f18\u5316\u76ee\u6807\u6587\u4ef6\u5927\u5c0f,\u6267\u884c\u6240\u6709\u7684\u4e0d\u589e\u52a0\u76ee\u6807\u6587\u4ef6\u5927\u5c0f\u7684-O2\u4f18\u5316\u9009\n#                   \u9879.\u5e76\u4e14\u6267\u884c\u4e13\u95e8\u51cf\u5c0f\u76ee\u6807\u6587\u4ef6\u5927\u5c0f\u7684\u4f18\u5316\u9009\u9879. \n#\n#           -O3     \u6253\u5f00\u6240\u6709-O2\u7684\u4f18\u5316\u9009\u9879\u5e76\u4e14\u589e\u52a0 -finline-functions, \n#                   -funswitch-loops,-fpredictive-commoning, -fgcse-after-reload\n#                   and -ftree-vectorize\u4f18\u5316\u9009\u9879. \n\nOPT     := -O0\n\n# \u53c2\u6570\u540d\u79f0\uff1aC\u8bed\u8a00\u6807\u51c6\n# \u53c2\u6570\u8bf4\u660e\uff1a\u8be5\u9009\u9879\u7528\u4e8e\u8bbe\u5b9a\u7f16\u8bd1\u65f6\u6267\u884c\u7684C\u8bed\u8a00\u6807\u51c6\uff0c\u63d0\u4f9b\u7684\u9009\u9879\u5206\u522b\u4e3a\n#          -std=c90\/-ansi\/-std=iso9899:1990     \u5404\u65f6\u671f\u6807\u51c6C\u7248\u672c\n#          -std=iso9899:199409                  \n#          -std=c99\/-std=iso9899:1999           \n#          -std=c11\/-std=iso9899:2011           \n#          -std=gnu90                           \u6216\u4e00\u4e0b\u5177\u6709GNU\u7279\u6027\u7684\u8bed\u8a00\u6807\u51c6 \n#          -std=gnu99\n#          -std=gnu11\n\nCSTD    := -std=c11\n\n# \u53c2\u6570\u540d\u79f0\uff1aCPP\u8bed\u8a00\u6807\u51c6\n# \u53c2\u6570\u8bf4\u660e\uff1a\u8be5\u9009\u9879\u7528\u4e8e\u8bbe\u5b9a\u7f16\u8bd1\u65f6\u6267\u884c\u7684CPP\u8bed\u8a00\u6807\u51c6\uff0c\u63d0\u4f9b\u7684\u9009\u9879\u5206\u522b\u4e3a\n#           -std=c++98\\-ansi\\-std=c++03         \u540c\u4e0a\n#           -std=c++11\n#           -std=gnu++98\n#           -std=gnu++11\n\n\nCXXSTD  := -std=c++11\n\n# \u53c2\u6570\u540d\u79f0\uff1a\u5305\u542b\u8def\u5f84\n# \u53c2\u6570\u8bf4\u660e\uff1a\u5c31\u662f include \u8bbe\u7f6e\uff0c\u7528\u4e8e\u4e3a\u7f16\u8bd1\u5668\u63d0\u4f9b\u5bfb\u627e.h\u6587\u4ef6\u7684\u8def\u5f84\n\nINC_FLAGS := -I .\\$(TARGET_FOLDER)\\files_h\n\n# \u53c2\u6570\u540d\u79f0\uff1a\u94fe\u63a5\u6587\u4ef6\n# \u53c2\u6570\u8bf4\u660e\uff1a\u6307\u5b9a\u94fe\u63a5\u5668\u94fe\u63a5\u6587\u4ef6\u65f6\u4f7f\u7528\u7684\u94fe\u63a5\u811a\u672c\u6587\u4ef6\n\nLDSCRIPT := $(shell find -name 'stm32_f103ze_gcc.ld')\n\n# \u53c2\u6570\u540d\u79f0\uff1apython\u811a\u672c\n# \u53c2\u6570\u8bf4\u660e\uff1a\u6307\u5b9amake\u8c03\u7528\u7684python\u811a\u672c\u6587\u4ef6\nPYTHON_SCRIPT  := $(shell find -name 'makefile_script.py')\n\n# \u53c2\u6570\u540d\u79f0\uff1a\u5b8f\u5b9a\u4e49\n# \u53c2\u6570\u8bf4\u660e\uff1a\u7f16\u8bd1\u65f6\u9884\u7f16\u8bd1\u7684\u5b8f\u5b9a\u4e49\n\nDEFINES := -D __weak=\"__attribute__((weak))\"\nDEFINES += -D __packed=\"__attribute__((__packed__))\"\nDEFINES += -D USE_STDPERIPH_DRIVER\nDEFINES += -D STM32F10X_HD\n\n# \u53c2\u6570\u540d\u79f0\uff1a\u6d6e\u70b9\u8fd0\u7b97\u53c2\u6570\n# \u53c2\u6570\u8bf4\u660e\uff1a-mfloat-abi\u7528\u4e8e\u8bbe\u5b9a\u6d6e\u70b9\u8fd0\u7b97\u6a21\u5f0f\uff0c\u5171\u4e09\u79cd\u9009\u62e9\n#            soft          \u8f6f\u4ef6\u5b9e\u73b0\n#            softfp        \u4f7f\u7528\u6d6e\u70b9\u8fd0\u7b97\u5668\u4f46\u4ee5\u8f6f\u65b9\u5f0f\u8c03\u7528\u534f\u8bae\n#            hard          \u4f7f\u7528\u6d6e\u70b9\u8fd0\u7b97\u5668\u4ee5FPU-specific\u8c03\u7528\u534f\u8bae\n#\n#           -mfpu\u7528\u4e8e\u6307\u5b9aFPU\u7c7b\u578b\uff0c\u6839\u636eMCU\u578b\u53f7\u786e\u5b9a\uff0c\u5177\u4f53\u53ef\u53c2\u7167gcc.pdf page\uff1a206\n#           \u8fdb\u884c\u8bbe\u5b9a\n\n# FP_FLAGS := -mfpu=fpv4-sp-d16\n# FP_FLAGS += -mfloat-abi=softfp\nFP_FLAGS :=\n\n# \u53c2\u6570\u540d\u79f0\uff1a\u5185\u6838\u53c2\u6570\n# \u53c2\u6570\u8bf4\u660e\uff1a\u7528\u4e8e\u8bbe\u5b9a\u7f16\u8bd1\u65f6\u4f7f\u7528\u7684\u5185\u6838\u578b\u53f7\u53ca\u6307\u4ee4\u96c6\u53c2\u6570\n\nARCH_FLAGS :=\nARCH_FLAGS := -mthumb\nARCH_FLAGS += -mcpu=cortex-m3\n\n# \u53c2\u6570\u540d\u79f0\uff1a\u8b66\u544a\u8bbe\u7f6e\n# \u53c2\u6570\u8bf4\u660e\uff1a\u7528\u4e8e\u8bbe\u5b9a\u7f16\u8bd1\u65f6\u4ea7\u751f\u8b66\u544a\u7684\u7ea7\u522b\u548c\u5185\u5bb9,\u90e8\u5206\u53c2\u6570C\u4e0eC++\u95f4\u4e0d\u517c\u5bb9\uff0c\u5177\u4f53\u7684\u53c2\u6570\u529f\n#          \u80fd\u53ca\u8bf4\u660e\u8bf7\u9605\u8bfbgcc\u8bf4\u660e\u4e66\u8fdb\u884c\u4e86\u89e3\n\nCWARN_FLAGS += -Wall -Wshadow\n#CWARN_FLAGS += -Wundef  -Wextra  -Wredundant-decls\nCWARN_FLAGS += -fno-common -ffunction-sections -fdata-sections\nCWARN_FLAGS += -Wimplicit-function-declaration  \n#CWARN_FLAGS += -Wmissing-prototypes\nCWARN_FLAGS += -Wstrict-prototypes\n\nCXXWARN_CXXFLAGS += -Wall -Wshadow\n#CXXWARN_CXXFLAGS += -Wundef  -Wextra  -Wredundant-decls\nCXXWARN_CXXFLAGS += -fno-common -ffunction-sections -fdata-sections\nCXXWARN_CXXFLAGS += -Weffc++\n\n# \u53c2\u6570\u540d\u79f0\uff1a\u8b66\u544a\u8bbe\u7f6e\n# \u53c2\u6570\u8bf4\u660e\uff1a\u7528\u4e8e\u8bbe\u5b9a\u7f16\u8bd1\u65f6\u4ea7\u751f\u8b66\u544a\u7684\u7ea7\u522b\u548c\u5185\u5bb9,\u90e8\u5206\u53c2\u6570C\u4e0eC++\u95f4\u4e0d\u517c\u5bb9\uff0c\u5177\u4f53\u7684\u53c2\u6570\u529f\n#          \u80fd\u53ca\u8bf4\u660e\u8bf7\u9605\u8bfbgcc\u8bf4\u660e\u4e66\u8fdb\u884c\u4e86\u89e3\nLDLIBS      += -Wl,--start-group -lc -lgcc -lnosys -Wl,--end-group\n\n\n#----------------------------- \u641c\u7d22\u5de5\u7a0b\u76ee\u5f55\u4e0b\u7684\u6e90\u4ee3\u7801 ---------------------------\n\nAS_SRC := $(shell find .\/$(TARGET_FOLDER)\/files_s -name '*.s')  \nAS_OBJ := $(AS_SRC:%.s=%.o)\n\nC_SRC := $(shell find .\/$(TARGET_FOLDER)\/files_c -name '*.c')  \nC_OBJ := $(C_SRC:%.c=%.o)  \n\nCXX_SRC := $(shell find .\/$(TARGET_FOLDER)\/files_cpp -name '*.cpp')  \nCXX_OBJ := $(CXX_SRC:%.cpp=%.o)\n\n\n#--------------------------------- \u53c2\u6570\u6574\u5408 ------------------------------------\n# C flags\nCFLAGS := $(OPT) $ $(CSTD) $(INC_FLAGS) $(FP_FLAGS) \nCFLAGS += $(DEFINES) $(ARCH_FLAGS) $(CWARN_FLAGS) -g\n\n# C++ flags\nCXXFLAGS := $(OPT) $ $(CSTD) $(INC_FLAGS) $(FP_FLAGS) \nCXXFLAGS += $(DEFINES) $(ARCH_FLAGS) $(CXXWARN_CXXFLAGS) -g \n\n# Linker flags\nLDFLAGS     := --static\nLDFLAGS     += -Wl,-Map=$(TARGET).map -Wl,--gc-sections\nLDFLAGS     += -T$(LDSCRIPT) $(ARCH_FLAGS) $(LDLIBS)\n\n# OBJ\nOBJ := $(RUN_PY) $(AS_OBJ) $(C_OBJ) $(CXX_OBJ)\n\n#-------------------------------- \u7f16\u8bd1\u5668\u8c03\u7528\u6307\u4ee4 --------------------------------\nPREFIX  := arm-none-eabi\n\nCC      := $(PREFIX)-gcc\nCXX     := $(PREFIX)-g++\nLD      := $(PREFIX)-gcc\nAR      := $(PREFIX)-ar\nAS      := $(PREFIX)-as\nOBJCOPY := $(PREFIX)-objcopy\nOBJDUMP := $(PREFIX)-objdump\nGDB     := $(PREFIX)-gdb\n\n\n#----------------------------------- \u7f16\u8bd1\u5bf9\u8c61 -----------------------------------\n# @python3 $(PYTHON_SCRIPT)\nall: help\n\n    @echo Have already runned python script, please do next e.g. make elf.\n\nelf: $(TARGET).elf\nbin: $(TARGET).bin\nhex: $(TARGET).hex\nlist: $(TARGET).list\nimages: $(TARGET).images\n\n%.images: %.bin %.hex %.list %.map\n    @echo \"*** $* images generated ***.\"\n\n%.bin: %.elf          \n    @echo \"  OBJCOPY $(*).bin.\"\n    $(Q)$(OBJCOPY) -Obinary $(*).elf $(*).bin\n\n%.hex: %.elf\n    @echo \"  OBJCOPY $(*).hex.\"\n    $(Q)$(OBJCOPY) -Oihex $(*).elf $(*).hex\n\n%.list: %.elf\n    @echo \"  OBJDUMP $(*).list.\"\n    $(Q)$(OBJDUMP) -S $(*).elf &gt; $(*).list\n\n%.elf %.map: $(OBJ) $(LDSCRIPT)\n    @echo \"  LD      $(TARGET).elf.\"\n    $(Q)$(LD) $(OBJ) $(LDFLAGS) -o $(TARGET).elf\n\n$(AS_OBJ): %.o:%.s\n    @echo \"  AS      $(*).s\"\n    $(Q)$(CC) $(ARCH_FLAGS) $(FP_FLAGS) -g -Wa,--no-warn -x assembler-with-cpp -o $(*).o -c $(*).s\n\n$(C_OBJ): %.o:%.c\n    @echo \"  CC      $(*).c\"\n    $(Q)$(CC) $(CFLAGS) -o $(*).o -c $(*).c\n\n$(CXX_OBJ): %.o:%.cxx\n    @echo \"  CXX     $(*).cpp\"\n    $(Q)$(CXX) $(CXXFLAGS) -o $(*).o -c $(*).cpp\n\nclean:\n    @echo \"CLEAN result folder\"\n    $(Q)$(RM) -f -r $(shell find .\/ -name '$(TARGET_FOLDER)')\n\ncleanobject:\n    @echo \"CLEAN $(*).o\"\n    @echo \"CLEAN $(*).d\"\n    @echo \"CLEAN $(*).elf\"\n    @echo \"CLEAN $(*).bin\"\n    $(Q)$(RM) $(shell find -name '*.o' -o -name '*.d' -o -name '*.elf' -o -name '*.bin') \n    @echo \"CLEAN $(*).hex\"\n    @echo \"CLEAN $(*).srec\"\n    @echo \"CLEAN $(*).list\"\n    @echo \"CLEAN $(*).map\"\n    $(Q)$(RM) $(shell find -name '*.hex' -o -name '*.srec' -o -name '*.list' -o -name '*.map') \n    @echo \"CLEAN generated.$(*)\"\n    $(Q)$(RM) $(shell find -name 'generated.*' -o -name '*.srec' -o -name '*.list' -o -name '*.map')\n\nhelp:\n    @echo The following are some of the valid targets for this Makefile:\n    @echo ... images\n    @echo ... elf\n    @echo ... bin\n    @echo ... hex\n    @echo ... list\n    @echo ... clean\n    @echo ... cleanobject\n    @echo ... help\n\n.PHONY: images clean elf bin hex list help cleanobject\n<\/code><\/pre>\n<h2>2.2. \u793a\u4f8b\u5de5\u7a0b\u6784\u5efa\u6559\u7a0b<\/h2>\n<h3>2.2.1. \u73af\u5883\u51c6\u5907<\/h3>\n<ul>\n<li>Linux \u73af\u5883\uff0c\u82e5\u4e3awindows\u4e5f\u53ef\u4ee5\uff0c\u4e0d\u8fc7\u9700\u8981\u8bfb\u8005\u81ea\u884c\u51c6\u5907\u5982\u4e0b\u63d0\u5230\u7684\u8f6f\u4ef6<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"http:\/\/qq353838430.gitee.io\/blog_picture\/2020\u5e74\u6c7d\u8f66\u7535\u5b50\u8f6f\u4ef6\u4e3b\u6d41\u6784\u5efa\u65b9\u6848\u8bb2\u89e3\/001.png\" alt=\"001\" \/><\/p>\n<ul>\n<li>\u5b89\u88c5gcc-arm-none-eabi \u7f16\u8bd1\u5668\uff0c\u7f16\u8bd1arm\u82af\u7247\u4ee3\u7801<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"http:\/\/qq353838430.gitee.io\/blog_picture\/2020\u5e74\u6c7d\u8f66\u7535\u5b50\u8f6f\u4ef6\u4e3b\u6d41\u6784\u5efa\u65b9\u6848\u8bb2\u89e3\/002.png\" alt=\"002\" \/><\/p>\n<p>\u53ef\u4ee5\u770b\u5230\u7b14\u8005\u5df2\u7ecf\u628a\u6e90\u6362\u6210\u6e05\u534e\u7684\u4e86\uff0c\u8fd9\u90e8\u5206\u53ef\u4ee5\u641cubuntu\u6362\u6e90\uff0c\u7f51\u4e0a\u6559\u7a0b\u6709\u5f88\u591a\uff0c\u4e0d\u8fc7\u8fd8\u662f\u8981\u63d0\u9192\u65b0\u5b89\u88c5linux \u7684\u540c\u5b66\u4e00\u5b9a\u8981\u8bb0\u5f97\u6362\u6e90\uff0c\u8fc7\u591a\u5c31\u4e0d\u597d\u76f4\u8bf4\u4e86\u3002\u5b89\u88c5\u5b8c\u6210\u540e\u68c0\u67e5\u7f16\u8bd1\u5668\u7248\u672c\u3002<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/qq353838430.gitee.io\/blog_picture\/2020\u5e74\u6c7d\u8f66\u7535\u5b50\u8f6f\u4ef6\u4e3b\u6d41\u6784\u5efa\u65b9\u6848\u8bb2\u89e3\/003.png\" alt=\"003\" \/><\/p>\n<ul>\n<li>\u5b89\u88c5\u5e76\u67e5\u770bmake\u5de5\u5177\u7248\u672c\uff0clinux\u7cfb\u7edf\u4e0b\u7684\u540c\u5b66\u5e94\u8be5\u4f1a\u514d\u53bb\u5b89\u88c5\uff0c\u76f4\u63a5\u67e5\u770b\u5c31\u597d\uff0cwin\u7cfb\u7edf\u4e0b\u7684\u540c\u5b66\u8fd8\u9700\u8981\u641c\u7d22 <code>windows\u4e0bmake\u5b89\u88c5<\/code>\uff0c\u81ea\u884c\u5b89\u88c5make<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"http:\/\/qq353838430.gitee.io\/blog_picture\/2020\u5e74\u6c7d\u8f66\u7535\u5b50\u8f6f\u4ef6\u4e3b\u6d41\u6784\u5efa\u65b9\u6848\u8bb2\u89e3\/004.png\" alt=\"004\" \/><\/p>\n<ul>\n<li>\u5b89\u88c5python\uff0cpy\u6559\u7a0b\u7f51\u4e0a\u975e\u5e38\u4e30\u5bcc\uff0c\u8fd9\u91cc\u5c31\u4e0d\u5728\u7ec6\u8bb2<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"http:\/\/qq353838430.gitee.io\/blog_picture\/2020\u5e74\u6c7d\u8f66\u7535\u5b50\u8f6f\u4ef6\u4e3b\u6d41\u6784\u5efa\u65b9\u6848\u8bb2\u89e3\/005.png\" alt=\"005\" \/><\/p>\n<ul>\n<li>\u6d4b\u8bd5makefile\uff0c\u5728\u793a\u4f8b\u5de5\u7a0b\u4e0b\u76f4\u63a5\u8f93\u5165 <code>make<\/code> \u6307\u4ee4<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"http:\/\/qq353838430.gitee.io\/blog_picture\/2020\u5e74\u6c7d\u8f66\u7535\u5b50\u8f6f\u4ef6\u4e3b\u6d41\u6784\u5efa\u65b9\u6848\u8bb2\u89e3\/006.png\" alt=\"006\" \/><\/p>\n<h3>2.2.2. \u76ee\u6807\u6784\u5efa<\/h3>\n<p>\u793a\u4f8bmakefile\u4e2d\u53ef\u4ee5\u5206\u522b\u751f\u6210 elf bin hex list\u6587\u4ef6\uff0c\u4e5f\u53ef\u4ee5\u4e00\u6b21\u6027\u5168\u90e8\u751f\u6210\u8fd9\u4e9b\u6587\u4ef6(images \u547d\u4ee4)\uff0c\u63a5\u4e0b\u6765\u4f7f\u7528 <code>make images<\/code> \u547d\u4ee4\u751f\u6210\u6240\u6709\u4e8c\u8fdb\u5236\u6587\u4ef6\u3002<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/qq353838430.gitee.io\/blog_picture\/2020\u5e74\u6c7d\u8f66\u7535\u5b50\u8f6f\u4ef6\u4e3b\u6d41\u6784\u5efa\u65b9\u6848\u8bb2\u89e3\/007.png\" alt=\"007\" \/><\/p>\n<p>\u672c\u793a\u4f8b\u8fd8\u63d0\u4f9b\u4e86\u7f16\u8bd1\u6587\u4ef6\u6e05\u9664\u547d\u4ee4\uff0c\u53ef\u4ee5\u4f7f\u7528 <code>make cleanobject<\/code> \u6e05\u9664\u7f16\u8bd1\u751f\u6210\u7684\u76ee\u6807\u6587\u4ef6\u3002<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/qq353838430.gitee.io\/blog_picture\/2020\u5e74\u6c7d\u8f66\u7535\u5b50\u8f6f\u4ef6\u4e3b\u6d41\u6784\u5efa\u65b9\u6848\u8bb2\u89e3\/008.png\" alt=\"008\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5f53\u524d\uff0c\u5728\u6c7d\u8f66\u7535\u5b50\u8f6f\u4ef6\u4ea7\u54c1\u5f00\u53d1\u4e2d\uff0c\u7531\u4e8e\u8f6f\u4ef6\u67b6\u6784\u5212\u5206\u8d8a\u6765\u8d8a\u6cfe\u6e2d\u5206\u660e\uff0cMCAL BSW Bootloader \u90e8\u5206CDD \u590d\u6742\u8bbe\u5907\u9a71\u52a8\u7b49\u8981\u4e0d\u5c31\u662f\u76f8\u5bf9\u72ec\u7acb\uff0c\u8981\u4e0d\u5c31\u662f\u4e0d\u540c\u7ec4\u7ec7\u534f\u540c\u5f00\u53d1\uff0c\u6216\u8005\u76f4\u63a5\u8d2d\u4e70\u4f9b\u5e94\u5546\u7684\u4ee3\u7801\uff0c\u6240\u4ee5\u8d8a\u6765\u8d8a\u591a\u7684\u5f00\u53d1\u56e2\u961f\u91c7\u7528 \u6e90\u7801\u548c \u4e0d\u540c\u7684\u9759\u6001\u94fe\u63a5\u5e93\u8fdb\u884c\u534f\u540c\u7f16\u8bd1\u7684\u65b9\u5f0f\u6784\u5efa\u76ee\u6807\u6587\u4ef6\u3002<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"_links":{"self":[{"href":"https:\/\/jiangshibo.cn\/index.php\/wp-json\/wp\/v2\/posts\/59"}],"collection":[{"href":"https:\/\/jiangshibo.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jiangshibo.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jiangshibo.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jiangshibo.cn\/index.php\/wp-json\/wp\/v2\/comments?post=59"}],"version-history":[{"count":3,"href":"https:\/\/jiangshibo.cn\/index.php\/wp-json\/wp\/v2\/posts\/59\/revisions"}],"predecessor-version":[{"id":80,"href":"https:\/\/jiangshibo.cn\/index.php\/wp-json\/wp\/v2\/posts\/59\/revisions\/80"}],"wp:attachment":[{"href":"https:\/\/jiangshibo.cn\/index.php\/wp-json\/wp\/v2\/media?parent=59"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jiangshibo.cn\/index.php\/wp-json\/wp\/v2\/categories?post=59"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jiangshibo.cn\/index.php\/wp-json\/wp\/v2\/tags?post=59"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}