不使用系统滴答和定时器的情况下,编写一个延时函数

static void delay_ms(u32 ms)
{
	u32 i= 84 / 4 * 1000 * ms;
	while(i)
	{
		i--;
	}
}

### 关于嵌入式C语言函数使用 #### 函数定义与调用 在嵌入式C语言中,函数用于封装一组执行特定任务的指令。函数可以提高代码的模块化程度重用率。一个典型的函数由返回类型、函数名、参数列表以及函数体组成。 ```c // 定义一个简单的加法函数 int add(int a, int b) { return a + b; } ``` 此段代码展示了如何定义一个名为`add`的函数,该函数接收两个整型参数并返回它们相加之[^4]。 #### 参数传递方式 嵌入式C语言支持两种主要的参数传递方式:按值传递按地址传递(指针)。按值传递会复制实参给形参;而按地址传递则允许修改原始变量的内容。 ```c void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } int main() { int x = 10, y = 20; swap(&x, &y); // 调用swap函数交换x,y的值 return 0; } ``` 上述例子说明了通过指针来实现两数值之间的互换操作。 #### 返回值处理 除了无返回值(void),其他类型的函数都应有一个明确的return语句用来指定其计算结果。对于某些特殊情况下的错误检测或状态报告,也可以考虑采用多级返回码设计模式。 ```c typedef enum { SUCCESS, ERROR_NULL_POINTER, } Status; Status divide(float dividend, float divisor, float* result) { if (divisor == 0 || !result) { return ERROR_NULL_POINTER; } *result = dividend / divisor; return SUCCESS; } ``` 这段代码展示了一个除法运算函数,它仅实现了基本的功能还包含了异常情况判断逻辑。 #### 内联函数(Inline Functions) 为了减少函数调用带来的额外开销,在性能敏感的应用场景下可以选择使用内联函数。当编译器遇到inline修饰符时会在适当位置展开对应的函数主体而是生成真正的跳转指令。 ```c inline void delay(unsigned long ms) { while(ms--) { __asm volatile ("nop"); } } ``` 这里给出了一个简单的延时函数作为示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值