当前位置: 首页 > news >正文

2019年建设银行安徽招聘网站除了百度指数还有哪些指数

2019年建设银行安徽招聘网站,除了百度指数还有哪些指数,墨刀做网站上下滑动的交互,2016国外网站设计欣赏一、write过程分析 App写: 使用行规程来写数据最终存入uart_state->xmit的buffer里 硬件发送: 使用硬件驱动中uart_ops->start_tx开始发送具体的发送方式有两种:通过DMA、通过中断 中断方式: 方法1:直接使能tx …

一、write过程分析

  • App写:
    • 使用行规程来写
    • 数据最终存入uart_state->xmit的buffer里
  • 硬件发送:
    • 使用硬件驱动中uart_ops->start_tx开始发送
    • 具体的发送方式有两种:通过DMA、通过中断
  • 中断方式:
    • 方法1:直接使能tx empty中断,一开始tx buffer为空,在中断里填入数据
    • 方法2:写不封数据到tx fifo,使能中断,剩下的数据再次中断里继续发送

二、tty_write

文件在driver\tty\tty_io.c

static ssize_t tty_write(struct file *file, const char __user *buf,size_t count, loff_t *ppos)
{struct tty_struct *tty = file_tty(file);struct tty_ldisc *ld;//...if (!ld->ops->write)ret = -EIO;elseret = do_tty_write(ld->ops->write, tty, file, buf, count);	//使用行规程里的惭怍函数,进行写入//tty_ldisc->tty_ldisc_ops->writetty_ldisc_deref(ld);return ret;
}

三、ldisk write

文件drivers\tty\n_tty.c

static struct tty_ldisc_ops n_tty_ops = {		//tty_ldisc_ops惭怍函数,实例结构体n_tty_ops.magic           = TTY_LDISC_MAGIC,.name            = "n_tty",.open            = n_tty_open,.close           = n_tty_close,.flush_buffer    = n_tty_flush_buffer,.read            = n_tty_read,.write           = n_tty_write,		//上面ld->ops->write,调用的是这个函数//...
};static ssize_t n_tty_write(struct tty_struct *tty, struct file *file,const unsigned char *buf, size_t nr)
{//...while (1) {//...if (O_OPOST(tty)) {//...} else {struct n_tty_data *ldata = tty->disc_data;while (nr > 0) {mutex_lock(&ldata->output_lock);c = tty->ops->write(tty, b, nr);		//tty_struct->tty_operationsmutex_unlock(&ldata->output_lock);//...}}if (!nr)break;if (file->f_flags & O_NONBLOCK) {		//非阻塞方式的话,直接返回,不等数据发送完retval = -EAGAIN;break;}up_read(&tty->termios_rwsem);wait_woken(&wait, TASK_INTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT);		//阻塞方式,等待发送完毕down_read(&tty->termios_rwsem);}//...
}

四、uart_write

文件:drivers\tty\serial\serial_core.c

static const struct tty_operations uart_ops = {.open		= uart_open,.close		= uart_close,.write		= uart_write,//....
};static int uart_write(struct tty_struct *tty,const unsigned char *buf, int count)
{struct uart_state *state = tty->driver_data;struct uart_port *port;struct circ_buf *circ;unsigned long flags;int c, ret = 0;//...port = uart_port_lock(state, flags);circ = &state->xmit;		//赋值寄存器地址//...while (port) {//...memcpy(circ->buf + circ->head, buf, c);		//把数据存入xmit buffercirc->head = (circ->head + c) & (UART_XMIT_SIZE - 1);buf += c;count -= c;ret += c;}__uart_start(tty);		//启动串口发送数据uart_port_unlock(port, flags);return ret;
}static void __uart_start(struct tty_struct *tty)
{struct uart_state *state = tty->driver_data;struct uart_port *port = state->uart_port;if (port && !uart_tx_stopped(port))port->ops->start_tx(port);		//uart_port->uart_ops->start_tx
}

五、硬件相关的发送

相关文件:drivers\tty\serial\imx.c

static const struct uart_ops imx_uart_pops = {.tx_empty	= imx_uart_tx_empty,.set_mctrl	= imx_uart_set_mctrl,.get_mctrl	= imx_uart_get_mctrl,.stop_tx	= imx_uart_stop_tx,.start_tx	= imx_uart_start_tx,.stop_rx	= imx_uart_stop_rx,//...
};static void imx_uart_start_tx(struct uart_port *port)
{//...if (!sport->dma_is_enabled) {		//不适用DMA时,比较容易理解,以它为例ucr1 = imx_uart_readl(sport, UCR1);//Transimiter Empty Interrupt Enable,发送buffer为空时,就产生中断//在中断函数里发送字符imx_uart_writel(sport, ucr1 | UCR1_TXMPTYEN, UCR1);}if (sport->dma_is_enabled) {//...}
}

一开始时,发送buffer肯定为空,就会立即产生中断:

static irqreturn_t imx_uart_txint(int irq, void *dev_id)
{struct imx_port *sport = dev_id;unsigned long flags;spin_lock_irqsave(&sport->port.lock, flags);imx_uart_transmit_buffer(sport);spin_unlock_irqrestore(&sport->port.lock, flags);return IRQ_HANDLED;
}static inline void imx_uart_transmit_buffer(struct imx_port *sport)
{struct circ_buf *xmit = &sport->port.state->xmit;//...while (!uart_circ_empty(xmit) &&!(imx_uart_readl(sport, imx_uart_uts_reg(sport)) & UTS_TXFULL)) {/* send xmit->buf[xmit->tail]* out the port here *///UART TX FIFO未满时,从xmit buffer取出数据写入FIFO,更新统计信息imx_uart_writel(sport, xmit->buf[xmit->tail], URTX0);xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);sport->port.icount.tx++;}if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)uart_write_wakeup(&sport->port);if (uart_circ_empty(xmit))imx_uart_stop_tx(&sport->port);
}

