vivi eboot wince 烧写

今天烧vivi文件到nand flash去,用sjf2410wiggler烧,虽然还不懂编译vivi,但是先试试烧个vivi bootloader进去玩玩!连上wiggler jtag线,先用H-jtag 软件检测到了芯片,然后在命令行打上sjf2410wiggler /f: c:\vivi 进行烧写。


             还可以通过tftp的方式,开发板启动后,按下除回车之外任意键,进入vivi的shell,然后输入
load         flash         vivi         t
             windows 里面命令行里进入c;\(之前先把mytftp.exe拷到c盘根目录下),输入:
mytftp         -i         192.168.0.15        PUT vivi
             开发板上的VIVI在完成接收新的VIVI文件后将把其烧入VIVI分区中,通过tftp比jtag快多了,一秒钟就搞定了!^_^

下面是超级中断的vivi tftp方式烧写界面
vivi> load flash vivi t
Ready for downloading using tftp...
Waiting...
Setting MAC address...
Type "tftp -i 192.168.0.15       PUT {input-filename}" on the host PC
Press ESC key to exit
Starting the TFTP download...
..
Received 12ea0 Bytes, END...
Download end
Downloaded file at 0x30000000, size = 77472 bytes
Found block size = 0x00014000
Erasing...         ... done
Writing...         ... done
Written 77472 bytes
vivi>

           烧写wince启动的eboot同样采用tftp的方式,
load       flash       eboot       t
mytftp       -i       192.168.0.15       PUT       eboot.nb0

           烧写wince的镜像文件到nand flash,有两种方法,一是直接烧写没有展开的wince镜像nk.bin到开发板,第二种方法是通过platform      builder将展开后的nk.bin烧写到开发板。
           开发板的vivi有三个相关的参数:
wince_part_name        (指定wince镜像nk.bin放置的分区名);
wincesource                (0表示从以太网启动wince,如果用platform builder来引导wince则需选0;
                                     1表示从 nand flash启动);
wincedeploy                (0表示存放的nk.bin文件没展开,1表示展开的,展开后wince启动会比较快)

          方法一,直接烧写
          先定义好参数,输入命令如下:
param       set       wince_part_name       wince
param       wincesource       1        //表示从nand flash启动
param       wincedeploy       0    //表示镜像没展开
param       save
          设好参数后,通过tftp烧写
load       flash       wince       t
mytftp       -i       192.168.0.15       PUT       nk.bin
           vivi将把nk,bin烧写到nand flash中,在直接从nand flash读取nk,bin,展开到sdram中,然后从sdram中启动wince。这样启动时间一般在45妙左右。
          还可以用开发板的vivi提供的wince       rewrite命令,将nk.bin展开后保存到flash中,以后nand flash启动展开后的nk.bin。
           方法二,利用plarform      builder直接下载展开的镜像
先定义好参数,输入命令如下:
param       set       wince_part_name       wince
param       wincesource       0
        //表示从以太网启动
param       wincedeploy       1      //表示镜像已展开
param       save
         接下来需要操作plarform builder,eboot从plarform builder下载nk.bin后将把展开后的文件烧写到nand flash中,以后将直接从nand flash读取展开后的nk.bin并启动,启动时间一般是15秒左右。
         下面是platform builder(一下简称PB),的具体操作看开发板的用户说明。^_^不想打了!


附录:vivi 命令详解

在超级终端界面中键入任意键(除enter外)进入vivi命令界面
vivi>
输入help 可以见到开发板上的vivi 支持的命令
vivi> help
Usage:
      cpu [{cmds}]                            -- Manage cpu clocks
      bon [{cmds}]                            -- Manage the bon file system
      reset                                   -- Reset the system
      param [set|show|save|reset]             -- set/get parameter
      part [add|del|show|reset]               -- Manage MTD partitions
      mem [{cmds}]                            -- Manage Memory
      load {...}                              -- Load a file to RAM/Flash
      go <addr> <a0> <a1> <a2> <a3>           -- jump to <addr>
      dump <addr> <length>                    -- Display (hex dump) a range of memory.
      call <addr> <a0> <a1> <a2> <a3>         -- jump_with_return to <addr>
      boot [{cmds}]                           -- Booting linux kernel
      help [{cmds}]                           -- Help about help?
      display <vga|pal>                       -- Set the display format

      flash [{cmds}]                          -- Manage Flash memory
      wince [rewrite]                                 -- boot wince from ethernet or f
lash by eboot
      os <linux|wince>                        -- set the default os



