原创 KeilC中的混合語言編程

2006-12-4 09:43 3856 3 3 分类: MCU/ 嵌入式


   大家對Keil C應該已經非常熟悉了,但是現在看起來用C語言的往往比用ASM的人多一些。而即使有些一直用ASM的人卻對C不大了解。
  從我個人的角度來看,C語言有ASM不可比擬的優勢。主要體現在它的可讀性非常強,因此對於整理程序員的思路,以及處理複雜的算法和數據結構有著天然的優勢。ASM由於是機器語言,C語言在程序時間和代碼效率的控制上有難以與其比擬。
  但是在複雜工業控制方面,卻往往需要兩者兼顧,如果只是用C語言,則無法滿足控制系統中的時間和效率的要求;若只是用ASM語言,則完成一個大項目會非常花時間,同時代碼的維護和升級也異常的困難。
  因此本人在此將個人的混合語言編程的經驗寫下來,以省卻大家的摸索時間。
  一個合理的程序,應該是程序的主體用C來完成,而對時間和效率敏感的部分用ASM完成。因此,個人建議將某些重要的子程序用ASM封裝成C代碼的形式,如此即可兼顧可讀性和效率。
  所以,問題的關鍵在於如何將ASM程序M封裝成C代碼。簡單來說一句話,那就是善用Keil強大的編譯器功能。Keil C具有可以將C語言翻譯成彙編的功能。因此大家只要將那些關鍵代碼用C語言寫出函數框架(記得一定要在函數實現中調用所有的入口和出口參數,以及所需要用到的系統函數,如此方可清晰的看到Keil對參數和系統函數的調用規則),然後右鍵此C文件,按圖


点击看大图点击看大图


所示進行選擇。然後編譯此C文件。
  用Keil打開產生的.SRC文件,此即對應此.C文件生成的彙編文件,我們可以對此文件進行仔細的分析來了解其函數封裝規則。如此,即可實現 "魚和胸章得兼"。如果對此產生的文件有不明白的地方,我們可以打開Keil自帶的"C51 User's Guide",那裡會有更加詳細的說明。
  同理,對於IAR等其他編譯器,大家也可以試試其是否有同樣的ASM生成功能,如果有的話,嘿嘿,就一切都好辦了。哈哈。希望此文可以對大家在混合語言編程方面有所幫助。


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
3
关闭 站长推荐上一条 /4 下一条