stm32中程序运行的时候,是在ram中还是flash中 stm32程序里定义的数组是存到Flash里还是SRAM

stm32\u4e2d\u7684\u7a0b\u5e8f\u662f\u5728RAM\u91cc\u8fd8\u662fflash\u91cc\u6267\u884c

\u4ee3\u7801\u662f\u4f60\u901a\u8fc7\u4e32\u53e3 \u6216\u8005jtag\uff0c\u4e0b\u8f7d\u5230flash\uff08\u5f53\u7136\u4ee3\u7801\u53ef\u4ee5\u901a\u8fc7jtag\u76f4\u63a5\u4e0b\u5230ARM\uff0c\u8fdb\u884c\u5728\u7ebf\u8c03\u8bd5\uff09\uff0c\uff0c\u4ee3\u7801\u7684\u6267\u884c\u6700\u7ec8\u90fd\u662f\u8981\u62f7\u8d1d\u5230ARM\u4e2d\u6267\u884c\u2026\u2026

ARM\u82af\u7247\u590d\u4f4d\u540e\u90fd\u662f\u4ece0x0000 0004\u5730\u5740\u542f\u52a8\u3002STM32\u4f1a\u8f6c\u5165\u4e00\u6bb5\u81ea\u5df1\u7684bootloader\u3002\u7136\u540e\u6839\u636eBOOT\u5f15\u811a\uff0c\u9009\u62e9\u542f\u52a8\u4f4d\u7f6e\u3002\u5982\u679c\u662fFLASH\u5219\u8df3\u8f6c\u52300x0800 0000\uff08\u4e0d\u77e5\u9053\u5730\u5740\u6709\u6ca1\u8bb0\u9519\uff09\u6267\u884c\u3002
\u7a0b\u5e8f\u4e00\u822c\u6307\u5b9aFLASH\u7684\u5730\u5740\u662f\u94fe\u63a5\u5730\u5740\uff08ARM\u4f7f\u7528\u7edd\u5bf9\u5730\u5740\uff0c\u8fd0\u884c\u548c\u94fe\u63a5\u5730\u5740\u5fc5\u987b\u4e00\u81f4\uff09\u3002
\u6570\u7ec4\u52062\u7c7b\uff0c\u7528const\u6807\u793a\u7684\u5e38\u91cf\u6570\u7ec4\uff0c\u666e\u901a\u6570\u7ec4\u3002
const\u6570\u7ec4\u4e00\u822c\u4f4d\u4e8eFLASH\u4e2d\u7684\u4e00\u4e2a\u7279\u5b9a\u4f4d\u7f6e\u3002
\u666e\u901a\u6570\u7ec4\u4f4d\u4e8e\u5806\uff0c\u4e00\u822c\u662fRAM\u7684\u4f4e\u5730\u5740\u5f80\u4e0a\u751f\u957f\u3002
\u6570\u7ec4\u7684\u521d\u503c\u5b58\u5728FLASH\u4e2d\uff0c\u5373RODATA\u6bb5\uff0c\u5f00\u673a\u65f6\u901a\u8fc7\u4e00\u6bb5\u7a0b\u5e8f\uff08\u901a\u5e38\u662f\u6c47\u7f16\uff09 \uff0c\u62f7\u8d1d\u5230\u5730\u5740\u7684RAM\u4e2d\u3002
\u5982\u679c\u6570\u7ec4\u6ca1\u7ed9\u521d\u503c\uff0c\u4f1a\u901a\u8fc7bss\u6bb5\u5168\u90e8\u6e05\u62100\u3002
\u5982\u679c\u662f\u7528KEIL\u3001IAR\u7b49\u4e0d\u7528\u5173\u5fc3\u8fd9\u4e9b\u3002\u56e0\u4e3a\u8fd9\u4e9b\u8bbe\u7f6e\u5efa\u7acb\u5de5\u7a0b\u65f6\u5019\u90fd\u5df2\u7ecf\u505a\u597d\u4e86\uff08\u94fe\u63a5\u5730\u5740&\u542f\u52a8\u6587\u4ef6\uff09\u3002

\u4ece\u521d\u5b66\u8005\u4f7f\u7528\u7684\u89d2\u5ea6\u5efa\u8bae\uff0c\u6570\u7ec4\u8981\u8d4b\u521d\u503c\uff0c\u5373\u4f7f\u662f0\u3002

Table 7. Boot modes
Boot mode selection pins Boot mode Aliasing
BOOT1 BOOT0
x 0 Main Flash memory Main Flash memory is selected as boot space
0 1 System memory System memory is selected as boot space
1 1 Embedded SRAM Embedded SRAM is selected as boot space
它有两个引脚来控制启动方式
一般都用第一种 选择flash启动 我们一般都是下载到flash 中的