mem命令 mem系列命令用于对系统的内存进行操作
vivi> mem help
'mem' command usage:
----------command parameter list-----------
mem size -- probe dram size
mem read <addr> -- read a word(4bytes) from special dram address
mem write <addr> <vlaue> -- write a word(4bytes) into special dram
address
mem test <start_addr> <size> [<quiet>] -- memory test
-----------sub command list-------------
mem cmp <dst_addr> <src_addr> <length> -- compare
mem copy <dst_addr> <src_addr> <length> -- copy memory from
<src_addr> to <dst_a
ddr>
mem info -- display memory infomation
mem reset -- reset memory control register
mem search <start_addr> <end_addr> <value> -- search memory address
that contain value in the special memory address range
vivi>mem info
RAM Information:                
Default ram size: 64M                    
Real ram size     : 64M
Free memory       : 61M
RAM mapped to             : 0x30000000 - 0x34000000    (SDRAM映射的地址范围)
Flash memory mapped to    : 0x10000000 - 0x12000000    (Flash映射的地址范围)
Available memory region : 0x30000000 - 0x33de4000     (用户可以使用的有效的内存区域地址范围)
Stack base address        : 0x33debffc     (栈的基地址)
Current stack pointer     : 0x33debc78      (当前栈指针的值)
Memory control register vlaues     (S3C2410的内存控制寄存器的当前值)
       BWSCON = 0x22111d10
     BANKCON0 = 0x00000700
     BANKCON1 = 0x00000700
     BANKCON2 = 0x00001f7c
     BANKCON3 = 0x00000700
     BANKCON4 = 0x00000700
     BANKCON5 = 0x00000700
     BANKCON6 = 0x00018001
     BANKCON7 = 0x00018001
      REFRESH = 0x008e01e9
     BANKSIZE = 0x000000b1
       MRSRB6 = 0x00000020
       MRSRB7 = 0x00000020
vivi>

load命令
load 命令下载程序到存储器中(Flash或者 RAM中)过 load help 可
以显示系统对 load系列命令的帮助提示  
vivi> load help
Usage:
   load <flash|ram> [ <partname> | <addr> <size> ] <x|y|z|t>
        关键字参数 flash 和 ram 用于选择目标介质是 Flash还是 RAM
到 Flash 中还是先要下载到 RAM 中(临时下载到 SDRAM 的起始地址处
0x30000000保存一下,然后再转写入 FLASH),然后再通过 Flash驱动程
序提供的写操作,将数据写入到 Flash中选择了 flash 参数,那名
到底是对 NOR Flash操作还是对 NAND Flash操作,这取决于 bootloader
编译的过程中,所进行的配置,这就要看配置的时候将MTD设备配置成NOR
Flash还是 NAND Flash  
        参数 partname 和 addr size二者选其一,partname是 vivi的 MTD分区表中
的分区名 MTD分区的起始地址;addr和
size是让用户自己选择下载的目标存储区域,而不是使用 vivi的 MTD分区,
addr表示下载的目标地址,size表示下载的文件大小,单位字节,size参数
不一定非要指定得和待下载的文件大小一样大,但是一定要大于等于待下载
的文件的字节数  
        关键字参数 x y 和 z 分别表示从 PC主机上下载文件到 ARMer9系统中,
采用哪种串行文件传送协议,x表示采用XModem协议,y表示采用Ymodem协议,z表示采用 ZModem协议请注意目前该 bootloader    vivi 还没有
实现 ZModem协议,所以该参数只能选择 x和 y  
         关键字参数t应该是开发板vivi增加的,是tftp下载!很好用的!速度比jtag要快多了!
开发板的vivi eboot烧写都要通过load命令
如:要烧写eboot.nb0到flash的eboot分区,首先在超级中断进入vivi的shell,输入
load    flash   eboot    t
使用交叉网线连好PC与开发板,把eboot.nb0拷贝到于mtftp.exe同一目录下,在windows命令行输入
mytftp    -i     192.168.0.15    PUT   eboot.nb0
等待烧写完成即可


    param命令    param系列命令用于对 bootloader的参数进行操作 通过 param help可以
