linux内核中版本信息字符串为一宏定义,如下:

#define version(a) Version_ ## a
#define version_string(a) version(a)

extern int version_string(LINUX_VERSION_CODE);
int version_string(LINUX_VERSION_CODE);

在u-boot中,同样有相似的宏定义:

#define XMK_STR(x)        #x
#define MK_STR(x)        XMK_STR(x)

它是这样使用的(例子还有很多):

"baudrate="        MK_STR(CONFIG_BAUDRATE) "/0"

作一测试,语句和运行结果如下:

printf("XMK_STR(x):%s /nMK_STR(x): %s/n", XMK_STR(CONFIG_BAUDRATE), MK_STR(CONFIG_BAUDRATE));

XMK_STR(x):CONFIG_BAUDRATE
MK_STR(x): 115200

一开始我不明白为何要定义两个宏(XMK_STR和MK_STR),经过测试才知道原因。因为在实际使用过程中,宏括号里的也是宏定义,如果单单使用XMK_STR,即C语言中的“#”,则会原封不动地输出“#”后的内容(亦即宏括号里的内容),如果这个“参数”也是宏的话,输出的当然是这个宏的名称了,正如上面所示那样。所以为了输出宏的真正内容使用,需要再加上一个宏,不过此刻的内容是一个字符串。

在u-boot中使用nand write.yaffs2命令将根文件系统映像写入nand flash中,会有如下提示:

Writing at 0x3680000 --55% is complete

变化的是其中的地址(偏移量)和进度(百分之几)。像这个其实不难实现。在实际代码中是这样的:

printf("/rWriting at 0x%llx --%d%% is complete",offset,100-(left_to_write/(*length/100)));

关键的便是其中的“/r”,ASCII码为0x0d,这个字符我们很常见,在区别和处理Windows和Linux的回车换行时经常遇到。它就是“回车”,回到一行的行首。而C语言的printf函数常用的“/n”则是换行,ASCII码为0x0a。这里不能使用“/n”,否则会影响显示效果。

上面的语句每执行一次,那一行字符串都重新回到这一行的行首。这样看上去只有地址和进度来变化,其实整个字符串都已经重新打印一遍了,只不过我们没这个感觉而已。

大家可以测试一下下面的语句:

for (i = 0; i < 100; i++)
        {
                printf("/r%d%% is complete.", i);
                sleep(100);
        }
        printf("/n");

大家可以测试一下“/r”和“/n”这些组合的效果。

木草山人 即日

u-boot移植随笔:u-boot技巧二则相关推荐

  1. Spring Boot 配置随机数那些小技巧

    转载自  Spring Boot 配置随机数那些小技巧 Spring Boot支持在系统加载的时候配置随机数. 添加config/random.properties文件,添加以下内容: #随机32位M ...

  2. 移植U-Boot.1.3.1到S3C244和S3C2410

    移植U-Boot.1.3.1到S3C244和S3C2410 首先,U-Boot1.3.1还没有支持s3c2440,移植仍是用2410的文件稍作修改而成的.2440和2410的区别在我移植1.2.0的文 ...

  3. 容器化 Spring Boot 代码的 9 个技巧

    目录 一.前言 1.为什么容器化 Spring Boot 应用程序很重要? 2.一个简单的"Hello World"Spring Boot 应用程序 二.容器化 Spring Bo ...

  4. u-boot移植随笔:自定义u-boot命令点灯

    u-boot移植随笔:自定义u-boot命令点灯 前几天一不小心在CSDN论坛上发帖散分,同时许诺完成点灯就结账,经过努力,终于可以在u-boot的shell中输入自定义的命令来点灯了.下面简单讲一下 ...

  5. Linux移植随笔 tslib

    前段时间让Tslib搞晕头了,原来一切都是版本惹的祸.本文只是一个随笔,随笔者,随意用笔写下心得而已,因此不必较真.正如我所欣赏的"乘兴而来,兴尽而返"一样.--估计当年王子猷是赏 ...

  6. Linux移植随笔:终于解决Tslib的问题了【转】

    转自:http://www.latelee.org/embedded-linux/porting-linux-tslib.html 前段时间让Tslib搞晕头了,原来一切都是版本惹的祸.本文只是一个随 ...

  7. 构建Spring Boot RESTful服务+ Spring Boot执行器

    总览 什么是REST? REST(代表状态转移)是Web构建的体系结构样式,已成为用于Web应用程序的标准软件设计模式 . 代表性国家转移一词最早由REST的发起人,HTTP规范的主要作者之一Roy ...

  8. Spring Boot Initilizr - 使用Spring Boot CLI

    Spring Boot Initilizr - 使用Spring Boot CLI 这是我之前的两篇文章的延续.在阅读本文之前,请先阅读我之前在" Spring Boot Initilizr ...

  9. 【Spring Boot】使用Spring Boot来搭建Java web项目以及开发过程

    [Spring Boot]使用Spring Boot来搭建Java web项目以及开发过程 一.Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来 ...

最新文章

  1. python3.6.2安装教程-CentOS 7.2下安装Python 3.6.2
  2. 【计算机网络】网络层 : ICMP 协议 ( ICMP 差错报文 | 差错报文分类 | ICMP 询问报文 | ICMP 应用 | Ping | Traceroute )
  3. Redis:MySQL算老几?
  4. ipa在线安装搭建_三种越狱工具安装方法
  5. matplotlib.pyplot.bar()条形图
  6. 正则匹配字符串有则替换无则添加;用正则实现添加和替换字符串,原字符串中包含某字段就替换(覆盖),不包含某字段就添加!
  7. css使两个盒子并列_前端学习CSS
  8. Sql 语句里 As后的竟然可以和前边的字段重名
  9. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_11_练习:集合元素处理(Stream方式)...
  10. win10常用的小技巧
  11. php更换wordpress用户头像,WordPress用户头像不显示的解决方法
  12. html中怎样把背景图片置顶,HTML5中背景图片如何设置
  13. 开源项目CRMEB 任意文件下载漏洞分析
  14. 高端存储下一个爆款凭什么是它?
  15. MyBatis入门系列(9) -MyBatis之SQL语句构建器
  16. 开启微信悬浮窗权限有什么用_新版微信功能!微信也可以设置主题皮肤了,不再是单调的白色,这也太好看了吧!...
  17. Mac修改密码导致钥匙串
  18. Apache AzKaban 环境搭建与入门使用
  19. 计算机技术发展作文,【推荐】科技发展作文三篇
  20. 数据库date日期转String类型

热门文章

  1. 51Talk联合创始人兼COO张礼明离职
  2. 苹果明年有望推出15英寸版MacBook Air
  3. 特斯拉已撤回德国电池工厂建厂补贴申请 原有望获得近13亿美元
  4. 疑似黑鲨5系列游戏手机已备案:或首批搭载骁龙898
  5. 同花顺崩了上热一!网友:早盘血亏,你还不让我跑 官方回应...
  6. 疑似Redmi K40S工信部入网:主打双十一 最高支持120W快充
  7. 最新数据:中国网民超10亿,中老年群体增速最快
  8. 余承东嘲讽苹果:iPhone 12落后华为Mate40两代
  9. 谷歌承诺未来三年将支付10亿美元新闻费用
  10. 罗永浩直播首秀将开卖小米10,网友:一时不知该说谁牛X!