随笔分类 - 技术剖析
摘要:1.堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。 要点: 堆:顺序随意 栈:后进先出(Last-In/First-Out)编辑本段堆和栈的区别 一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局区(静态区)(sta...
阅读全文
摘要:volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序:short flag;void test(){ do1(); while(flag==0); do2();} 这段程序等待内存变量flag的值变为1(怀疑此处是0,有点疑问,)之后才运行do2()。变量flag的值由别的程序...
阅读全文
摘要:想成为嵌入式程序员应知道的0x10个基本问题 C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。 从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这是个愚蠢的问题吗?如要你答出某个字符的ASCII值。这些问题着重考察你的系统调用和内存分配策略方面的能力吗?这标志着出题者也许花时间在微机上而不是在嵌入式系统上。如果上述任何问题的答案是"是&qu
阅读全文
摘要:引用: 这主要在多任务环境中使用,一个可重入的函数简单来说,就是:可以被中断的函数。就是说,你可以在这个函数执行的任何时候中断他的运行,在OS的调度下去执行另外一段代码而不会出现什么错误。而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等等,所以他如果被中断的话,可能出现问题,所以这类函数是不能运行在多任务环境下的。把一个不可重入函数变成可重入的唯一方法是用可重入规则来重写他。第一,不要使用全局变量。因为别的代码很可能覆盖这些变量值。第二,在和硬件发生交互的时候,切记执行类似disinterrupt()之类的操作,就是关闭硬件中断。完成交互记得打开中断,在有些系列上,这叫做.
阅读全文
摘要:制作根文件系统一、创建根文件系统目录mkdir rootfscd rootfsmkdir bin dev etc lib proc sbin sys usr mnt tmp varmkdir usr/sbin usr/bin usr/lib usr/modules二、创建文件设备cd devmknod –m 666 console c 5 1mknod –m 666 null c 1 3三、安装/etctar etc.tar.gz –C /XXX/rootfs四、编译内核模块进入Linux内核目录Make modules ARCH=arm CROSS_COMPILE=arm-linux-五、安
阅读全文
摘要:(1)指针数组是一个数组,里面包含若干指针,指针数组名是指向指针的地址,可赋值给指向指针的指针。 int* a[]={"hello" ,"world","!"}; int **p=a;(2)数组指针是一个指针,指向整个数组。 如 int v[2][3]={{1,2,3},{4,5,6}} ; int b[3]={7,8,9}; int (*p1)[3]=v; 可分解为 int (*p1)[3]; p1 = v; p1指向v[0]的地址,即p1 = &v[0], **p为v[0][0]的值。(3)数组名的两层含义:既是数组符号名
阅读全文
摘要:题目:企业发放的奖金根据利润提成。 利润低于或等于10万元时,奖金可提10%; 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%; 20万到40万之间时,高于20万元的部分,可提成5%; 40万到60万之间时高于40万元的部分,可提成3%; 60万到100万之间时,高于60万元的部分,可提成1.5%; 高100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成整型或长整型。#include "stdio.h"int main() { i
阅读全文
摘要:题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。代码:4select3.c#include "stdio.h"int main(int argc, char *args[]) { int limit = 4; Count(limit); return 0;}int Count(int limit) { int sum=0, i, j, k, count=0; for(i = 1; i <= limit; i++) { for(j = 1;
阅读全文
摘要:求解输出y的值:package ITCast;class outer { public static void main(String[] args) { int x = 2; int y = (x++)/(--x); System.out.println(y); }}分析过程: 0. 假设x 所在的寄存器为R1 1. 先把x的初值2存入寄存器假设为R2, 并用此值作为除数。 2. 然后把x 的值自加1 存入寄存器R1,x 的值变为3 此时已完成(x++)这一步骤。 3. 这时考虑被除数: x 先自减1(记住开头时说明:x 在寄存器...
阅读全文
摘要:1、 在数据库中建立分页存储过程-- =============================================-- Description: 分页,用到了ROW_NUMBER()-- =============================================create PROCEDURE [dbo].[proc_SplitPage]@tblName varchar(255), -- 表名@strFields varchar(1000) = '*', -- 需要返回的列,默认*@strOrder varchar(255)='',
阅读全文
摘要:通过移位实现:#include <stdio.h>size_t func( char x ) { x = (x & 0x55) + ((x>>1) & 0x55); x = (x & 0x33) + ((x>>2) & 0x33); x = (x & 0x0f) + ((x>>4) & 0x0f); return x;}int main(){ printf("%d", func('c'));}移位思想:01010101 即为0X5500110011 即为0X330
阅读全文
摘要:Nand Flash与Nor Flash NOR的特点是芯片内执行(XIP,eXecute InPlace),这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。优点是可以直接从FLASH中运行程序,但是工艺复杂,价格比较贵,NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。 NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的困难在于flash的管理和需要特殊的系统接口。优点:大存储容量,而且便宜。缺点,就是无法寻址直接运行程序,只能存储数据。另外NANDFLASH..
阅读全文
摘要:Linux环境下的软件安装,并不是一件容易的事情;如果通过源代码编译后再安装,当然事情就更为复杂一些;现在安装各种软件的教程都非常普遍;但万变不 离其中,对基础知识的扎实掌握,安装各种软件的问题就迎刃而解了。Configure脚本配置工具就是基础之一,它是autoconf的工具的基本应用。'configure'脚本有大量的命令行选项.对不同的软件包来说,这些选项可能会有变化,但是许多基本的选项是不会改变的.带上'--help'选 项执行'configure'脚本可以看到可用的所有选项.尽管许多选项是很少用到的,但是当你为了特殊的需求而config
阅读全文
摘要:串行通讯口COM1、COM2 --学习笔记 一、串口通信的基本原理. 串行端口的本质功能是作为CPU和串行设备间的编码转换器。当数据从CPU经过串行端口发送出去时,字节数据转换为串行的位。在接收数据时,串行的位被转换为字节数据。 在Windows环境(Windows NT、Win98、Windows2000)下,串口是系统资源的一部分。 应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。 二、串口信号线的接法. 一个完整的RS-232C接口有22根线,采用标准的25芯插头座(或者9芯插头座)。25芯和9芯...
阅读全文
摘要:linux 进程学习整理,与备后记.1、程序和进程1.1 程序 程序(program)是存放在磁盘文件中的可执行文件。1.2 进程和进程ID 程序的执行实例被称为进程(process)。某些操作系统用任务表示正被执行的程序。 每个linux进程都一定有一个唯一的数字标识符,称为进程ID(process ID)。进程ID总是一非负整数。1.3 linux下的进程结构 Linux系统是一个多进程的系统,进程之间具有并行性、互不干扰的特点。 linux中进程包含3个段,分别为“代码段”、“数据段”和“堆栈段”。 “数据段”存放全局变量、常数以及动态数据分配的空间(...
阅读全文
摘要:复习一下反余弦函数:反余弦函数图像:代码实现:void main() { double y; int x, m; for(y=1; y < -1; y-=0.1) { m = acos(y) * 10; for(x = 1; x < m; ++x ) { printf(""); } print("*"); for(; x < 62-m; x++) { print(""); } print("*\n"); }}
阅读全文
摘要:一. Log 日志输出 可在 Window->Show View->Other->Android->Log Cat 调出 Log Cat 界面 常用的日志: 普通运行信息:i 错误信息:e 输出日志: Log.i(TAG, strings);其中TAG 为日志标识符,一般用类名表示(方便查看此日志是某个类的输出),且常声明为静态常量.stirngs 为要输出的字符串.例: Log.i(TAG, strings)public class PhoneSMSTest extends AndroidTestCase { private static ...
阅读全文
摘要:利用类 SmsManager 发送信息, smsManager 为 SmsManager 一个默认的实例. SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent) destinationAddress: 收件人号码 scAddress: 短信中心服务号码, 这里设置为null text: 发送内容 sentIntent: 发送短信结果状态信号(是否成功发送)...
阅读全文
摘要:通过拨打电话案例学习 intent 的使用方法. 由于是小程序,所以采用 UI界面-> Activity->业务层 自上而下的顺序来编写代码. 由于要用到系统功能,要在AndroidMainfest.xml 加入 <uses-permission android:name="android.permisson.CALL_PHONE" /> 1.界面设计 res/layout/main.xml main.xml<?xml version="1.0" encoding="utf-8"?><Line
阅读全文


浙公网安备 33010602011771号