在Linux/Unix中使用错误保留符需注意的事项(2006-02-17)
来源:互联网 发布:山本宽 anime知乎 编辑:程序博客网 时间:2024/05/16 14:48
在 linux/unix中写程序常常使用errno.h库中的各种错误保留符号以表示程序是否出现问题
但是,习惯上,经常取负号, 这一点要小心. 如下代码是linux的mmc驱动的代码片段,目的是为mmc
设备请求DMA通道.
int omap_request_dma(dma_device_t device, const char *device_id, dma_callback_t callback, void data, dma_regs_t ** dma_regs)
{
omap_dma_t *dma = NULL;
dma_regs_t *regs;
int i, err, status;
*dma_regs = NULL;
err = 0;
spin_lock(&dma_list_lock);
for (i = 0; i < MAX_OMAP_DMA_CHANNELS; i++) {
if (dma_chan[i].in_use) {
if ((dma_chan[i].device == device) && (device != eDMANotSync)) {
err = -EBUSY; //出现问题, 表示设备忙, 这时候 err = -16
break;
}
} else if (!dma) { //正常情况下,为dma分配一个数组单元,dma_chan[]中的每个元素代表了一个DMA通道
dma = &dma_chan[i];
}
}
if (!err) // 不要认为, !err当 err = -16的时候可运行(注意cpu对负数的表示方式),实际上应该是当err 0的 时候运行, 也就是当是成功获得一个dma通道时候,才运行这个if语句!
if (dma)
dma->device = device;
else
err = -ENOSR;
}
spin_unlock(&dma_list_lock);
if (err)
return err;
i = dma - dma_chan;
regs = &dma_base[i];
err = request_irq(dma->irq, dma_irq_handler, SA_SHIRQ, device_id, regs);
if (err) { //分析了request_irq()的实现代码的时候, 出现问题的时候返回的err为-12或-22,而这里的if语句就是用来处理问题的代码,而判断标准为err,就是为负的时候if()为真!
printk(KERN_ERR
"%s: unable to request IRQ %d for DMA channel/n",
device_id, dma->irq);
return err;
DPRINTK("requested dma device %x/n", device);
return 0;
}
- 在Linux/Unix中使用错误保留符需注意的事项(2006-02-17)
- 在editgrid中使用combobox需要注意的事项
- 在firebird中使用中文要注意的事项
- 错误2error LNK2005: *已经在 *.obj 中定义(使用多个.cpp文件时,应注意的事项)
- StoryBoard中通过连线跳转的控制器在使用时应注意的事项
- 在构造函数中使用new时应注意的事项
- 在构造函数中使用new时应注意的事项
- 在构造函数中使用new时应注意的事项
- 在构造函数中使用new时应注意的事项、析构函数调用
- 在构造函数中使用new时应注意的事项
- 在构造函数中使用new时应注意的事项
- C++:在构造函数中使用new时应该注意的事项
- 在action中定义的方法一定要注意的事项
- 在unix中strtok函数使用需注意
- 硬件工程师在硬件开发中要注意的事项
- 硬件工程师在硬件开发中要注意的事项
- 在使用struts1时应注意的事项
- 编程中注意的事项
- ADMT3.0迁移AD用户
- 静态成员函数
- 浅谈中国民办教育的发展空间
- 2005年WAP个人建站不再是梦想
- 自己写的一个asp.net分页类(sqlserver).注意是类,不是存储过程但原理一样
- 在Linux/Unix中使用错误保留符需注意的事项(2006-02-17)
- Backbase入门指南(.NET)
- 寻找互联网的未来增长点
- 纯真IP数据库格式详解zt
- 软件设计者争夺“脸面”
- Asp.Net细节性问题精萃
- Eclipse开发经验点滴
- www.jialing.net恢复使用!
- TreeView使用集锦