SR64如何删除行末空白字符小于4个字符的行

  • 尽管标题带有“精通”两字实際上是一本面向初学者的C#书籍,你甚至不需要太多编程知识就可以读懂它。
  • 是C#/.Net最重要的书籍没有之一。它全面介绍了.Net的基石——的运荇原理以及构建于CLR之上的C#类型系统,运行时关系泛型,以及线程/并行等高级内容任何一个以C#为工作内容的程序员都应该阅读此书。

    • :C#进阶必读这本书偏重于C#的语言特性,它系统的介绍了C#从编程规范使得程序员可以编写出一致,严谨的代码
    • :来自O’Reilly的C#参考手册,嚴谨的介绍了C#语法使用,以及核心类库C#程序员案头必备;
    • :这本书详细介绍了Google如何测试软件——包括Google的软件测试流程以及Google软件测试工程师的日常工作/职业发展。需要注意的是:这本书中的测试流程在国内很可能行不通(国内企业缺乏像Google那般强大的基础设施(Infrastructure))但它臸少可以让国内企业有一个可以效仿的目标;
    • :的另一本测试著作,不同于传统的黑盒/白盒测试这本书创造性的把测试比喻为“探索”(Exploration),然后把不同的探索方式对应到不同的测试方式上以便尽早发现更多的软件错误/Bug。

    很多程序员都向往成为横扫千军(One-man Army)式嘚“编程英雄”但卓越的软件并非一人之力,而是由团队合力而成就是这样一本写给程序员的如何在团队中工作的绝好书籍,它围绕著HRT三大原则(Humility谦逊Respect尊重,和Trust信任)系统的介绍了如何融入团队,如何打造优秀的团队如何领导团队,以及如何应对团队中的害群之馬(Poisonous People)这本书实用性极强,以至于Python之父都盛赞这本书“说出了我一直在做但总结不出来的东西”

    尽管成书于40年前,但它仍是软件项目管理重要的书籍源自作者领导并完成和这两个即是放到现在也是巨型软件项目的里程碑项目的经验总结。它覆盖了软件项目各个方面嘚关键概念:从工期管理()到团队建设()从程序设计(编程的本质是使用正确的数据结构)到架构设计(),从原型设计(Plan to Throw one away)到团隊交流(形式化文档+会议)令人惊讶的是,即便40年之后中的关键概念(包括焦油坑,,等等)依然适用,而软件开发的仍然没有嘚到解决()

    • :从人的角度分析软件项目。从雇佣正确的人创建健康的工作环境,以及打造高效的开发团队等角度阐述了如何改善人从而改善软件项目;
    • :这本书生动的再现了软件项目管理工作的场景,并给出了各种实用管理技巧如果你有意转向管理岗位,这本书鈈容错过;
    • :这本书从黑客的历史说起系统而又风趣的讲述了开源运动的理论和实践,以及开源软件项目是如何运作并发展的了解开源,从这本书开始

    不要被庸俗的译名迷惑,是一本价值极高的程序员成长手册这本书并不局限于特定的编程语言或框架,而昰提出了一套切实可行的实效(Pragmatic)开发哲学并通过程序设计,测试编程工具,以及项目管理等方面的实例展示了如何应用这套开发哲學从而使得程序员更加高效专业。有人把这本书称之为迷你版——给出了大量的优秀程序设计实践偏向术;而给出了程序设计实践背後的思想,注重道

    指出了如何成为专业程序员,这本则指出了专业程序员应该是什么样子——承担责任;知道自己在做什么;知道何时說不/何时说是;在正确的时间编写正确的代码;懂得自我时间管理和工期预估;知道如何应对压力如果你想成为专业程序员(Professional Developer)(而不昰码农(Code Monkey)),这本书会为你指明前进的方向

    • :“敏捷”版的,可以把这本书作为的补充;
    • :尽管这是一本讲如何创业的书但其中的精益生产,最小价值产品以及构建-度量-学习循环都值得程序员借鉴。

    是一本极具眼光的技术访谈书籍——在这本书访谈的15位计算机科学家中竟出现了12位获得者——要知道图灵奖从1966年设奖到现在也只有六十几位获奖者而已。

    把计算机科学分为四大领域:编程语言;算法;架构;人工智能并选取了每个领域下最具代表性的计算机科学家进行访谈。因为这些计算机科学家都是其所在领域的开拓者洇此他们能给出常人无法给出的深刻见解。通过这本书你可以了解前三十年的计算机科学的发展历程——计算机科学家做了什么,而计算机又能做到/做不到什么从而避免把时间浪费在前人已经解决的问题(或者根本无法解决的问题)上面。

    同样是访谈录同样访谈15个人,把重点放在程序员(Coders at work)上它从各个领域选取了15位顶尖的程序员,这些程序员既包括和这些老牌Unix黑客也包括这样的80后新生代,还包括囷这样的计算机科学家这种多样性(Diversity)使得兼具严谨性和趣味性,无论你是什么类型的程序员都能从中受益良多。

    • :通过图灵奖介绍整个计算机科学发展史非常难得的国产精品图书;
    • :可以把这本书看作为二十年前的,被访谈者都是当时叱咤风云的人物(例如微软的創造者Macintosh的发明者,以及Adobe的创始人等等)有趣的是这本书中大量的经验和建议到如今依然适用;
    • :类似于,不同的是被访谈者都是编程語言的设计者——这本书覆盖了除C语言以外的几乎所有主流编程语言通过这本书,你可以从中学到编程语言背后的设计思想——编程语訁为什么要被设计成这样是什么促使设计者要在语言中加入这个特性(或拒绝那个特性)。从而提升对编程语言的理解

    书如其名,是一本面向初学者的快速设计入门它覆盖了版式,色彩和字体这三个设计中的关键元素,并创造性的为版式设计总结出CRAP四大原則(Contrast对比Repetition重复,Alignment对齐Proximity亲密)。全书使用丰富生动的范例告诉读者什么是好的设计什么是不好的设计,使得即便是对设计一无所知的囚也可以从这本书快速入门。

    强调实践即如何做出好的设计;强调理论,即为什么我们会接受这样的设计而反感那样的设计如果你想要搞清楚设计背后的心理学知识,但又不想阅读大部头的心理学著作那么是你的首选。

    • :这本书指出了GUI设计的原则和常见误区然后通过具体范例指出了如何避免这些误区。如果你的工作涉及到用户界面那么这本书会为你减少很多麻烦;
    • :这本书将用户界面中的常见え素/行为组织成彼此关联的模式,以便读者理解并举一反三从而将其运用到自己的应用中;
    • :类似于,但面向移动平台它给出了iOS,Android鉯及Windows Phones上常用的90余种界面设计模式,从而使得你不必把这些平台的应用挨个玩一遍也可以掌握各个平台的设计精髓如果你主攻Android平台,那么會是更好的选择;
    • 和:如果你读过之后想继续深入学习设计这两本书是不错的起点。

    C#和.NET非常受全球开发人员的追捧和热爱书籍是人类进步的阶梯。想要学习C# 这里有10本学习C#编…

    }
      • 查询已连接设备/模拟器
      • 无线连接(需要借助 USB 线)
      • 无线连接(无需借助 USB 线)
      • 包名包含某字符串的应用
      • 复制设备里的文件到电脑
      • 复制电脑里的文件到设备
      • 按 tag 和级别过滤日志
      • 关閉 USB 调试模式
      • 状态栏和导航栏的显示隐藏
      • 重新挂载 system 分区为可写
      • 查看连接过的 WiFi 密码
      • 检测设备是否已 root
      • WiFi 状态变为启用/关闭/正在启动/正在关闭/未知

        (鉯上广播均可使用 adb 触发)

        表示停止 360 安全卫士的一切进程与服务

        复制设备里的文件到电脑

        其中 电脑上的目录 参数可以省略,默认复制到当湔目录

        复制电脑里的文件到设备

        拍照(需要在相机应用里)
        移动光标到行首或列表顶部
        移动光标到行末或列表底部

        执行效果相当于按电源键。

        可以通过上文讲述过的模拟电源键来切换点亮和熄灭屏幕但如果明确地想要点亮或者熄灭屏幕,那可以使用如下方法

        如果锁屏沒有密码,是通过滑动手势解锁那么可以通过 input swipe 来解锁。

        命令(参数以机型 Nexus 5向上滑动手势解锁举例):

        参数 300  分别表示起始点x坐标 起始点y唑标 结束点x坐标 结束点y坐标

        在焦点处于某文本框时可以通过 input 命令来输入文本。

        • V —— Verbose(最低输出得最多)
    • S —— Silent(最高,啥也不输出)

    按某级别过滤日志则会将该级别及以上的日志输出

    按 tag 和级别过滤日志

    •  
    •  
    •  
    •  

    指定格式可与上面的过滤同时使用。比如:

    中括号里的 [] 代表内核开始启动后的时间单位为秒。

    通过内核日志我们可以做一些事情比如衡量内核启动时间,在系统启动完毕后的内核日志里找到 Freeing init memory 那一行前媔的时间就是

    如果使用命令修改过,那输出可能是:

    该设备屏幕密度为 420dpi

    如果使用命令修改过,那输出可能是:

    表明设备的屏幕密度原來是 480dpi当前被修改为 160dpi。

    而在 Android 5.0 及以上版本里这个命令输出为空得通过其它方式获取了(需要 root 权限):

    把里面的有效内容提取出来就是 IMEI 了,仳如这里的是 041

    每次想知道设备的 IP 地址的时候都得「设置」-「关于手机」-「状态信息」-「IP地址」很烦对不对?通过 adb 可以方便地查看

    在有嘚设备上这个命令没有输出,如果设备连着 WiFi可以使用如下命令来查看局域网 IP:

    如果以上命令仍然不能得到期望的信息,那可以试试以下命令(部分系统版本里可用):

    可以看到网络连接名称、启用状态、IP 地址和 Mac 地址等信息

    这查看的是局域网 Mac 地址,移动网络或其它连接的信息可以通过前面的小节「IP 地址」里提到的 adb shell netcfg 命令来查看

    设备的更多硬件与系统属性可以通过如下命令查看:

    这会输出很多信息,包括前媔几个小节提到的「型号」和「Android 系统版本」等

    输出里还包括一些其它有用的信息,它们也可通过 adb shell getprop <属性名> 命令单独查看列举一部分属性洳下:

    每个应用程序的内存上限

    注: 修改设置之后,运行恢复命令有可能显示仍然不太正常可以运行 adb reboot 重启设备,或手动重启

    表示将屏幕密度修改为 160dpi。

    四个数字分别表示距离左、上、右、下边缘的留白像素以上命令表示将屏幕底部 200px 留白。

    关闭 USB 调试模式

    用命令恢复不了了毕竟关闭了 USB 调试 adb 就连接不上 Android 设备了。

    去设备上手动恢复吧:「设置」-「开发者选项」-「Android 调试」

    状态栏和导航栏的显示隐藏

    本节所说的楿关设置对应 Cyanogenmod 里的「扩展桌面」。

    这些键对应的值可则如下值用逗号组合:

    表示设置在所有界面下都同时隐藏状态栏和导航栏

    如果 adb 版本較老,无法使用 exec-out 命令这时候建议更新 adb 版本。无法更新的话可以使用以下麻烦点的办法:

    然后将 png 文件导出到电脑:

    指定保存文件为 png 格式
    指萣截图的显示屏编号(有多显示屏的情况下)

    实测如果指定文件名以 .png 结尾时可以省略 -p 参数;否则需要使用 -p 参数如果不指定文件名,截图攵件的内容将直接输出到 stdout

    另外一种一行命令截图并保存到电脑的方法:

    这个方法需要用到 gnu sed 命令,在 Linux 下直接就有在 Windows 下 Git 安装目录的 bin 文件夹丅也有。如果确实找不到该命令可以下载  并将

    而在 Mac 下使用系统自带的 sed 命令会报错:

    需要停止时按 Ctrl-C,默认录制时间和最长录制时间都是 180 秒

    视频的尺寸,比如 默认是屏幕分辨率。
    视频的比特率默认是 4Mbps。

    注:需要 root 权限

    /system 分区默认挂载为只读,但有些操作比如给 Android 系统添加命囹、删除行末空白字符自带应用等需要对 /system 进行写操作所以需要重新挂载它为可读写。

    1. 查看当前分区挂载情况

      找到其中我们关注的带 /system 的那一行:

    如果输出没有提示错误的话,操作就成功了可以对 /system 下的文件为所欲为了。

    查看连接过的 WiFi 密码

    注:需要 root 权限

    注:需要 root 权限。

    检測设备是否已 root

    Monkey 可以生成伪随机用户事件来模拟单击、触摸、手势等操作可以对正在开发中的程序进行随机压力测试。

    注:需要 root 权限

    有時需要控制设备的 WiFi 状态,可以用以下指令完成

    若执行成功,输出为空;若未取得 root 权限执行此命令将执行失败,输出 Killed

    如果我们下载了 Android 設备对应的系统更新包到电脑上,那么也可以通过 adb 来完成更新

    1. 通过 adb 上传和更新系统。

    当前瞬间占用 CPU 百分比
    进程状态(R=运行S=睡眠,T=跟踪/停止Z=僵尸进程)
    Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
    Resident Set Size 实际使用物理内存(包含共享库占用的内存)
    进程所有者的用户 ID

    top 命令还支持一些命令行参数,详细用法如下:

    -m num 最多显示多少个进程 -n num 刷新多少次后退出 -d num 刷新时间间隔(单位秒默认值 5)

    如下是其它常用命令的简单描述,前文已经专门讲过的命令不再额外说明:

    改变文件的存取模式/访问权限
    杀死指定 PID 的进程
    查看进程的资源占用情况

    找到占用 5037 端口的进程嘫后终止它。以 Windows 下为例:

    这里 1548 即为进程 ID用命令结束该进程:

    然后再启动 adb 就没问题了。

    在 Android Studio 里新建一个模拟器但是用 adb 一直连接不上,提示:

    在手机上安装一个终端然后执行 su 提示没有该命令这不正常。

    于是删除行末空白字符该模拟器后重新下载安装一次这次就正常了。

    感謝朋友们无私的分享与补充(排名不分先后)

    }

    可以看到实际上原来第三第四行開始的字符跑到了第一行第二行的末尾整个DDRAM的结构就是一种循环的结构,发生屏移时DDRAM与显示映射关系不断在改变但是这不太符合我们嘚阅读习惯,所以如果需要使用该项功能还需编程校正之

    LL:这时仅仅是将地址指针AC的值减1。在屏幕上表现是光标左移一个字符

    LH:这时僅仅是将地址指针AC的值加1。在屏幕上表现是光标右移一个字符

    HL:AC指针不变,向左屏移一个字符这是DDRAM结构循环左移,80H接在8FH后面90H接在9FH后媔。这与上面讲的屏移是一样的

    HH:AC指针不变,向右屏移一个字符这是DDRAM结构循环右移,80H接在8FH后面90H接在9FH后面。

    DL=1表示8为接口DL=0表示4为接口。

    RE=1表示开启扩展指令RE=0表示使用基本指令。

    开启基本指令则设置为0x30开启扩展指令则设置为0x34。

    DDRAM地址设置:只有字地址如下表所示。(注意DDRAM地址有4行×16字)如下所示:

    所以某一时刻只能显示其中的2行只有卷动显示才能将另两行的数据显示出来。

    读忙标志(地址):同时忙標志和地址读出来忙状态时,ST7920不会接受任何指令按照时序图将RS置0,RW置1然后读取状态寄存器。

    写RAM(DDRAM/CGRAM/GDRAM):写了控制逻辑(函数wrtcom_12864(地址);)之后矗接送数据(wrtdat_12864)。写完后地址指针根据进入模式中的设置加一或减一写数据前先写地址,而写地址本身是一个写地址命令然后再写数据。

    讀RAM(DDRAM/CGRAM/GDRAM):记得先假读一次后面的才是真读,假读之后不需要再假读了除非重设了地址。

    二)扩展指令集(RE=1):(使用扩展指令集先写指令0x34,這使得RE=1)

    待机模式:0x01不影响DDRAM,所以跟清屏指令不同任何指令可以结束待机模式。

    SR=1:允许设置垂直卷动地址SR=0:允许设置IRAM和CGRAM地址。

    设置卷动/IRAM地址:0x40+地址(卷动地址为行地址,即纵向地址).

    这里讲解卷动卷动就是上下滚屏,实现屏幕的垂直滚动

    卷动地址:地址范围为0x00~0x63,共64行卷动地址其实就是垂直地址每一个地址代表着DDRAM中的一行的像素点。卷动一次就是把该行所有点移到上半屏和下半屏幕最上方

    还昰DDRAM的结构图,需要注意的是卷屏是分上半屏卷动和下半屏卷动两屏之间没有关系,也就是DDRAM中左边红色部分在上半屏滚动右边绿色部分茬下半屏滚动。

    也就是说左边是一个上下相接的循环结构同理右边也是上下相接的循环结构。左边内存中的字符上下滚动右边内存中嘚字符上下滚动,两者木有关系

    要开启卷动,首先开启扩展指令集然后允许卷动地址设置,再设置卷动地址

    要实现全屏滚动,就必須使用循环不断地修改卷动地址从00~63如此循环,但遗憾的是这也不符合我们的阅读习惯后续的应用的中将讲解全屏滚动的实现方法。这裏只是把卷动原理讲清楚

    R1、R0初始化的值为00。选择1~4任一行反白显示并可决定是否反白

    如何开启反白显示:首先开启扩展指令(0x34),然后設置选中某一行设置反白显示(0x04+R1R0)00为第一行,01为第二行10为第三行,11为第四行需要说明的是,这里的行是指DDRAM所有内存的行而不是显礻的行,屏幕只显示2行

    所以如果我们开启第3第4行的反白显示,不卷动我们是看不到效果的

    同时,如果我们开启第1行反白显示那么在屏幕中第1行第3行都会反白显示,第2行则对应屏幕第2第4行这一点需要注意。

    如何关闭反白显示:只需在此写一次地址即可关闭也就说,苐一次写第一开启反白第二次写相同的地址关闭反白显示。

    扩展功能设置:0x36设置绘图显示开

    当GDRAM写完了之后,写0x36则屏幕显示你所绘制的圖形

    设置GDRAM地址:绘图时,需要将GDRAM的地址写入地址指针中然后才能写入数据。连续写入两个字节第一个为行地址(Y),第二个为列地址(X)

    需要注意的是:写了数据之后,地址指针会自动加一(以字为单位)当到达该行的行尾时,指针下一次加一会使得地址指针跳囙该行行首也就说如果地址值为8FH时,下一次它就是80H(以第一行为例)指针地址在本行之间循环。

    再讲下初始化过程根据ST7920的手册提供嘚初始化步骤就可以了。

    这里讲解12864的几个典型应用:

    1)、自编字符创建以及显示

    2)、GDRAM的绘制及显示

    3)、全屏卷动的实现方法

    1)、自编字符創建以及显示

    我们以第3个字符为例:

    在这里先把整个源文件的宏定义以及各子函数贴出:

    以上函数定义在main()函数之前我们在主函数中编写程序:

    //自定义字符,这里是笔者画的一个小机器人

    运行程序就可以看到第一个字符处出现一个小机器人了。

    2)、GDRAM的绘制及显示

    先明确的偠点GDRAM是32行×16字。写数据之前必须先送行地址然后送列地址。读写的基本操作单元是字(2个字节)读写完一个字后地址指针在本行自動加一,到达行末则返回行首地址(地址循环)

    我们这里先以一个画点函数函数为例,然后再根据画点函数写一个绘制矩形的函数

    先建一个坐标左上角为(00),右下角为(63,127)

    画点原理:由于GDRAM的读写基本操作单元是字,那么我们需要画一个点但是又不改变其他点的内嫆那么需要把该点所处的字中的2个字节均读出,然后再单独修改我们需要画的那个点(其他位保持不变)最后把该字再写回去。

    因此涉及的操作有先读GDRAM,再写GDRAM再显示GDRAM。

    在写主函数之前先写几个子函数说明其作用:

    为什么要清空GDRAM呢,因为指令集中没有GDRAM清空指令而峩们往里写了什么它就会一直保存着,所以我们画点之前先清空GDRAM其实清空GDRAM就是不断往里写0x00。

    下面编写主函数这就简单了,如下:

    程序運行后相应位置出现了一个黑点手机坏了,拍不了照不然就贴下照片。

    然后根据画点函数扩展一个画矩形的函数吧:

    //画矩形子函数,参数为(点1行坐标点1列坐标,

    //以下绘制4条矩形边框

    关于GDRAM的操作就到这吧下面讲解下12864全屏卷动的实现方法。

    DDRAM的结构如下:

    卷屏是分上丅屏个各自卷动的上半屏卷动左边红色区域的内容,下半屏卷动右边绿色区域的内容

    为了实现全屏卷动显示,必须使用拼接的方法实現

    笔者花了几个小时研究了下算法,然后第二天实现了现讲述如下:

    细心观察DDRAM的结构发现,如果在卷动过程中在同一时刻屏幕显示嘚内容最多涉及3行DDRAM的内容,而另一行是没有显示的那么这一行就是用来缓存的数据的。

    当屏幕显示如下2行时开始卷动(一):

    则屏幕同時出现以下3行DDRAM内容(二):

    需要注意的是左边是上半屏显示,右边是下半屏显示

    在程序的开始处往DDRAM对应区域填写如下内容:

    这样在开始卷动之后,就可以实现拼接的效果了当卷动了16次之后,也就是第一行字符已经移出屏幕屏幕显示的DDRAM如下:

    此时,屏幕接着滚动显礻内容涉及3行的DDRAM,如下:
    第一行DDRAM是空余的,下次就该往第一行写数据写完后DDRAM内容如下:

    经过又一次的16次卷屏之后屏幕显示内容如下:

    然后接下来又卷动16次,笔者的算法是在每一次卷动后写一个字到显示完毕的那一行中,卷完16次显示完毕的那一行也就写完了。然后接下来嘚16次卷动又写刚刚显示完毕的那一行而刚被写完的那一行将在后面16次卷动中显示。

    原理就是如此然后从中提取出规律,设计出算法並编程实现:

     unsigned char code ser[] = {"一一一一一一一一二二二二二二二二叁叁叁叁叁叁叁叁四四四四四四四四中国中国中国中国"}; //这是要显示的字符串

    //addr用于存储写叺地址

    //flag存储卷动地址,名字没取好!

    //hang存储下一行要写入数据的行号(1~4)

    //over记录写入的空字符数

    //ptdat存储字符串的指针

    //这里先把前面DDRAM中的前3行的字苻数据写入

    //如果字符不足<=4行那么不卷动,之后字符>4行才卷动

    //一直到末行显示完毕则停止卷动

    //前面的代码是往DDRAM中写如下内容:

    //如果写第5行時全为空说明字符刚好4行,不卷动

    //此时第5行写入16个0x20空字符,over用于记录空字符个数

    //如果不足4行,则前面也将会写入空字符此时写完叻3行DDRAM后

    }

    我要回帖

    更多关于 删除行末空白字符 的文章

    更多推荐

    版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

    点击添加站长微信