显示系统对 param系列命令的帮助提示  
vivi>param help
Usage:
param help                        -- Help aout 'param' command
param reset                       -- Reset parameter table to default table
param save                        -- Save parameter table to flash memeory
param set <name> <value>          -- Reset value of parameter
param set linux_cmd_line "..."    -- set boot parameter
param set wince_part_name "..."           -- set the name of partition wich wince
will be stored in
param show                        -- Display parameter table
vivi>
param show 可以显示可以设置的参数
vivi> param show                
Number of parameters: 19
name                      :            hex               integer
-------------------------------------------------------------
mach_type                 :         000000c1          193       //机器类型,193表示 S3C2410的开发系统  
media_type                :         00000003           3       //媒介类型,即指示了bootloader从哪个媒介启动起来的  
boot_mem_base             :         30000000              805306368
/*引导 linux 内核启动的基地址映像将被从 Flash 中拷贝到
boot_mem_base + 0x8000 的地址处,内核参数将被建立在
boot_mem_base+0x100的地址处    */


baudrate                  :         0001c200                 115200        //bootloader启动时,默认设置的串口波特率

/*以上三个参数和 Xmodem文件传送协议相关  
xmodem_one_nak表示接收端(即 ARMer9系统这端)发起第一个 NAK信
号给发送端(即 PC主机这端)到启动;
xmodem_initial_timeout表示接收端(即 ARMer9系统这端)启动 XModem
协议后的初始超时时间,第一次接收超时按照这个参数的值来设置,但是超
时一次后,后面的超时时间就不再是这个参数的值了,而是xmodem_timeout
的值;
xmodem_timeout表示在接收端(即 ARMer9系统这端)等待接受发送端(即
PC 主机这端)送来的数据字节过程中,如果发生了一次超时,那么后面的
超时时间就设置成参数 xmodem_timeout的值了  
这三个参数不需要修改,系统默认的值就可以了,不建议用户去修改这几个
参数值    */
xmodem_one_nak            :         00000000                      0
xmodem_initial_timeout    :         000493e0                 300000
xmodem_timeout            :         000f4240                1000000
/*ymodem_initial_timeout
ymodem_initial_timeout 表示接收端(即 ARMer9 系统这端)在启动了
YModem协议后的初始超时时间  
这个参数不需要修改,系统默认的值就可以了,不建议用户去修改这几个参
数值    */
ymodem_initial_timeout    :         0016e360                1500000

/*boot_delay是 bootloader自动引导 linux kernel功能的延时时间*/
boot_delay                :         00300000                3145728

os                        :         WINCE
display                   :         VGA 640X480
ip                        :         192.168.0.15
host                      :         192.168.0.1
gw                        :         192.168.0.1
mask                      :         255.255.255.0
wincesource               :         00000001                      1
wincedeploy               :         00000000                      0
mac                       :         00:00:c0:ff:ee:08
wince part name: wince
Linux command line: noinitrd root=/dev/mtdblock/3 init=/linuxrc console=ttyS0
/*Linux command line 不是bootloader的参数,而是kernel启动的时候,kernel
不能自动检测到的必要的参数些参数需要 bootloader 传递给 linux
kernel Linux command line就是设置 linux kernel启动时,需要手工
传给 kernel的参数    */


part命令 part命令用于对 MTD分区进行操作
vivi> part show
mtdpart info. (7 partitions)
name                offset          size          flag
------------------------------------------------
vivi              : 0x00000000      0x00020000       0    128k
param             : 0x00020000      0x00010000       0     64k
kernel            : 0x00030000      0x001c0000       0      1M+768k
root              : 0x00200000      0x00400000       0      4M
eboot             : 0x00600000      0x00080000       0    512k
wince             : 0x00680000      0x01c80000       0     28M+512k
flashdisk         : 0x02300000      0x01d00000       0     29M
MTD分区是针对 Flash(NOR Flash或者 NAND Flash)的分区,以便于对
bootloader对 Flash进行管理  
part add命令用于添加一个 MTD分区  
命令的详细格式如下:
part add    name    offset    size    flag
参数 name是要添加的分区的分区名  
参数 offset 是要添加的分区的偏移(相对于整个 MTD 设备的起始地址的偏
移,在 ARMer9系统中不论配置的是 NOR Flash,还是 NAND Flash,都只
注册了一个 mtd_info结构,也就是说逻辑上只有一个 MTD设备,这个 MTD
设备的起始地址为 0x00000000);
参数 size是要添加的分区的大小,单位为字节;
参数 flag是要添加的分区的标志,参数 flag的取值只能为以下字符串(请注
意必须为大写)或者通过连接符 |
这个标志表示了这个分区的用途
“BONFS”     作为 BONFS文件系统的分区;
“JFFS2”     作为 JFFS2文件系统的分区;
“LOCK”      该分区被锁定了;
“RAM”       该分区作为RAM使用  
例如,添加新的 MTD分区 mypart  
vivi> part add mypart 0x500000 0x100000 JFFS2
mypart: offset = 0x00500000, size = 0x00100000, flag = 8

