深圳單片機開發公司英銳恩的單片機芯片采用的是C語言編程,單片機芯片內存主要分為代碼段(code),數據段(data)和堆棧(stack)。
代碼段放程序代碼,屬于只讀內存。數據段存放全局變量,靜態變量,常量等,堆里存放自己malloc或new出來的變量,其他變量就存放在棧里,堆棧之間空間是有浮動的。
數據段的內存會到程序執行完才釋放。調用函數先找到函數的入口地址,然后計算給函數的形參和臨時變量在棧里分配空間,拷貝實參的副本傳給形參,然后進行壓棧操作,函數執行完再進行彈棧操作。字符常量一般放在數據段,而且相同的字符常量只會存一份。
單片機芯片內存分成5個區,它們分別是堆、棧、自由存儲區、全局/靜態存儲區和常量存儲區。
1、棧區(stack):FIFO就是那些由編譯器在需要的時候分配,在不需要的時候自動清除的變量的存儲區。里面的變量通常是局部變量、函數參數等。
2、堆區(heap):就是那些由new分配的內存塊,它們的釋放編譯器不去管,由我們的應用程序去控制,一般一個new就要對應一個delete。如果程序員沒有釋放掉,那么在程序結束后,操作系統會自動回收。
3、自由存儲區:就是那些由malloc等分配的內存塊,它和堆是十分相似的,不過它是用free來結束自己的生命。
4、全局/靜態存儲區:全局變量和靜態變量被分配到同一塊內存中,在以前的C語言中,全局變量又分為初始化的和未初始化的,在C++里面沒有這個區分了,他們共同占用同一塊內存區。
5、常量存儲區:這是一塊比較特殊的存儲區,它們里面存放的是常量,不允許修改(當然,你要通過非正當手段也可以修改,而且方法很多)
在函數函數中定義的變量通常是在棧上,用malloc、calloc等分配內存的函數分配得到的就是堆上。在所有函數體外定義的是全局量,加了static修飾符后不管在哪里都存放在靜態區,在所有函數體外定義的static變量表示在該文件中有效,不能extern到別的文件中,在函數體內定義的static表示只在函數體內有效。
深圳市英銳恩科技有限公司推出的單片機芯片堆棧最高達到8,保證單片機芯片工作的過程中遇到中斷源,完好保存中斷之前的信息,采用低功耗特性CMOS 技術,全靜態設計,具有低功耗、高性能的特性。