用JLINK在线仿真时 是下载到SRAM中的 但是也不需要改启动方式 SRAM中掉电程序就会消失 而flash是属于ROM类型的存储器 掉电不会丢失

  1. STM32一般是不支持跑外部的SPI Flash 中的程序,因为STM32没有XIP功能,STM32的程序可以在RAM中,也可以在内部Flash中,内部Flash一般是Nor Flash并且是直接挂接在总线上的,所以CPU可以像RAM一样直接访问内部Flash,如果是从内部Flash启动运行起来后代码依旧在Flash中,只是数据和堆栈在内存中,如果是从RAM启动(使用JLink下载)代码和数据都在RAM中;

  2. XIP的原理其实是从外部Flash中读取一定代码放于内部cache中再运行;

  3. 如果要运行外部Flash中的程序,一般做法是先写一段boot程序放在内部Flash,这段程序启动后初始化组件,然后从外部SPI Flash将代码拷贝到内存,然后使用跳转指令,跳转到指定位置执行,这就需要你完整的了解程序的构成,才能更好的把握程序的读取,跳转,RAM空间的规划相关内容;

  4. 如果是储存空间不够可以使用第三点的方法,RAM不够的话一般是优化变量,减小数组等。

  5. 以上纯属个人观点。



  • stm32涓▼搴忚繍琛岀殑鏃跺,鏄鍦╮am涓繕鏄痜lash涓
    绛旓細涓鑸兘鐢ㄧ涓绉 閫夋嫨flash鍚姩 鎴戜滑涓鑸兘鏄笅杞藉埌flash 涓鐨 鐢↗LINK鍦ㄧ嚎浠跨湡鏃 鏄笅杞藉埌SRAM涓殑 浣嗘槸涔熶笉闇瑕佹敼鍚姩鏂瑰紡 SRAM涓帀鐢绋嬪簭灏变細娑堝け 鑰宖lash鏄睘浜嶳OM绫诲瀷鐨勫瓨鍌ㄥ櫒 鎺夌數涓嶄細涓㈠け
  • STM32涓嶅悓鍦板潃閲鐨勭▼搴忚繍琛岀殑鏄鍝竴涓
    绛旓細STM32涓嶅悓鍦板潃閲鐨勭▼搴忚繍琛岀殑LED0=0杩欐潯C鎸囦护缂栬瘧鍣ㄦ妸瀹冭浆鎹㈡垚浜3鏉℃眹缂栨寚浠OVS銆丩DR銆丼TR锛岃繖涓夊彞姹囩紪鍒嗗埆瀵瑰簲鐨勬満鍣ㄧ爜灏辨槸2000銆490B銆6008銆係TM32涓嶅悓鍦板潃涓鑸绠楁満杩涜宸ヤ綔鏃讹紝棣栧厛瑕侀氳繃澶栭儴璁惧鎶婄▼搴忓拰鏁版嵁閫氳繃杈撳叆鎺ュ彛鐢佃矾鍜屾暟鎹荤嚎閫佸叆鍒板瓨鍌ㄥ櫒锛岀劧鍚庨愭潯鍙栧嚭鎵ц銆備絾鍗曠墖鏈轰腑鐨勭▼搴忎竴鑸簨鍏...
  • 鍏充簬绋嬪簭鏄鎬庢牱鍦STM32閲岃繍琛岀殑,鏈夌偣鍥版儜
    绛旓細0000H鍗曞厓涓凡瀛樻斁74H锛0001H鍗曞厓涓凡瀛樻斁E0H銆傚綋鍗曠墖鏈哄紑濮杩愯鏃讹紝棣栧厛鏄繘鍏ュ彇鎸囬樁娈碉紝鍏舵搴忔槸锛1 绋嬪簭璁℃暟鍣鐨鍐呭锛堣繖鏃舵槸0000H锛夐佸埌鍦板潃瀵勫瓨鍣紱2 绋嬪簭璁℃暟鍣ㄧ殑鍐呭鑷姩鍔1锛堝彉涓0001H锛夛紱3 鍦板潃瀵勫瓨鍣ㄧ殑鍐呭锛0000H锛夐氳繃鍐呴儴鍦板潃鎬荤嚎閫佸埌瀛樺偍鍣紝浠ュ瓨鍌ㄥ櫒涓湴鍧璇戠爜鐢佃窡锛屼娇鍦板潃涓0000H鐨...
  • stm32绋嬪簭鏄湪flash杩愯杩樻槸ram杩愯
    绛旓細閮芥槸浠嶧lash寮濮鎵ц銆傚彲浠ュ弬鑰 bbs.csdn.net/wap/topics/392020439
  • stm32涓殑绋嬪簭鏄鍦≧AM閲岃繕鏄痜lash閲屾墽琛
    绛旓細鍏跺疄鍦stm32閲岄潰flash灏卞寘鎷琑OM鍜孯AM锛屽畠浠垎閰嶇殑澶у皬鍙互鍦ㄥ紑鍙戠幆澧冮噷闈㈣繘琛岄夋嫨
  • stm32寮鍙戞澘鎬庝箞缁撴潫绋嬪簭
    绛旓細1銆佷娇鐢ㄧ殑鏄疭TMCubeIDE杩涜寮鍙戯紝鍙互鍦ㄩ珮灞绋嬪簭杩愯鐨杩囩▼涓偣鍑籌DE鐣岄潰涓婃柟鐨勨滃仠姝⑩濇寜閽紝鎴栬呯洿鎺ヤ娇鐢ㄥ揩鎹烽敭鈥淐trl+C鈥濆仠姝唬鐮佺殑杩愯銆2銆侀氳繃缂栧啓浠f垰鏂楄鐮佸疄鐜STM32鐨鎺у埗锛屽彲浠ュ湪main鍑芥暟涓姞鍏ヤ竴涓惊鐜鍙ワ紝姣斿while(1)锛岀劧鍚庡湪闇瑕佸仠姝㈢▼搴忚繍琛鏃讹紝鍦ㄥ惊鐜鍙ュ唴娣诲姞涓涓潯浠跺垽鏂紝骞跺皢鍏惰...
  • 灏忕櫧涓鏋,鐪STM32绋嬪簭,涓嶆槑鐧,鍦╩ain.c涓,閲岄潰鏈夊涓嚱鏁
    绛旓細鈥﹀湪C璇█涓紝蹇呴』鏈変笖浠呮湁涓涓富鍑芥暟锛屽悕涓簃ain()锛屾墍鏈鐨勭▼搴閮戒粠main()寮濮嬫墽琛岋紝鏃犺main()鍦ㄧ▼搴忎腑鐨勫摢涓綅缃傚湪C璇█绋嬪簭涓紝浠g爜鏄粠涓婂線涓鎵ц鐨锛堣繘鍑轰腑鏂櫎澶栵級銆傚缓璁ゼ涓伙紝鍏堝瀛璇█锛岀劧鍚庣帺鐜51绛夌瓑浣庣鍗曠墖鏈猴紝鐒跺悗鍐嶈浆鍚慡TM32杩欑被楂樼MCU锛屼竴涓嬪瓙灏辩帺STM32锛瀹规槗钂欍
  • stm32绋嬪簭澶勫湪while姝诲惊鐜鐨勬椂鍊纭欢瀹氭椂鍣ㄨ繕鍦ㄨ窇鍚?
    绛旓細鍦鐨.浣犳墍缂栬緫鐨勪富绋嬪簭,鍙槸澶х郴缁熺殑涓涓瓙閮ㄥ垎.纭欢瀹氭椂鍣ㄨ繕浼氳褰曟椂閽熶俊鎭,缁х画鍙樺寲.
  • STM32 ,鐑绋嬪簭鐨勬椂鍊,閲囩敤ISP鍜孞TAG鏈変粈涔堜笉鍚屼箞?闂殑鏄偅涓▼搴忓湪鏉垮瓙...
    绛旓細浣犲鐨ISP鏄覆鍙SP涔堬紵STM32涓鑸敤JLINK鐑у啓锛屾帴鍙f槸JTAG锛屾病鏈夌殑璇濓紝涓插彛涔熻兘鐑э紝杩欎袱绉嶆柟寮忕殑BOOT0鍜孊OOT1閰嶇疆涓嶅悓锛屼絾鏄杩愯璧锋潵閮芥槸涓鏍风殑銆
  • 鍚勪綅宓屽叆寮忛珮鎵,鎴戞兂闂竴涓,STM32涓,绯荤粺瀛樺偍鍣,鐢ㄦ埛闂瓨,SRAM鍒板簳鎸囩殑...
    绛旓細绯荤粺瀛樺偍鍣ㄦ槸涓鍧楃嫭绔嬬殑rom锛岀敤鏉ュ瓨鍌ㄥ惎鍔ㄤ唬鐮侊紝瀹炵幇閫氳繃涓插彛銆乽sb銆佺綉鍙g瓑瀵瑰崟鐗囨満鐨勭儳鍐欍傜敤鎴烽棯瀛樹篃鏄痳om锛岀敤鏉ュ瓨鍌ㄤ綘缂栧啓鐨勭▼搴銆俿ram灏辨槸鐢ㄦ潵淇濆瓨绋嬪簭杩愯鏃浜х敓鐨勪复鏃舵暟鎹殑闅忔満瀛樺偍鍣ㄣ
  • 扩展阅读:嵌入式stm32项目实例 ... stm32延时流程框图 ... stm32为什么不建议学 ... stm32的蜂鸣器怎么用 ... stm32智能窗帘控制系统 ... stm32编程入门图解 ... 派诺stm32配置说明书 ... stm32 微秒延时 ... stm32编程的一般步骤 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网