part del命令用于删除一个 MTD分区  
命令的详细格式如下:
part del    name
参数 name是要删除的 MTD分区的分区名

bon 命令用于对 BON分区进行操作
BON 分区是只针对 NAND Flash 设备的一种简单的分区管理方式
Bootloader支持BON分区,同时Samsung提供的针对S3C2410移植的linux
版本中也支持了 BON分区,这样就可以利用 BON分区来加载 linux的 root
根文件系统了 MTD 分区和 BON 分区,当 ARMer9 系统配置
了 NAND Flash 作为 MTD 设备,那么 MTD 分区和 BON 分区都在同一片
NAND Flash上  

boot命令用于引导linux kernel启动
vivi>boot help
Usage:
    boot <media_type> -- booting kernel
      value of media_type (location of kernel image
         1 = RAM
         2 = NOR Flash Memory
         3 = SMC (On S3C2410)
    boot <media_type> <mtd_part> -- boot from specific mtd partition
    boot <media_type> <addr> <size>
    boot help -- help about 'boot' command
boot 关键字后面 media_type 必须指定媒介类型,因为 boot命令对不同媒介的处理方式
是不同的,例如如果 kernel在 SDRAM中,那么 boot执行的过程中就可以
跳过拷贝 kernel映像到 SDRAM中这一步骤了  
Boot命令识别的媒介类型有以下三种:
ram 表示从 RAM(在 ARMer9系统中即为 SDRAM)中启动linux kernel,
linux kernel必须要放在 RAM中  
nor 表示从NOR Flash中启动 linux kernel,linux kernel必须已经被烧写到
了 NOR Flash中  
smc表示从 NAND Flash中启动 linux kernel,linux kernel必须已经被烧写
到了 NAND Flash中  
取值参数意义如下:
参数 mtd_part是 MTD分区的名 MTD设备的一个
分区中启动 linux kernel,kernel映像必须被放到这个分区中;
<addr> <size>分别表示 linux kernel起始地址和 kernel的大小为什么要指定
kernel大小呢?因为kernel首先要被copy到boot_mem_base + 0x8000的
地方,然后在 boot_mem_base + 0x100开始的地方设置内核启动参数,要
拷贝 kernel,当然需要知道 kernel的大小啦,这个大小不一定非要和 kernel
实际大小一样,但是必须许大于等于 kernel的大小,单位字节

reset 命令

复位Arm9系统
part 命令
part 命令用于对分区进行操作。通过part help 可以显示系统对part
系列命令的帮助提示。
&#8226; part show 显示分区信息
&#8226; part add partname part_start_addr part_leng flag 添加分区,参数flag为分区类型
&#8226; part del partname 删除分区
&#8226; part save 保存part 分区信息
&#8226; part reset 恢复为系统默认part分区
----------------------------------------------------------------------
load 命令
load 命令下载程序到存储器中(Flash 或者RAM 中)。通过load help可以显示系统对load 系列命令的帮助提示。
&#8226; load flash partname x 使用xmodom 协议通过串口下载文件并且烧写带partname 分区
例:
-load flash vivi x          //注意,这里的vivi是分区名
-load flash kernel x
-load flash root x
&#8226; load ram partname or addr x 使用xmodom 协议通过串口下载文件到内存中
param命令
param 命令用于对bootloader 的参数进行操作。通过param help 可以
显示系统对param 系列命令的帮助提示。
&#8226; param show 命令用于显示bootloader 的当前参数值。
&#8226; param reset 将bootloader 参数值复位成系统默认值。
&#8226; param set paramname value 设置参数值
&#8226; param set linux_cmd_line ”linux bootparam” 设置linux 启动参数,参数linux bootparam 表示要设置的linux kernel 命令行参数。
&#8226; param save 保存参数设置
boot命令
boot命令用于引导linux kernel 启动。通过boot help 可以显示系统对boot命令的帮助提示。
&#8226; boot 默认方式启动
&#8226; boot ram ramaddr lenth 启动sdram 中ramaddr处长度为lenth的linux 内核。
bon 命令
bon 命令用于对bon分区进行操作。通过bon help 可以显示系统对bon
系列命令的帮助提示。bon分区是nand flash 设备的一种简单的分区管理方式。
&#8226; bon part info命令用于显示系统中bon分区的信息。
&#8226; bon part命令用于建立系统的bon分区表。bon分区表被保存到nand flash
的最后0x4000 个字节中,即在nand flash的0x03FFC000 ~0x33FFFFFF 范围内,分区表起始于0x03FFC000。
例如分为3个区:0~192k,192k~1M,1M~
vivi> bon part 0 192k 1M
doing partition
size = 0
size = 196608
size = 1048576
check bad block
part = 0 end = 196608
go 命令
go 命令用于跳转到指定地址处执行该地址处的代码。
&#8226; go addr 跳转到指定地址运行该处程序。

转载于:https://www.cnblogs.com/googlegis/archive/2008/11/28/2979218.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381479.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

吴玉禄他的机器人_中国人— 我们村的机器人

他是北京郊区的一名普通农民&#xff0c;二十多岁的时候突发奇想&#xff0c;一门心思要研制机器人。吴玉禄说&#xff0c;他自己也搞不清楚这个念头到底是哪儿来的。吴玉禄没有受过正规教育&#xff0c;他研制机器人所用的材料&#xff0c;都是些平时收捡来的“破烂”。吴玉禄…

c++ map iterator 获取key_JAVA | Map集合使用详解

引言了解Set集合如何使用和旗下各类比较&#xff0c;这篇我们继续和大家一起看看Map集合的使用机制。MapMap集合介绍 Map(也称为字典、关联数组)是用于保存具有映射关系的数据&#xff0c;保存两组值&#xff0c;key和value&#xff0c;这两组值可以是任何应用类型的数据。  …

联众老板的话

大方向战略一定要对&#xff0c;要想清楚大概没有问题。虽然动手很重要。 不要带着技术去找项目。&#xff08;很深的一句话&#xff0c;我不知道是否对&#xff09; 最好的推广&#xff0c;就是不推广&#xff0c;让用户自己去告诉他的朋友。做到这点很有挑战&#xff0c;但是…

儿童的身高标准对照表_2020“儿童身高标准”出炉,10岁身高140,你家娃达标吗...

文丨小哥(文章原创 &#xff0c;版权归本人所有&#xff0c;欢迎妈妈们转发分享)孩子的身体发育是非常重要的&#xff0c;如果有家长看到自家孩子的身高不如别人&#xff0c;内心多半是非常痛苦的&#xff0c;因为谁都希望自己家的孩子长得高一些。要判断孩子的身高合不合适&am…

python需要联网运行吗_如何暂停在终端中运行的python脚本

我有一个网络爬行 python脚本在终端上运行了几个小时,它不断填充我的数据库.它有几个嵌套的for循环.出于某些原因,我需要重新启动计算机并从我离开的地方继续我的脚本.是否可以保留指针状态并恢复以前在终端中运行的脚本&#xff1f; 我正在寻找一个可以在不改变python脚本的情…

晚上答辩的理论知识准备

web2.0介绍&#xff08;对比web1.0&#xff09;&#xff1a; 有个人这么说的&#xff08;呵呵&#xff0c;引用一下&#xff0c;觉得他说的不错&#xff09; web1.0还是web2.0&#xff0c;不要去管二者的定义&#xff0c;那将毫无意义&#xff0c;WEB1.0也好&#xff0c;2.0也好…

eclipse中图片大小用什么单位_建筑工程行业中各个单位都是什么样的关系?

大家好&#xff0c;我叫开发商&#xff0c;最近我很烦恼&#xff0c;因为我爱上了一位名叫“国有土地”的女孩儿。故事就此开始。国有土地的父亲叫“国家”&#xff0c;权利很大&#xff0c;因为有很多其他人也喜欢国有土地&#xff0c;如果要娶到她&#xff0c;要送很多聘礼。…

java 关注公众号没有调接口_高频面试题:接口和抽象类的区别

作为一个基础的Java高频面试题&#xff0c;是所有Java面试者必须烂熟于心的。当然不能死记硬背&#xff0c;可以通过实际地写几个小demo&#xff0c;边实际操作边理解&#xff0c;既能感受到编程的快乐&#xff0c;更重要的是真的理解记住了二者的区别。此外&#xff0c;本篇文…

添加网页标题

创建协作—>工作组网站 的网站后&#xff0c;网站标题可能无法设置。 可以在SPD打开修改的页面&#xff0c;加入下面的信息 <asp:Content ContentPlaceHolderId"PlaceHolderPageTitle" runat"server"> 标题 </asp:Content> 这样就能将页面…

电池供电的电容麦_电容话筒受潮了怎么办?

听说许多人对电容话筒不了解&#xff0c;有人以为电容话筒可以直接插在电脑主板上用&#xff0c;有些人以为电容话筒可以插在卡拉ok的大两芯话筒口上用&#xff0c;有人以为电容话筒一定要独立的48V电源盒才能用等等。以上问题的答案全都是&#xff1a;不是。电容话筒最怕什么&…

c 调用openoffice word转pdf_批量 Word 转 PDF 方法

- START -手上有近百个 Word 文档需要转为 PDF, 怎么办&#xff1f;难道要一个一个的导出吗&#xff1f;确实&#xff0c;Office2010 以后版本的 Word 可以直接导出 PDF&#xff0c;是时候让 Python 来替我们干这个重复性的活了&#xff01;直接上代码&#xff1a;from win32co…

COM原理及应用之可连接对象

1、COM的高级特性 COM规范中有一些高级特性&#xff0c;如可连接对象、永久存储、一致的数据传输等&#xff0c;使COM规范具有更强的生命力&#xff0c;它们也是OLE的基础&#xff0c;但它们的应用又不仅仅局限于OLE&#xff0c;这些高级特性已经广泛应用于Windows操作系统上。…

hadoop put命令的格式_HDFS常用命令

一.HDFS命令行Hadoop help命令的使用1.hadoop -help查询所有Hadoop Shell支持的命令2.distcp这是Hadoop下的一个分布式复制程序&#xff0c;可以在不t同的HDFS集群间复制数据&#xff0c;也可以在本地文件间复制数据。hadoop distcp将/test/test.txt文件复制到/test/cp下面&…

python的opencv模块_OpenCV Python - 没有名为cv2的模块(再次)

我刚刚在Ubuntu 14.04上安装了OpenCV 3.0。它的工作原理。 根据官方教程&#xff0c;安装OpenCV。#!/bin/bashd #https://help.ubuntu.com/community/OpenCV version"$(wget -q -O - http://sourceforge.net/projects/opencvlibrary/files/opencv-unix | egrep -m1 -o \&q…

081212 晴

我把今天晚上这边的中国人忘年会取消了 但是应该是需要加班的 争取今天早点回家转载于:https://www.cnblogs.com/loverain/archive/2008/12/12/1353413.html

freemarker html 引入script_HTML编码规范

一、前言HTML作为描述网页结构的超文本标记语言&#xff0c;在百度一直有着广泛的应用。本文档的目标是使HTML代码风格保持一致&#xff0c;容易被理解和被维护。二、代码风格2.1. 缩进与换行​[强制] 使用 4个空格做为一个缩进层级&#xff0c;不允许使用 2个空格 或 tab字符。…

python制作词典_我的词典我做主!python3.5生成自己的词性词典

由于朋友需要做文本分析&#xff0c;前提是要将文本中的名词和动词剔除掉&#xff0c;但没有现成的名词和动词的txt格式的词典。于是找来了一个英汉词典&#xff0c;根据每一行出现的adj、adv、n、prep等&#xff0c;使用正则表达式匹配需要的词性&#xff0c;并将其追加写入到…

微软的几个职位简介

说起来比较惭愧&#xff0c;自己混微软圈子也不短了&#xff0c;但是今天还是第一次认真思考微软的这几个比较常用的职位&#xff0c;SDE、SDET、PM&#xff0c;仅供参考下&#xff0c;网上查的&#xff0c;如果有不对或者不全面的地方&#xff0c;欢迎指教 Dev&#xff1a;正式…

写入null_ArrayList并发写出现Null值

ArrayList并非线程安全的容器&#xff0c;这一点大家可能都非常清楚&#xff0c;但是在并发写入的情况下&#xff0c;不安全的情况具体有哪些&#xff0c;大家是否很清楚呢&#xff1f;本篇文章重点聊一下出现null的情况&#xff0c;然后对于其他并发写的安全做一个简单的叙述我…

c语言函数调用数组_第七讲:C语言基础之函数,第二节,实现汉诺塔

本文约2200字&#xff0c;主要讲了C语言基础之函数&#xff0c;递归&#xff0c;数组作为函数参数以及案例、练习题等。带你进入C语言的世界&#xff0c;入门C语言&#xff0c;后边将持续更新。可以收藏学习。想了解C语言基础之函数&#xff0c;函数的基本概述&#xff0c;函数…