打印函数printf.c代码分析

接下来我们来看一下打印函数的代码,打印函数属于工具函数,首先我们来看一下打印整数的函数,如下图所示:
打印函数printf.c代码分析
printint 函数可以打印十进制,八进制,十六进制,二进制等格式的数字,函数的第一个参数是要打印的数字xx, 第二个是指定多少进制,第三个参数是指定是否是有符号数,这里以十进制为例,则第二个参数是10,首先要看是不是有符号数,如果是有符号数,先把它转换成正数,第41到43行把数字xx从低位到高位依次转换成ascii码,存储在字符数组buf中,这里利用了取余和除这两个工具,轻松提取出数字的各个位数的ascii码,如果是有符号数,还要在最前面上加上负号,这是45和46行做的事情,第48和49行依次从高位到低位打印数组buf中的字符。

接下来是打印指针的函数, 如下图所示:
打印函数printf.c代码分析它将要打印的数x,从高位到低位依次取出对应的ascii码,应为uint64占64位,每4位对应一个ascii字符,右移60位,则将最高4位移动到最低四位,循环结束后,最后打印出来。

接下来是最经常使用的printf函数,如下图所示:
打印函数printf.c代码分析打印函数printf.c代码分析

首先在70行,判断打印初始化是否完成, 如果完成,在72行循环等待获取打印锁,获取锁后,依次处理每个字符,如果是普通字符,直接串口打印,如果是%,要判断紧跟在%后面的一个字符,根据这个字符判断是十进制还是十六进制还是打印指针,依次调用前面定义的函数,打印完毕后,释放锁,以供其他cpu调用。

接下来是剩余的两个函数:
打印函数printf.c代码分析panic函数打印一行panic字符,然后进入死循环,最后一个函数printfinit,初始化打印锁,然后设置初始化完成标志。

相关文章:

  • 2022-12-23
  • 2021-11-30
  • 2021-05-17
  • 2021-08-06
  • 2021-06-17
  • 2021-10-03
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-09-16
  • 2021-10-20
  • 2022-12-23
  • 2022-01-17
  • 2021-12-12
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案