c语言使用记录

编程小技巧

技巧一   停下别跑了!快回去!

   假如你不想让你的程序,卡死在某一个地方,比如说你需要等待晶振的稳定,需要等待从机的答复,但是这些事情并没有发生,你的程序就一直在这个地方等待着,或者被看门狗复位。这个时候你可以使用嵌入汇编的JMP指令或者使用setjmp()和longjmp()这一对函数,JMP指令的使用很简单,往后面添加上你需要的地址就行,而后面那一对函数则需要,先使用setjmp()保存当前的活动记录表,再用longjmp(),放到你想要的地方跳转回来,不过这个像goto一样尽量少用。

	//主循环片段	
	if(setjmp(buf))
		ErrorHanding[Error_Code]();	
	else
		Show_IIC();
		
	//子函数片段
	if(MB85RC256V_SequentialRead(MB85RC256V_PageAddress(i,0),num,8) != NORMAL)
		{
		Error_Code = 0x02;
		longjmp(buf,1);	
		}

技巧二   看看谁copy的最快!

   如果你需要将一大堆的数据从这个数组copy到另外一个数组,你会怎么做呢?这还用说吗?循环语句嘛一个一个拷不就行了!确实这样的办法简单又好用,但是在有一些场景下,在C标准库里面为我们准备了一个好东西,memcpy()函数,用它进行拷贝数据,能比我们用循环快很多很多,那这是为什么呢?因为它使用了一种特别的算法可以利用cache来加速!在桌面计算机中,访问速度从大到小是内部寄存器、cache、RAM、ROM,当然成本也是这样排的,用循环语句是从ROM中源地址拷贝到RAM再从RAM拷贝到目标地址,cache比 RAM快,那么在专门优化过的memcpy比普通的循环拷贝快就是理所当然的了。

技巧三   芯片被干扰了!我的代码呢?

   如果芯片被外界干扰了一下,然后你发现自己烧入flash的代码没了,可能是芯片取了一条错误的指令,直接执行了flash擦除函数。那这样的情况怎么避免呢!这时候在开发bootloards程序的时候就可以采用flash driver boot loader,名字很长但原理很简单,你写的flash擦除和写入函数最终都会被编译器翻译成机器码,你只要将这段机器码在传入APP程序之前,发给芯片让它明白咋操作就行,用数组存下利用函数指针调用即可!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值