久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 18480|回復: 1
收起左側

基于STVD+COSMIC編譯過程中的幾個常見問題

[復制鏈接]
ID:98618 發表于 2015-12-9 00:17 | 顯示全部樓層 |閱讀模式
本文作者:milershao
很多人選用STVD+COSMIC做為stm8 系列MCU產品開發的IDE,在編譯調試過程中常常遇到些問題。這里我稍加整理,分享幾個硬件線路和軟件語法以外的話題。拋磚引玉,細節請自行研究相關手冊。

一、零頁內存區出界溢出的問題。

對于這個問題一般會提諸如bsct/ubsct size overflow……


這個提示告知默認的零頁區放不下現有全局變量或靜態變量,導致溢出。這里的RAM零頁數據區,即00-0xff區域。至于BSCT/UBSCT是什么意思在COSMIC 編譯手冊里有講。關于各STM8芯片的存儲分配請看數據手冊里的MEMORY MAP.


上面截圖來自于COSMIC 里的編譯手冊里的相關描述。


上面截圖來自于STVD+COSMIC 編譯環境的相關配置頁面。

解決這個問題比較簡潔的辦法有兩種:

1、把大部分全局變量或靜態變量前冠以@near, 保留部分使用頻繁的數據在零頁區;


上面截圖來自于COSMIC 里的編譯手冊里存儲模式的相關描述。


2、 在編譯配置那里將堆棧模式改為長堆棧模式,數據默認放在0x100以上的區域,把需要放在0頁區的變量前冠以@TINY。操作如下圖所示。


二、數據存儲區溢出話題。

數據存儲區溢出是指除了堆棧的以外的RAM空間不足以存放現有全局變量或靜態變量。一般有諸如.DATA/.BSS size overflow的提示。


如下圖,紅色RAM空間存放各種全局變量或靜態變量,灰色區用作堆棧。


上面截圖來自于STM8S參考手冊里的相關描述。

假設現有變量數據不能壓縮精簡,那就嘗試將堆棧區域壓縮。比方將下圖中的0x1ff改為0x2ff,具體改多少要結合你實際應用和芯片本身RAM空間大小,滿足需求就好。當然如果RAM空間跟你實際需求相差甚遠,自然得想別的辦法了。


順便提下,STM8的堆棧是向下生長的,或者是從高位地址往低位地址壓入數據的。起始棧頂一般默認為RAM最大地址處。

三、一個跟程序代碼編譯優化有關的話題

ST官方也為STM8各系列提供了參考標準外設固件庫,里面有大量的外設操作庫函數。在利用庫函數編程時,有時會發現并沒有寫幾句代碼,結果生成的目標文件很大,明顯不太正常。這個可能在C Compiler的優化那個地方選擇不合適,要打開SPLIT選項。

下面有兩幅圖,找了個簡單例程測試下。main()里就一個GPIO讀端口,外加TIM1 的默認設置函數和配置函數。

沒打開SPLIT選項時,生成的程序代碼為4965 Byte,打開SPLIT選項后生成的程序代碼是548 Byte,二者的常量代碼均為124 Byte。很明顯,開與不開相差甚遠。


上圖是優化配置里的SPLIT項關閉時的情形。


上圖是優化配置里的SPLIT項打開時的情形。

注:

1、關于SPLIT選項的說明,COSMIC手冊里有描述。

2、開與不開SPLIT項的機器碼文件大小差別也得看你具體調用的庫函數和實際應用,并非總是跟上面的例子那樣懸殊。

四、中斷矢量文件話題。

一般來說,不論你自己新建工程還是利用ST官方庫的模板建立工程,項目里總會自動生成一個中斷矢量文件 stm8_interrupt_vector.c。這里面其實就是放的一個常量表,即STM8芯片各個中斷矢量的入口地址。


有的人希望使用自己的中端矢量名字,想把這個stm8_interrupt_vector.c拿掉,比方說改換為vector.c 。發現怎么改都不行。每次改完編譯,stm8_interrupt_vector.c如幽靈般的又回來了。

其實,這里是可以修改的,但要LINKER 配置的那個地方同步修改,就像下方圖示那樣。好奇的話可以去試試。


另外,不建議在這個矢量文件里寫中斷函數或其它函數,不然有時可能會出現些讓你找不著北的奇怪問題。

五、斷言函數出錯提示問題。

這個問題一般是剛接觸STM8開發的人使用庫過程中才遇到的。他把main.c里的void assert_failed(uint8_t* file, uint32_t line) 函數體刪掉了導致的。

一般出錯時有如下提示:


這個函數作什么用就不用解釋了,建議你先不要急于刪它。不想要時,就在stm8s_conf.h文件里把 #define USE_FULL_ASSERT (1)注釋后即可刪除相關代碼。

回復

使用道具 舉報

ID:321156 發表于 2019-4-21 18:09 | 顯示全部樓層
贊,謝謝樓主的經驗分享
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久99久久98精品免观看软件 | 欧美精品成人一区二区三区四区 | 欧美日韩在线一区 | 91福利影院 | 日韩欧美亚洲 | 在线一区 | 国产剧情一区 | 欧美一区二区三区视频 | 97国产精品视频 | 久久久www成人免费无遮挡大片 | 国产乱码精品一区二区三区五月婷 | 福利片在线 | 欧美区在线 | 久久精品亚洲 | 中国av在线免费观看 | 国产精品欧美一区二区三区不卡 | 99久久99久久精品国产片果冰 | 在线观看黄色电影 | 亚洲福利| 成年人免费在线视频 | 一级黄色在线 | 欧美精品一区二区在线观看 | 精产国产伦理一二三区 | 亚洲一区二区不卡在线观看 | 亚洲日本激情 | 国产精品国产成人国产三级 | 久久综合伊人 | 国产在线拍偷自揄拍视频 | 伦理二区| 在线播放国产一区二区三区 | 欧美精品一区二区三区蜜桃视频 | 久久久久久久久99 | 亚洲精品视频在线播放 | 欧美日韩不卡合集视频 | 欧美一区二区免费视频 | 色综合久久天天综合网 | 日韩一级不卡 | 色中文在线 | 亚洲激情一区二区三区 | 丁香一区二区 | 日本久草|