嵌入式C语言编程要点教程.ppt

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式C语言编程要点教程

嵌入式C语言编程要点;说明: (1)无论8位还是32位系统中,99%以上的代码是用C语言完成的。只有不到1%的代码是必须用汇编完成的。 (2)在ARM系统中启动引导程序bootloader可分为两大段,第一段用汇编完成,主要是初始化必要的硬件(关看门狗、关中断、设置系统时钟、初始化内存控制器、初始化各模式堆栈指针、设置缺省中断处理函数、为C语言准备环境)第二段用C语言完成(主要包括进一步的初始化硬件外设、代码复制(解压)、准备参数、引导系统启动、甚至网络下载代码、shell等功能);(1)嵌入式C语言指针对绝对地址的访问方法 #define rBWSCON (*(volatile unsigned *)0x1C80000) #define rUTXH0 (*(volatile unsigned char *)0x1D00023) unsigned int tmp; tmp=rBWSCON; rBWSCON = 0x3f478; (2)嵌入式C语言函数指针的使用 #define DOWNLOAD_ADDR 0x04c00000 void (* restart)(void)=(void(*)(void)0x0); void (* run)(void)=(void (*)(void)DOWNLOAD_ADDR); (3)嵌入式中断函数的声明 void __irq IRQ_Eint1(void) { //C语言代码 };#define BEEPCON 0 /* P0.7引脚控制B1,低电平蜂鸣 */ /**************************************************************************** * 名称:IRQ_Eint1() * 功能:外部中断EINT1服务函数,取反B1控制口。 ****************************************************************************/ void __irq IRQ_Eint1(void) { uint32 i; i = IO0SET; // 读取当前B1控制值 if( (iBEEPCON)==0 ) // 控制B1输出取反 { IO0SET = BEEPCON; } else { IO0CLR = BEEPCON; } EXTINT = 0x02; // 清除EINT1中断标志 VICVectAddr = 0; // 向量中断结束 } ;/**************************************************************************** * 名称:main() * 功能:初始化外部中断1(EINT1)为向量中断,并设置为下降沿触发模式,然后等待外部中断。 * 说明:在STARTUP.S文件中使能IRQ中断(清零CPSR中的I位)。 ****************************************************************************/ int main(void) { PINSEL0 = 0 // 设置管脚连接,P0.14设置为EINT1 IO0DIR = BEEPCON; // 设置B1控制口为输出,其它I/O为输入 EXTMODE = 0x02; // 设置EINT1中断为边沿触发模式 EXTPOLAR = 0x00; // 设置EINT1中断为下降沿触发 /* 打开EINT1中断(设置向量控制器,即使用向量IRQ) */ VICIntSelect = 0 // 设置所有中断分配为IRQ中断 VICVectCntl0 = 0x2F; // 分配EINT1中断到向量中断0 VICVectAddr0 = (int)IRQ_Eint1; // 设置中断服务程序地址 EXTINT = 0x02; // 清除EINT1中断标志 VICIntEnable = 0 // 使能EINT1中断 while(1); // 等待中断 return(0); } ;(4)嵌入式C和C++兼容

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档