把github的博客给搞乱了,将原来的博客目录完全删除掉,重新clone了. #showing your remotes
1. 将github上的git clone 到本地
2. git remote 此时会显示origin的url (git remote -v)
#Adding Remote Repositories
1.git remote
2.git remote add blog "your remote repositories's url" 我对于这句指令的理解是给你的远程仓库取一个自己的命名.
3.git remote -v #Adding&&committing 先把文章写出来,执行:
1. git add .
2. git commit -m "xx"
#Pushing to your Remotes
1. git push origin master
#Complentions: 我在另一个目录下面git clong,实现git merge? 也就是说,完全可以实现,现在就差分支了.我在一个工作,学习,完全可以同步推到github上了. #另外的技巧 我在本机的目录上,有两个地方可以写博客,暂且称之为A和B,那么当我在B中push新的博客后,A中就会落后博客内容.如果这时我在A中添加了新的内容,就会提示我出错:
当前目录落后...
这时我在网上搜到的方法是
git stash save your-file-name
然后我就git pull,好像因为github.io只允许拥有master,所以应该问题不大..
原文 #没有匹配的文件 有时候我在用git -rm file-name 时,它会抱怨说没有匹配的文件,这是因为我没有跟踪这个文件,也就是没有在git的日志文件中,此时可以直接使用简单的命令:
rm file-name
删除这个没有跟踪的文件.
#删除 git add file-name 但没有commit的文件 参考 #删除master的文件 比如我想删掉博客上的一篇文章,在本地(假设本地与master完全同步)执行
git rm file-name
其他的同push文章类同.
首先明白的是,函数在内存中有一个物理地址,这类似与数组。这个地址可以赋给一个 指针。函数的地址就是函数的入口,因此,函数指针可以用来调用一个函数
type (* pointer_var)();
返回值为type类型的函数指针,表示pointer_var是一个指向函数入口的指针变量。要 和以下的区别:
type *pointer_var();
这是一个返回type *的函数,举两个例子:
从上面我们可以看出来,先定义函数指针,将函数指向函数指针后,将函
数指针指向函数后,就可以像使用原函数那样进行调用。
之前一直为笔记本的驱动找不到合适的驱动,现在,有这么一个网站:
https://cateee.net/lkddb/
据官网介绍可以解决这个问题,不知道是真的还是假的
在真的机子上debian的内核一次没有配置成功,我要用两天的时间把配置的内容探个究竟。
在编译内核之前最好使用
make mrproper
清扫一下。
我使用的是git,clone的linus的版本,一切准备妥当后,我们要选择合适的配置工具。 我选的是 make menuconfig,注意无论哪一种都需要相应的软件包。
在配置前的方括号中按下“y”,就是built-in,这是将相关代码编译进内核,默认与目标机相关的硬件的代码必须内建进内核,这些东西就如同人的基本器官,不可无;另一种就是M,这是将相关的选项编译成模块,这样就可以是编译的内核的体积不过于太大,精简内核是我们必须掌握的知识点;最后一种就是按下”space”,什么也不做,就是回答“no”。
内核的发展太快了,当我写这篇文章的时候,代码还可以是最新的(git pull),但是很快就update的,不过,有些东西是不会变动太大。
注意这篇文章:
http://lwn.net/Articles/531114/
http://unix.stackexchange.com/questions/92177/kernel-namespaces-support
CAN总线 编辑 同义词 CAN-BUS一般指CAN总线 CAN是控制器局域网络(Controller Area Network, CAN)的简称,是由以研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO 11898),是国际上应用最广泛的现场总线之一。 在北美和西欧,CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以CAN为底层协议专为大型货车和重工机械车辆设计的J1939协议。[1]
红外线协议
射频那块的东西
杂项设备 杂项设备(misc device) 杂项设备也是在嵌入式系统中用得比较多的一种设备驱动。在 Linux 内核的include\linux目录下有Miscdevice.h文件,要把自己定义的misc device从设备定义在这里。其实是因为这些字符设备不符合预先确定的字符设备范畴,所有这些设备采用主编号10,一起归于misc device,其实misc_register就是用主标号10调用register_chrdev()的。 也就是说,misc设备其实也就是特殊的字符设备。
来自百度知道:
https://zhidao.baidu.com/question/354123482.html
Media Transfer Protocol
光纤式分布
放假了,这个学校又一次只剩自己了,曾经对自己说过,不会自己独自一人在学校了,可是当现实无情逼近的时候,我发现还是学校能帮助自己.记住,我在这里,是为了更美好的梦想,所以你并不会孤单、寂寞。因为你有这个世界,你是他们的一员,更何况,你有个非常好的女朋友,你吃的这份苦,也是为了她,或者说,你只有承受更大的责任,才会给她美好的未来,加油,你不仅仅是一个人了。
0s表示一串0, 1s表示一串1.
x ^ 0s = x x & 0s = 0 x | 0s = x
x ^ 1s = ~x x & 1s = x x | 1s = 1s
x ^ x = 0 x & x = x x | x = x
位屏蔽(bitmask): 所谓位屏蔽(bitmask)就是利用一个二进制字串与已有的二进制字串 进行(AND)运算,通过结果知道原二进制字串中的特定位上有没有1.例如,二进制10011有 五个位,屏蔽码是10,则
10011
AND 00010
---------------
00010 > 0(不等于0),
说明在原始数据倒数第二位有数据1,而屏蔽码1000的运算结果 10011 AND 01000 = 00000,说明倒数第四位是数据0,没有该选项.
n&(n-1) 去除 n 的位级表示中最低的那一位。例如对于二进制表示 10110100,减去 1 得到 10110011,这两个数相与得到 10110000。 n&(-n) 得到 n 的位级表示中最低的那一位。-n 得到 n 的反码加 1,对于二进制表示 10110100,-n 得到 01001100,相与得到 00000100。 n-n&(~n+1) 去除 n 的位级表示中最高的那一位。
这个操作符是进行与操作的,常规来说,很简单就是与0相与得0,其余都得1.
作用集中在三个方面:
The Hamming distance between two integers is the number of positions at which the corresponding bits are different.
Given two integers x and y, calculate the Hamming distance.
Note: 0 ≤ x, y < 2^31.
Example:
Input: x = 1, y = 4
Output: 2
Explanation:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑
The above arrows point to positions where the corresponding bits are different.
int count_bit_1(int n){
unsigned int count = 0;
while(n){
count += n & 1;
n >>= 1;
}
return count;
}
int count_bit_0(int n)
{
unsigned int rc = 0;
while(n){
rc += !(n & 1);
n >>= 1;
printf("the n is %d\t", rc);
}
return rc;
}
上面就是统计一个整型数字中的0和1的个数。
461最终结果:
int hammingDistance(int x, int y) {
int c = x ^ y;
unsigned int count = 0;
while(c){
count += c & 1;
c >>= 1;
}
return count;
}
这个亦或操作在CSAPP经典著作中也有详解,这里简单记录一下。直观上说,就是如果两个数字(0或者1)相同得1,不相同为0,为什么这样呢?这篇文章可以看一下,就是说,在计算机的器件中,期初没有负责进位标志的东西,那么,这个加法操作可以借助”^”来实现。
int add(int a, int b)
{
if (a == 0)
return b;
if (b == 0)
return a;
int p1 = a&b;//位与。
p1 = p1 << 1;//这两句只考虑进位
int p2 = a^b;//位异或。不考虑进位
return add(p2, p1); //结束的标志是a为0了,或者b为0了
}
int main()
{
int x = 3, y = 2;
int sum = 0;
sum = add(x,y);
cout << sum << endl;
}
看到没,这就是基本逻辑,在add()函数中,p2 = a^b,如果有进位,就不用管它。比如 0+0=0, 0+1 = 1, 1+0 = 1, 1 +1 = 0。看到没,1+1 是等于0 的,那么进位呢?进位靠 & 运算来实现,p1 只考虑进位,也就是说,如果 1 + 1 结果是 1, 但是此时的这个1应该往前面进一位,变成 10, 所以,有了p1 = p1 « 1。那么,到什么时候结束呢?只有一种可能,没有进位了,也就是说 p1 为0 了,那么此时的加法结果就是不考虑进位的p2 了。 最后,解释一下为什么要递归 add()函数。实际上, 函数只需要执行两次就够了,执行到第二次的时候,我们就能保证P1 移位以后,为0. 此时,返回 p2 即可。所以,代码还可以这样优化:
性质:
Given a non-empty array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
Example 1:
Input: [2,2,1] Output: 1 Example 2:
Input: [4,1,2,1,2] Output: 4
这个题目就是利用了异或的操作。
int singleNumber(int* nums, int numsSize) {
int i, ret = 0;
for(i = 0; i < numsSize; i++){
ret ^= nums[i];
}
return ret;
}