
嵌入式软件开发
caimouse
在IT行业有20多年的经验。拥有20多年的C和C++开发经验,5年以上Python开发经验,资深数据库开发、上百G数据库优化经验。曾经任职嵌入式工程师、P2P开发工程师、银行信用卡交易系统工程师、全自动化电池测试部门经理。
展开
-
在linux里安装python3.8.3版本
由于旧版本的linux里安装的是3.5版本,现在官方已经升级最新的版本了,为了跟上了最新的科技,跟上最新步伐,那么就需要与时俱进,安装和使用最新的版本。下面就来记录一下升级python3.8.3版本的过程。第一步是先安装依赖包:sudo apt install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel原创 2020-05-30 21:09:41 · 6596 阅读 · 5 评论 -
Linux访问Windows共享目录
近来要使用Linux来开发一些程序,需要从百度云盘上下载一个大的开发源码包,由于在ubuntu 16.04上运行百度网盘软件失败,只能到win上下载,下载完之后,发现这个文件比较大,居然有6G大小,那么就需要从win上拷贝到linux的开发电脑上。这时就需要访问win上的共享目录,那么linux上就需安装一个软件,才可以访问win上的共享目录,这个软件就是:samba-client,需要使用下面的命令来安装:sudo apt install samba-client安装完成之后,就可以使用ubuntu原创 2020-05-30 18:31:20 · 428 阅读 · 0 评论 -
龙芯软件开发(16)-- 内存参数读取
前面已经介绍通过读取内存条上的EEPROM来获取内存配置参数的,现在来仔细地分析这段代码是怎么样实现的。li a1, 0x01: li a0,0xa1 bal i2cread nop 上面这段代码,把0设置给a1,然后把0xa1设置给a0,然后就调用I2C的子函数来读取数据。下面去看函数i2cread是怎么样读取I2C数据。 /* a0: s原创 2007-01-02 12:37:00 · 6650 阅读 · 0 评论 -
龙芯软件开发(24)-- PCI设备初始化2
在汇编的代码里,已经进行了串口初始化,在这里更进一步初始化串口,它是通过调用下面的代码实现的:#define SUPERIO_CFG_REG 0x85上面定义南桥里串口寄存器地址。 static void initSerial(void){ pcitag_t tag; char confval,val; /*使能串口 * 这个需要在汇编原创 2007-01-14 23:44:00 · 5527 阅读 · 0 评论 -
龙芯软件开发(25)-- PCI设备初始化3
上面继续初始化南桥之后,再接着下来,就要初始化PCI总线上其它的设备了。看下面的代码: CPU_ConfigCache();上面重新配置龙芯2E的缓存。 _pci_businit(1); /* PCI bus initialization */上面继续初始化PCI总线上的设备,这个函数里要初始化完成所有其它连接到PCI总线上的设备。接着看这个函数的代码如下:原创 2007-01-16 00:37:00 · 5007 阅读 · 3 评论 -
龙芯软件开发(26)-- PCI设备初始化4
继续来分析PCI设备的搜索过程,下面就是通过调用搜索程序来实现的。for(i = 0, pb = _pci_head; i pci_roots; i++, pb = pb->next) { _pci_scan_dev(pb, i, 0, init); } 接着去看看函数_pci_scan_dev的实现:static void_pci_sc原创 2007-01-19 23:18:00 · 5208 阅读 · 0 评论 -
龙芯软件开发(27)-- 网络初始化
现在的世界,都是网络的世界了。没有网络是不可想像的,失去太多激动人心的时刻。没有网络,就不可能方便地交流数据,BLOG也不可发达到目前这种程度。就是在PMON的调试里,使用网络也是非常方便的。比如想开发PMON运行的程序,就可以使用网络加载,比如TFTP加载程序。这样就不用每次去写硬盘,或者写到其它地方去,只要把网络连接好,就可以在其它机器里编译,然后通过网络把程序放到目标机器里运行了,这样做会大原创 2007-01-23 22:15:00 · 4747 阅读 · 0 评论 -
龙芯软件开发(28)-- 显示卡初始化
在上一次里,已经说到初始化网络,在那里提到调用一个函数tgt_devconfig来初始化其它重要的设备。这其中就有一个重要的设备要初始化的,它就是显示卡。下面就来仔细地阅读这个函数的代码,如下:voidtgt_devconfig(){#if NMOD_VGACON > 0 int rc;#if NMOD_FRAMEBUFFER > 0 unsigned l原创 2007-01-24 21:47:00 · 6761 阅读 · 2 评论 -
龙芯软件开发(29)-- 键盘初始化
如果你的记性好,也许看到前面有一些键盘初始化了,但那里的初始化是设置南桥接收键盘数据输入和输出而已,只是一个接口,或者是一个代理。在这里才是开始真正初始化键盘,让键盘工作在合适的方式。在电脑里,显示卡输出信息给人看,而键盘扮演着另一个角色,就是让人们可以输入东西,控制电脑做各种各样的事情。虽然电脑的历史也有60年了,并且技术也在飞速地发展,但是键盘还是作为重要的输入方式。希望我们大家能发明一种更好原创 2007-01-25 23:42:00 · 5166 阅读 · 0 评论 -
龙芯软件开发(30)-- 自动加载操作系统
龙芯BIOS的最终目的,还是需要加载一个更好的操作系统。当你在启动时不按下任何按键,pmon就会自动地加载缺省设置的操作系统。它的实现代码如下:#ifdef AUTOLOAD s = getenv ("al"); autoload (s);#else s = getenv ("autoboot"); autorun (s);#endif原创 2007-01-26 22:21:00 · 5205 阅读 · 0 评论 -
龙芯软件开发(22)-- 初始化环境参数
由于不同的主板,芯片配置的不一样,因此参数也不一样,那么就要保存一些参数在Flash里面,以便配置硬件。现在就看关于这方面的代码,如下:voidenvinit (){ int i; SBD_DISPLAY ("MAPV", CHKPNT_MAPV); /* extract nvram variables into local copy */原创 2007-01-08 21:55:00 · 5288 阅读 · 0 评论 -
龙芯软件开发(23)-- PCI设备初始化
目前在个人电脑里,主板上使用局部总线技术把不同的设备连接在一起,这样就可以随时添加设备到总线上。比如主板上一般都有很多PCI插槽,可以插入显示卡、声卡、网卡以及符合PCI总线标准的其它设备。当然,还有很多低速的外围设备不能直接跟PCI局部总线相连接的,比如IDE硬盘、软盘、USB、键盘、鼠标等等,这样就需要一样东西把这些设备转换才能连接到PCI局部总线上,这个东西就是南桥的芯片。在龙芯电脑里采用的原创 2007-01-11 00:05:00 · 5684 阅读 · 0 评论 -
龙芯软件开发(17)-- 初始化龙芯2E缓存
自从RISC类型的CPU开发出来以后,拥有缓存的CPU已经越来越普遍了,从嵌入式的CPU到桌面通用的CPU,或者大型机群的CPU,都具有大量的缓存。由于很多程序都具有局部循环特性,使用缓存就可以大大地提高CPU效率。比如像下面的程序: int nSum = 0;for(int i = 0; i { nSum += i;} 上面这段程序,就可以在缓存里保存下来原创 2007-01-03 22:13:00 · 6671 阅读 · 0 评论 -
分享画直线的代码
这段代码太好了,跟大家一起分享它。//左上角到右下角画直线.////caimouse 2007/02/11//bool CSurface::LeftTopToRightBottom(int nXStart,int nYStart,int nDeltaX,int nDeltaY){ // int nDelta = CNOS_NS::Max(nDeltaX,nDeltaY); //计算判断符号原创 2007-02-12 13:56:00 · 6031 阅读 · 1 评论 -
龙芯软件开发(21)-- 调试与功能选择
继续分析原来的代码,现在已经进入一个比较重要的函数dbginit(),因此这个函数相当复杂的功能调用。 /* * Init PMON and debug */ cpuinfotab[0] = &DBGREG; dbginit(NULL);第一行代码cpuinfotab[0]保存DBG寄存器值,主要包括32个通用寄存器和CP0的32寄存器,以及原创 2007-01-07 19:44:00 · 4996 阅读 · 0 评论 -
龙芯软件开发(14)--串口输出
串口输出东西太重要了,因此,再来仔细地看看串口调用的其它函数,这样做到一目了然,没有别的疑问在里面,就可以做到庖丁解牛游刃有余。像下面的函数:PRINTSTR(" CONFIG=")上面这句,就是输出一串字符到串里显示出来。其实它是一个宏定义,那么它是怎么样实现输出字符串到串口上的呢?立即去找到它的宏定义,然后把它展开,最后看看它是怎么样的。宏定义如下:#define PRINT原创 2006-12-31 14:52:00 · 8210 阅读 · 1 评论 -
龙芯软件开发(18)-- 乾坤大挪移,从ROM到RAM
前面已经初始化内存和龙芯的缓存,那么现在已经差不多把新房子已经建立好了,要进入新房居住了。在SDRAM里的存取速度比ROM里快很多,并且可以随时修改数据,而在ROM是不能修改的,就算可以修改,也是非常慢的。从上面初始化缓存回来后,就运行到下面的程序:#####xuhua########open cp1 #if 1 mfc0 t0,COP_0_STATUS_REG原创 2007-01-04 22:36:00 · 7661 阅读 · 1 评论 -
龙芯软件开发(20)-- 频率和初始化实时时钟
前面已经介绍进入C语言世界,就会实现更多的功能,支持更多的应用。现在就来仔细地分析源程序,并且理解各部份功能实现。首先来看看下面的函数:/* * Returns the external clock frequency, usually the bus clock */inttgt_cpufreq(){ if(md_cpufreq == 0) {原创 2007-01-06 23:43:00 · 4789 阅读 · 0 评论 -
龙芯软件开发(15)-- 搬家前的准备
龙芯软件开发(15)-- 搬家前的准备 任何人在搬家前,都需要把新房子修建好,然后再经过装修才能住到新房子里,然而这里的启动程序也不例外,需要把自己的房子先修好,并且通过装修才会住进里面。当然,程序所需要的房子,不是普通的房子,而是内存空间。由于在ROM运行的速度都是比较慢,并且空间有限,不能随时更改ROM里的内容。同时为了下一阶段作好准备,就需要把ROM里的引导程序搬到内存里运行。但是S原创 2007-01-01 01:04:00 · 5600 阅读 · 0 评论 -
龙芯软件开发(19)-- C函数入口
经历了漫长的汇编之路,最终走到光明的C世界了,进入高级语言环境,会让开发更方便,写更少的语句就可以实现更多的功能。从这里开始,就初始化PCI局部线所有设备,初始化南桥所有的功能,初始化IDE硬盘,初始化网络,初始化显示卡,并进入响应命令阶段。下面就来分析C函数部份功能,当然它还有时需要调用汇编子函数才能实现特殊的功能。从上次分析移动代码里,就知道代码已经移到0x8000 0000开始运行了原创 2007-01-05 23:25:00 · 5600 阅读 · 0 评论 -
试验开发第三代操作系统
随着计算机技术的发展,技术越来越先进了,具有强劲3D运算的显示卡和大容量低价内存的到来,要进入第三代操作系统开发了。 以DOS和unix命令行的操作系统为代表的第一代操作系统,以Windows和X Windows等为代表的第二代2D图形操作系统。那么第三代操作系统,就是以3D界面为主的操作系统就快要到来了。 为了实现第三代操作系统的强大功能,就应使用C++这样的高级语言来开发,才可原创 2007-01-29 13:03:00 · 10794 阅读 · 26 评论 -
龙芯软件开发(31)-- PCI设备查找细节
这段时间,又在对龙芯盒子的PCI的总线进行编程。目前有了一点点进展,发现PCI总线也是很复杂的东西。由于所有其它外设都是挂在PCI总线上,如果要对外设进行编程,就得对PCI比较了解,并且可以对它编程。 PCI总线是一条平等的总线,所有设备都是平等的。在某一时刻会有一个设备是主设备。PCI的设备是一棵树的结构,以CPU为根,桥设备为树干,其它设备为叶子。由于PCI的设备是即插即用的,因此它的原创 2007-03-14 13:06:00 · 6708 阅读 · 4 评论 -
龙芯软件开发(37)- USB协议深入分析 返回设备描述符
bcdUSB是USB发布的协议版本。也就是本设备能适用于那种协议,目前USB主要有两个版本,一个是1.10,一个是2.10版本。在本设备里,采用了1.10的协议版本。由于这个字段是采用BCD编码,所以1.10的表示为0x0110的格式,按小端格式输出来,就变成10 01的显示了。 bDeviceClass是设备分类。当它的值是0时,表示所有接口在配置描述符里,并且所有接口是独立的。当它的值原创 2007-04-13 14:27:00 · 5411 阅读 · 0 评论 -
[龙讯8号]龙芯产品再开新花
LSLSLSLSLSLSLSLSLSLSLSLSLSLSLSLS === 龙讯 === 龙芯资讯杂志 第8号 2007年3月3日发布 http://loongsoon.blog.sohu.com LSLSLSLS转载 2007-05-04 18:02:00 · 6037 阅读 · 0 评论 -
[龙讯7号]国芯发布龙芯电脑引争议
LSLSLSLSLSLSLSLSLSLSLSLSLSLSLSLS === 龙讯 === 龙芯资讯杂志 第7号 2007年2月10日发布 http://loongsoon.blog.sohu.com LSLSLSLSL转载 2007-05-04 18:01:00 · 9959 阅读 · 0 评论 -
[龙讯增刊2号]龙芯能干啥?
LSLSLSLSLSLSLSLSLSLSLSLSLSLSLSLS === 龙讯 === 龙芯资讯杂志 增刊第2号 2007年2月7日发布 http://loongsoon.blog.sohu.com LSLSL转载 2007-05-04 18:00:00 · 5115 阅读 · 1 评论 -
[龙讯6号]龙芯2E首次公布设计细节
LSLSLSLSLSLSLSLSLSLSLSLSLSLSLSLS === 龙讯 === 龙芯资讯杂志 第6号 2007年2月4日发布 http://loongsoon.blog.sohu.com LSLSLSLS转载 2007-05-01 21:46:00 · 4203 阅读 · 0 评论 -
[龙讯4号]龙芯图谋你的客厅
LSLSLSLSLSLSLSLSLSLSLSLSLSLSLSLS === 龙讯 === 龙芯资讯周刊 第4号 2007年1月21日发布 http://loongsoon.blog.sohu.com LSLSLSLSL转载 2007-04-30 23:50:00 · 13571 阅读 · 0 评论 -
[龙讯3号]龙芯电脑即将店面销售
LSLSLSLSLSLSLSLSLSLSLSLSLSLSLSLS === 龙讯 === 龙芯资讯周刊 第3号 2007年1月14日发布 http://loongsoon.blog.sohu.com LSLSL转载 2007-04-30 23:47:00 · 7566 阅读 · 0 评论 -
[龙讯增刊1号]龙芯哪里来
LSLSLSLSLSLSLSLSLSLSLSLSLSLSLSLS === 龙讯 === 龙芯资讯杂志 增刊第1号 2007年2月2日发布 http://loongsoon.blog.sohu.com LSLSLSLSL转载 2007-05-01 21:45:00 · 5580 阅读 · 0 评论 -
[龙讯2号]我用带有胡伟武签名的龙芯电脑
LSLSLSLSLSLSLSLSLSLSLSLSLSLSLSLS === 龙讯 === 龙芯资讯周刊 第2号 2007年1月7日发布 http://loongsoon.blog.sohu.com LSLSLSLS转载 2007-04-30 23:45:00 · 11267 阅读 · 0 评论 -
龙芯软件开发(40)- USB协议深入分析 字符串描述符
上一次说到把配置描述符返回给主控器那里了,现在接着下来,就会收到主控器发来字符串描述符。如果在设备描述符那里指定没有字符串描述的话,在这里是不会收到字符串描述符的。由于我在设备描述符里指定有字符串描述符的偏移地址,因此,就收到主控器发出请求字符串描述符。收到的数据如下:80 06 00 03 00 00 FF 00 bmRequestType是80,表示方向USB设备发送给主控器,接收设备原创 2007-04-25 18:57:00 · 6454 阅读 · 4 评论 -
龙芯软件开发(39)- USB协议深入分析 配置
前面已经介绍设置USB的设备地址,接着下来是做什么呢?其实有了设备地址后,主控器还会再次发送获取上面已经读取的设备描述符下来,如下:80 06 00 01 00 00 12 00 然后USB设备也再次回应它,但这次发送的长度是0x0012了,不再是第一次64个字节长度了。接着USB设备就返回下面的描述符给主控器,也就是第一次已经发送的设备描述符,如下:12 01 10 01 00原创 2007-04-23 13:23:00 · 6453 阅读 · 0 评论 -
龙芯软件开发(38)- USB协议深入分析 设置USB地址
前面已经解释主控器怎么样发送设备描述符下来,然后设备返回相应的设备描述符。下一步主控器的动作是做什么呢?由于在USB总线上的设备有很多,为了区分不同的设备通讯,就需要给每个设备分配一个地址,这跟网络中的IP地址是一样的,或者跟MAC地址也是一样的。因而,接着下来就是主控器分配地址给设备,USB的设备地址是从1开始到127。下面就是接收到主控器发下来的数据包:00 05 01 00 00 00原创 2007-04-18 13:50:00 · 6729 阅读 · 0 评论 -
龙芯软件开发(36)- USB协议深入分析 返回设备描述符
回应设备描述符上一次已经介绍怎么样收到主控器的获取设备描述符的数据,这里就解释怎么样发送回应数据给主控器。先从USB协议里找到标准设备的定义,我把它用C语言定义如下:typedef struct _USB_DEVICE_DESCRIPTOR { BYTE bLength; BYTE bDescriptorType; WORD bcdUSB; BYTE bDeviceCl原创 2007-04-12 13:36:00 · 5547 阅读 · 0 评论 -
龙芯软件开发(34)- USB协议深入分析 设备描述符配置包
设备描述符配置包在USB通讯里,从主控器发出来的第一个配置包就是设备描述符配置包,目的只有一个,就是获取插入的USB属性,以便加载合适的驱动程序。现在就来详细地分析一下设备描述符包的定义。在USB2.0的协议里找到9.3 USB Device Requests里就找到这个结构的定义,这里我使用C的定义结构如下:typedef struct _USB_SETUP_PACKET原创 2007-04-10 13:45:00 · 7286 阅读 · 0 评论 -
龙芯软件开发(35)- USB协议深入分析 设备描述符配置包
wValue是根据不同的请求而设置不同的值。一般就是传送参数给设备标明这是什么请求。在上面GET_DESCRIPTOR获取设备描述符里,它的值是00 01。在GET_DESCRIPTOR里这个字段的低字节表示描述符的索引,高字节表示描述符的类型。高字节的类型如下:DEVICE 1CONFIGURATION 2STRING原创 2007-04-11 18:03:00 · 7084 阅读 · 0 评论 -
龙芯软件开发(33)-- USB协议深入分析
04 03 09 04 返回语言标识。USB_EVT_IN,USB_DataInStageUSB_DataInStage,cnt=0,EP0Data.Count=0 1. 收到字符串描述符包 Setup m=0,n=0,val=4580 06 2C 03 09 04 FF 00 收到PC需要产品字符串。 REQUEST_STANDA原创 2007-03-24 14:56:00 · 6389 阅读 · 1 评论 -
龙芯软件开发(32)-- USB协议深入分析
现在非常流行USB设备,时时刻刻都在我们身边,比如使用U盘,使用MP3,使用手机,都需要与PC的USB通讯。通过USB的接口,使用我们的生活非常方便了,想什么时候听歌,就可以插入MP3到PC机那里,然后再从PC上下载MP3。这个过程在用户看来是非常的简单,不需要安装驱动程序,不需要断掉PC机的电源。真正体现“科技以人为本”的思想。使用这么方便的U盘或者MP3,那么我们又需要去问个为什么了,为什么会原创 2007-03-24 14:54:00 · 11802 阅读 · 6 评论 -
学习ARM开发(1)
#1 学习ARM开发(1)做任何事情之前,一定要想好目标。没有目标的事情是做不好的,也做不成。我的目标就是学习ARM开发,当然是深入的学习。目标如下 :1、学习ARM开发环境。2、学习ARM指令。3、学习ARM汇编。4、学习BOOTLOADER.5、学习uClinux编译和使用。所有上面这些都基于三星的s3c44b0开发板进行的。原创 2005-07-16 14:17:00 · 5679 阅读 · 1 评论