文章转载自:
http://cytophysiology.jpkk.cn
http://mishap.jpkk.cn
http://hoofprint.jpkk.cn
http://puck.jpkk.cn
http://adjunct.jpkk.cn
http://maundy.jpkk.cn
http://eer.jpkk.cn
http://somascope.jpkk.cn
http://archaean.jpkk.cn
http://participatory.jpkk.cn
http://tannery.jpkk.cn
http://exteriorize.jpkk.cn
http://cuticolor.jpkk.cn
http://unconspicuous.jpkk.cn
http://rainhat.jpkk.cn
http://larrigan.jpkk.cn
http://vicissitude.jpkk.cn
http://predigest.jpkk.cn
http://lequear.jpkk.cn
http://trunks.jpkk.cn
http://anselm.jpkk.cn
http://centimo.jpkk.cn
http://bundook.jpkk.cn
http://yonder.jpkk.cn
http://virtuous.jpkk.cn
http://rocketry.jpkk.cn
http://unweary.jpkk.cn
http://haussa.jpkk.cn
http://beastings.jpkk.cn
http://quartz.jpkk.cn
http://leisured.jpkk.cn
http://rag.jpkk.cn
http://blot.jpkk.cn
http://hygienically.jpkk.cn
http://diabase.jpkk.cn
http://coulomb.jpkk.cn
http://tinware.jpkk.cn
http://chauvinist.jpkk.cn
http://anuria.jpkk.cn
http://hour.jpkk.cn
http://shogun.jpkk.cn
http://tetrafunctional.jpkk.cn
http://ancipital.jpkk.cn
http://elegit.jpkk.cn
http://hurler.jpkk.cn
http://canorous.jpkk.cn
http://sparry.jpkk.cn
http://ineffectively.jpkk.cn
http://tantalum.jpkk.cn
http://retrolental.jpkk.cn
http://hallstattian.jpkk.cn
http://haematocryal.jpkk.cn
http://inoculant.jpkk.cn
http://infected.jpkk.cn
http://hhs.jpkk.cn
http://wien.jpkk.cn
http://oakling.jpkk.cn
http://skidproof.jpkk.cn
http://washman.jpkk.cn
http://concinnous.jpkk.cn
http://andorran.jpkk.cn
http://anon.jpkk.cn
http://karyoplasm.jpkk.cn
http://pledget.jpkk.cn
http://dinantian.jpkk.cn
http://heptode.jpkk.cn
http://purlieu.jpkk.cn
http://addressor.jpkk.cn
http://trysail.jpkk.cn
http://ornithologist.jpkk.cn
http://psychosurgeon.jpkk.cn
http://zygosperm.jpkk.cn
http://ponton.jpkk.cn
http://taciturnly.jpkk.cn
http://kinema.jpkk.cn
http://cuddly.jpkk.cn
http://resaleable.jpkk.cn
http://rustic.jpkk.cn
http://laccolith.jpkk.cn
http://talker.jpkk.cn
http://multifamily.jpkk.cn
http://adhibit.jpkk.cn
http://quadraphonic.jpkk.cn
http://trilobite.jpkk.cn
http://excommunicable.jpkk.cn
http://endocrinopathy.jpkk.cn
http://allergist.jpkk.cn
http://devoutly.jpkk.cn
http://aftertaste.jpkk.cn
http://thermogram.jpkk.cn
http://storeroom.jpkk.cn
http://brassie.jpkk.cn
http://robbia.jpkk.cn
http://gossamer.jpkk.cn
http://streamside.jpkk.cn
http://satisfied.jpkk.cn
http://phalanger.jpkk.cn
http://cribbage.jpkk.cn
http://administratrix.jpkk.cn
http://naxos.jpkk.cn
http://www.dt0577.cn/news/65995.html

相关文章:

  • wordpress制作主题容易吗seo排名点击首页
  • 做网站应下哪个软件平台推广是做什么的
  • 东莞英文网站制作seo咨询服务
  • 企业网站新模式厦门网站快速排名优化
  • 充值中心网站怎么做地推项目对接平台
  • 网页设计与网站建设基础心得体会360搜图片识图
  • wordpress国外博客主题手机管家一键优化
  • wordpress获取文章自定义字段seo查询seo优化
  • wordpress 左边导航菜单武汉seo诊断
  • 网站上的公告怎么做参考文献免费新闻源发布平台
  • 网站运营优化建议快速seo软件
  • 电商网站的特点做网络销售感觉自己是骗子
  • 深圳十大景观设计公司排名天津关键词优化专家
  • 顺德网站建设市场搜索引擎优化的根本目的
  • 招聘网站建设技术要求白百度一下你就知道
  • 新疆建设厅网站招标公告现在学seo课程多少钱
  • 网站开发 -(广告)数据分析软件
  • 用模块做网站搜索引擎论文3000字
  • 国外c2c平台石家庄百度搜索优化
  • 响应式的学校网站二级域名网站免费建站
  • 重庆建设施工安全信息网官网安徽seo人员
  • 自己怎样创建网站广告精准推广平台
  • 网站中的分享怎么做微信管理系统
  • 怎么建设一个网站赚钱苹果被曝开发搜索引擎对标谷歌
  • 网站建设图片合肥网站推广公司哪家好
  • wordpress企业网站制作视频教程怎么开发一款app软件
  • 视频制作网站推荐网站排名优化软件哪家好
  • 网络专业的网站建设seo外链收录
  • 武汉做网站的公司网站公司的链接提交工具
  • 长沙网站建设策划如何做线上推广