自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

No detail can be too detailed

思则变 变则通 通则达

  • 博客(32)
  • 资源 (5)
  • 收藏
  • 关注

原创 nios软核cpu中架构类shell的一种解决方式『linux 系统函数调用的方法』

在nios中要实现一个类shell的交互系统,用户在终端可以通过命令调用系统函数。 想到linus当年在写下系统函数调用时,其实基于的思想是一样的,就是查表,每一种系统函数都对应一种中断服务号,然后通过0x80系统调用进入内核,然后查表,这里就可以找到对应的内核系统函数,回顾一下linus是怎么做到的。 就以系统函数open为例子int open(const char * filename, i

2015-07-31 10:25:32 676

原创 小编程题--解决一维迷宫问题

题目源于计蒜客,如下题目给定一个非负整数数组,假定你的初始位置为数组第一个下标。数组中的每个元素代表你在那个位置能够跳跃的最大长度。请确认你是否能够跳跃到数组的最后一个下标。例如:A = [2,3,1,1,4],return true.A = [3,2,1,0,4],return false.格式:第一行输入一个正整数n,接下来的一行,输入数组A[n]。如果能跳到最后一个下标,输出

2015-07-29 12:05:46 1288 1

原创 解决关于哈夫曼编码计算带权路径长度问题

这是在做一道编程提示遇到的,学习了一位博主的编码,其中有些问题未能理解,分析解决掉。 首先什么是哈夫曼树: 哈夫曼树,又称最优二叉树,是一类带权路径长度最短的树。 也就是根节点到节点的中的长度最小,当然条件就是,每条路径都是有权重的, 所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的 路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的带权路径长度记为WP

2015-07-24 16:54:24 7244

原创 编写nios-shell时想到的问题-回车vs换行

在编写nios上类shell用户交互代码时,因为要检测终端输入字符,所以想到了这个问题,故分析之。 回车符的ascii码,ASCII码13 ‘\r’ 换行符的ascii码,ASCII码10 ‘\n’ 符号 ASCII码 意义 \n 10 换行NL \r 13 回车CR回车 \r 本义是光标重新回到本行开

2015-07-23 15:35:31 831

原创 改进基于优先队列的最短路径搜索『洪水流思想的体现』

这问题是在博客上看到的,为此学习一下,然后在他的基础上,修改完成迷宫洪水流算法的实现题目是Problem DescriptionAngel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is described as a N * M (N, M <= 200) matrix. There are WAL

2015-07-22 17:09:02 826

原创 STL--关于权重问题的解决

在A star算法中就出现了权重问题,是数据结构中涉及到权重或者说是优先级的就是优先队列了,为此分析一下,这类问题的共性。在STL中queue头文件中,有priority_queue的类 这是优先队列,在涉及权重问题时可以使用 一般的C++这个类使用时, 1、 priority_queue pq; 这时,库默认是将数值最大的作为优先级最高的输出 2、priority_queue<int,

2015-07-21 21:48:17 552

原创 linux之return和exit引发的大问题(vfork和fork)

在coolshell.cn上看到的一个问题,为此拿来研究一下。 首先 看看return和exit的区别 在linux上分别跑一下这个代码int main(){ return 0; //exit(0);}return 0 exit(0) return在返回时会对栈进行操作,将栈清空,然后跳转到调用函数的下一条指令,而exit没有对栈操作,具体exit怎么运行,

2015-07-21 13:41:40 915

原创 GNU LIBC源码学习之strcmp

比较两个字符串我的代码块#include <string.h>int my_strcmp(const char* s1,const char * s2){ if((s1==NULL)||(s2==NULL)) return 0; while(1) { if((*s1=='\0')||(*s2=='\0')) break; if(*s1>*s2) return 1;

2015-07-20 20:58:09 1113

原创 每天小练笔10-小和尚挑水(回溯法)

题目 某寺庙里7个和尚:轮流挑水,为了和其他任务不能冲突,各人将有空天数列出如下表: 和尚1: 星期二,四; 和尚2: 星期一,六; 和尚3: 星期三,日; 和尚4: 星期五; 和尚5: 星期一,四,六; 和尚6: 星期二,五; 和尚7: 星期三,六,日; 请将所有合理的挑水时间安排表 思路 回朔法求解 回朔法即每进行一步,都试图在当前部分解的基础上扩大该部分解。扩大时,首先

2015-07-20 17:07:02 1490

原创 回溯算法的一些案例分析(c代码实现)

回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。用回溯算法解决问题的一般步骤为: 1、定义一个解空间,它包含问题的解。 2、利用适于搜索的方法组织解空间。//比如数组等 3、利用深度优先法搜索解空间。 //一般深度优先可以利用 递归实现 4、利用限界函数避免移动到不可能产生解的子空间。 //每次递归判断是否符

2015-07-20 13:59:45 1069

原创 重现二叉树非递归算法的构建过程

递归完成树的遍历很好理解,倘若是非递归,不要告诉我算法导论上有,我要maker的思考过程 既然递归能够实现,那就模拟递归。递归的本质就是压栈。 首先简单树,观察递归的压栈过程 A、B即使节点的数据也代表节点的地址。 对这棵树使用递归完成前序创建#include <iostream>using namespace std;struct treenode;typedef struct

2015-07-17 13:53:10 714

原创 重现二叉搜索树递归构建的过程

二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。简单而言就是 左边的小于中间 中间的小于右边首先建立几个数据变量#define TYPE i

2015-07-16 15:20:50 1161

原创 FPGA实现网络通信时的网络字节序问题

在上位机软件发送字符abcd 在鲨鱼上抓包 用逻辑分析仪从FPGA网络接收管脚分析 数据接收后存储在位宽为8bit的ram中 从ram中读32bitUDP数据为64636261根据以上那个现象, 之前有个理解偏差, 所谓的大端小端就是一个读数的顺序不一样, 对于UDP数据段而言,其数据组成格式是有双方来定的, 只有协议的头等等,是按照大端来组织,为了是在不同cpu体系中进行通

2015-07-16 09:18:24 1666

原创 每天小练笔9-数字基(递归应用)

题目 描述: 求整数的Root:给定正整数,求每位数字之和;如果和不是一位数,则重复; 题目类别: 数组 难度: 初级 运行时间限制: 10Sec 内存限制: 128MByte 阶段: 入职前练习 输入: 输入任意一个或多个整数 输出: 输出各位数字之和,直到和为个位数为止(输入异常,则返回-1) 多行,每行对应一个输入数据的结果。 样例输入: 25 8

2015-07-15 14:00:14 511

原创 linux0.12之内核代码之『深入追踪变参函数的实现』

在内核段要显示,需要printk.c函数集 看看printk这个函数int printk(const char *fmt, ...){ va_list args; int i; va_start(args, fmt); i=vsprintf(buf,fmt,args); va_end(args); console_print(buf); return i;}看看其中的变量以及函数

2015-07-14 22:07:07 570

原创 每天小练笔8-模拟进程调度

题目 操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中, 系统任务的优先级 < 50,用户任务的优先级 >= 50且 <= 255。优先级大于255的为非法任务,应予以剔除。 现有一任务队列task[],长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。 函数scheduler实现如下功能: 将task[] 中的任务按照系统任务、用户任务依次存放

2015-07-14 20:25:56 590

原创 GNU-LIBC源码学习之strlen

问题来源于一道很小的编程题,要求写出strlen的函数。 很来很容易str为字符指针 int cnt=0; while(*str != '\0') cnt++; return cnt;在vs2008上顺利执行,但是在题目系统中出问题 题目给的要求是 1000ms 10000K 那就是这种算法超时了, 想想算距离,除了这种计数

2015-07-13 21:33:30 1820

原创 函数的指针参数传出时遇到的问题

一般而言,函数传出值是没有什么问题的, 一般是这样 要将值传出来,用指针; 要将指针传出来,用二级指针; 最明显的错误是下面的void test(char a,char b){ b=a; }int main (){ char c=‘A’; char d='B'; test(c,d); cout<<b<<endl; return 0;

2015-07-10 14:59:41 762

原创 c与c++中一些类型的转化总结(持续更新)

一般写小代码时,常常是c和c++不分的,但是有时会遇到类型转换的问题,比如输入 string ,然而处理函数的参数是char*型,之间需要转换。收集一下网上资料,总结一下。因为还没有时间去研究stl源码,暂时先用着吧。 一、string转char* 1、std::string::c_str Returns a pointer to an array that contains a null-t

2015-07-10 13:18:43 885

原创 深入分析由前序和中序重构二叉树问题

由下面的这棵树来分析 前序遍历: ACFKDBUMWS 中序遍历: KFDCAUBWMS实际前序遍历的组成是 根节点+左边+右边 实际中序遍历的组成是 左边+根节点+右边step1 前序遍历的第一个为根结点 ,所以A为根节点, step2 在中序中找到A,分为两组 KFDC 根节点左边 UBWMS 根节点右边 而前序遍历中也可以分开了(只是顺序不一样,个数一样) C

2015-07-10 09:24:39 826

原创 linux0.12之内核代码之『深入追踪fork函数』

在(1)中简单分析了内核中fork的实现,那从用户层去分析fork函数的实现。 目前已经知道这是一个系统调用函数,看看能不能找到fork函数原型,很不幸花了十分又十分钟,还是没有找到。 但是在内核init中的main.c有调用fork函数,就以此为线索吧。void main(void) /* This really IS void, no error here. */{ /* The

2015-07-09 08:55:36 998

原创 linux0.12之内核代码signal.c说明

首先理论理解一下 信号是一种“软件中断”处理机制。信号机制提供了处理异步事件的方法。 信号也叫软中断。注意,信号只是用来通知某进程发生了什么事件,并不给该进程传递任何数据。 内核代码中使用无符号长整型(32bit)编码信号,被定义在include/signal.h中typedef unsigned int sigset_t; /* 32 bits */#define _NSIG

2015-07-08 15:35:07 635

原创 C函数的模拟重载实现说明

在研究printf是,这是一个变参函数,是否可以用这个特性写一个重载函数,当然只是实现模拟。 谷歌说c++实现函数重载是这样的,C++ 实现函数重载很大程度上依赖与编译器对函数名的 Mangling(损坏,破坏),即 C++ 的源代码被编译后同名的重载函数名字会被破坏,一般是在原函数名前后加上特定的字符串,以区分不同重载函数,然后在调用的时候根据参数的不同选择合适的函数。从网上搞到一段代码#inc

2015-07-08 14:43:26 435

原创 每天小练笔7-坐标变换

题目 开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。 输入: 合法坐标为A(或者D或者W或者S) + 数字(两位以内) 坐标之间以;分隔。 非法坐标点需要进行丢弃。如AA10; A1A; ; YAD; 等。 下面是一个简单的例子 如: A10;S20;W1

2015-07-08 11:12:01 410

原创 每天小练笔6-空瓶换饮料

题目 描述: 有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?

2015-07-07 17:22:38 932

原创 每天小练笔5-删除重复字符

题目 描述: 实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。 题目类别: 字符串 难度: 中级 运行时间限制: 10Sec 内存限制: 128MByte 阶段: 入职前练习 输入: 字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。 输出: 删除字符

2015-07-07 16:32:20 454

原创 每天小练笔4-整数排序操作

题目 描述: 实现输入一组大于等于0的整数,根据从小到大的顺序排序后输出,排序后有连续数时,只输出连续数中最小和最大的两个数。 题目类别: 排序 难度: 高级 运行时间限制: 10Sec 内存限制: 128MByte 阶段: 入职前练习 输入: 一组大于等于0的整数,不考虑非法输入,各个整数之间以逗号(“,”)分隔, 输入字符串的总长度小于等于100个字节。 输出:

2015-07-07 14:23:33 447

原创 每天小练笔3-简单密码

题目 描述: 密码是我们生活中非常重要的东东,我们的那么一点不能说的秘密就全靠它了。哇哈哈. 接下来渊子要在密码之上再加一套密码,虽然简单但也安全。 假设渊子原来一个BBS上的密码为zvbo9441987,为了方便记忆,他通过一种算法把这个密码变换成YUANzhi1987,这个密码是他的名字和出生年份,怎么忘都忘不了,而且可以明目张胆地放在显眼的地方而不被别人知道真正的密码。 他是这么变换

2015-07-07 13:34:25 1658

原创 linux0.12之内核代码之fork.c说明

在system_call.s中.align 2_sys_fork: call _find_empty_process testl %eax,%eax js 1f push %gs pushl %esi pushl %edi pushl %ebp pushl %eax call _copy_process addl $20,%esp1: ret这是系统fork入口,会调用两个

2015-07-06 14:08:29 1218

原创 linux0.12之内存管理(2)-再理解分段分页

分段是完成逻辑地址向线性地址的映射,这样对于用户任务而言,其寻址就是在4G的线性地址上面。 分页管理的目的是将物理内存页面映射到某一线性地址处。 线性地址对应的物理地址 上面是线性地址到物理地址的转换, linux的页目录和页表在head.s中设置,是在地址0放置页目录随后放置4个页表,这5个表是内核在内核空间映射的,任务0,是在内核中执行,所以任务0也是使用这个表,但是之后fork出来

2015-07-06 13:51:25 757

原创 每天小练笔2-大数求和

这个系列的题目都是来源于网络,然后自己写代码,可能不是最佳方法,网上有好的算法我也会给出链接。 描述: 给定两个非常大的正整数A和B,位数在50至100之间。求C=A+B; 题目类别: 字符串 难度: 中级 运行时间限制: 10Sec 内存限制: 128MByte 阶段: 入职前练习 输入: 因为A和B很大,从高位到低位,以字符串的形式输入两行数字A和B。A和B的位数在

2015-07-03 20:36:28 421

原创 每天小练笔1-周期串问题

这个系列的题目都是来源于网络,然后自己写代码,可能不是最佳方法,网上有好的算法我也会给出链接。 题目一[周期串问题] 如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期。例如,abcabcabcabc以3为周期(注意,它也可以6和12为周期,结果取最小周期3)。字符串的长度小于等于100,由调用者保证。 接口说明 原型: int GetMinPeriod(char

2015-07-03 20:12:31 479

IPCalculator

IPCalculato

2015-04-25

gcc for andriond

android平台下的gcc编译器,程序猿朋友可以试试啊,挺不错的。 分别安装“C++编译器(即C4Droid).apk”和“GCC for C4droid-4.7.1_r1.apk”,然后就可以编写程序试试啦。

2015-04-14

CPU源代码分析与芯片设计及Linux移植

CPU源代码分析与芯片设计及Linux移植

2015-03-13

深入浅出hello world

[演講:深入淺出 Hello World -- 理解 Linux 上運作 Hello World 的種種機制]

2015-03-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除