holtek bs84c12A 单片机开发总结
由于之前沒有接觸過holtek的單片機, 所以最近半個多月拼命加班加點項目基本上完成。從零開始到項目完成,期間遇到了一些問題,記錄下來一方面方便以后自己查看,二來也方便準備使用holtek的工程師提供方便。由于我自己只負責軟件,所以接下去就講下開發環境的搭建。
開發環境搭建
編輯編譯調試是官方的HT-IDE3000,仿真器用的Elink,單片機的程序用C開發,使用代理商提供的觸摸按鍵庫。(這些資料我后面都整體好提供下載)。軟件的安裝什么就不說了,直接就講怎么和自己的硬件連接,進行在線調試。
開發環境使用
關于IDE3000的使用,安裝好后可以在軟件的幫助部分,查看一些V3進行C語言編程的對應內容; ELink的話有個<Elink仿真器使用說明>,關鍵就是“”BS84C12A_20150807_LIBV413--V3“”這個軟件包,后續的開發都在這個軟件包的基礎上進行(觸摸按鍵調用這個軟件包提供的庫就方便實現按鍵功能),具體怎么使用這個軟件包,可以看他對應的使用手冊。
關于使用Elink在線仿真,要注意就是 要使用對應的支持在線調試的芯片, 比如我選的BS84C12A 對應的仿真芯對應的EV芯片。
關于編程
使用上面提到的軟件包進行編程,其實就是已經幫我們搭建好了框架,void USER_PROGRAM_INITIAL()這個函數里面就是硬件初始化,void USER_PROGRAM()函數就是單片機程序需要循環執行的內容。
自己開發過程中編程時候遇到的問題主要如下:
1,堆棧溢出。
解決,查數據手冊可以知道,我選的BS84C12A是硬件堆棧5層,我們調用的觸摸按鍵庫,它的手冊上已經說明軟件包占用了2層的堆棧,因此留給我們自己用的堆棧只有3層。比如我的程序,自己使用定時器中斷占用了一層,那么?USER_PROGRAM()之后,自己的代碼只能再調用一層函數。 再進行函數調用的話,就會導致堆棧溢出而死機。
2,ROM不足
解決,優化代碼功能開啟來編譯器選項中,同時關鍵的變量都帶上volatile,相同功能的代碼就復用起來,盡量合理用數組來減少代碼量。后面自己發現,我程序里面要是進行了乘法,乘以0.55,ROM的使用量居然多出8%,而且還容易堆棧溢出,所以盡量不要用乘法吧。
3,RAM不足
bank0是編譯器自動分配的,bank1 ,bank2,好像是需要自己手動指定。 就是當編譯器出錯說RAM不足, 你就一些數組放到bank1中。下面就是我自己的程序中的定義方式 0X1B4, 0X1代表BANK1,B4代表地址,數據手冊上有寫bank1的地址是0x80~0XFF
static volatile unsigned int ?uiKeyTimeCnt[8] __attribute__ ((at(0x1b4))); //按鍵去抖動延時計數器
static volatile unsigned int ?uiKeyCtntyCnt[8] __attribute__ ((at(0x1c4))); ?//按鍵連續觸發的間隔延時計數器
static volatile unsigned char ucKeyLock[8] __attribute__ ((at(0x1d4))); //按鍵觸發后自鎖的變量標志
基本上就是這些, 如果開發中還有什么問題可以聯系我QQ236106303,或者找代理商的技術支持。
觸摸函數庫軟件包
20170929更新:
最近做了一塊開發板,方便各位準備使用BS84C12A做觸摸開發的朋友。淘寶購買
使用手冊是自己按照一個個模塊編寫的,另外后面可以開源空氣炸鍋項目的源碼。。。 歡迎大家選購
總結
以上是生活随笔為你收集整理的holtek bs84c12A 单片机开发总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32两轮自平衡小车——PID
- 下一篇: D类水声功放模块简介