自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(87)
  • 资源 (3)
  • 收藏
  • 关注

原创 考考你的C语言

**问题1:**int main(void){ int x=3; fun(); printf("%d",x);}void fun(void){}实现fun(),是main函数中的打印结果不是3!**问题2**int main(void){ int x=3; fun(); x = 4; printf("%d",x);}void fu

2015-12-29 19:37:29 1016 7

原创 LWIP定时器

在操作系统层TCP/IP 协议中很多时候都要用到定时,定时器的实现是 TCP/IP 协议栈中一个重要部分。LWIP 为每个与外界网络连接的任务都有设定了 timeout 属性,即等待超时时间。在具体实现上,每个任务都对应一个 sys_timeout 结构体,里面包括这个任务的 timeout 时间长度,以及超时后应调用的超时处理函数——该函数主要负责释放连接和资源回收。如若某一个任务的 sys_ti

2015-09-21 16:51:57 4736

原创 IAR将变量定义在指定地址

1、将变量定义在指定地址IAR中通过操作符@或者#pragma location指令来把全局变量和静态变量放到绝对地址上。在此操作中,尤其注意的是要满足地址对齐。同时,所有变量必须声明为__no_init。  对于__no_init声明的变量是tentative definition(尝试性定义)。对于这类变量可以在用到它的所有模块中都可以定义。推荐的方式是在该变量定义在头文件中,那个

2015-09-21 15:40:03 16120

原创 启动代码中关于变量的初始化

对于一个标准C程序所用到的全局和静态变量都是定位在固定的内存空间,在程序启动时必须赋予确定的数值,对于程序中没有赋初值的变量,编译器默认赋值为0。对于__no_init限定的变量则不会被初始化。对于一个标准的C程序中用到的变量类别如下 Categories of declared data 所示,L(1) 初始化过程需要初始化为0的section由ILINK中放置在

2015-09-20 12:38:39 2301

转载 逻辑与’&&’和逻辑或’||’的陷阱

为了提高系统效率,逻辑与和逻辑或操作的规定如下:如果对第一个操作数求值后就可以推断出最终结果,第二个操作数就不会进行求值!比如下面代码: if((i>=0)&&(i++ <=max)) { //其它代码 }  在这个代码中,只有当i>=0时,i++才会被执行。这样,i是否自增是不够明确的,这可能会埋下隐患。逻辑或与之类似。

2015-09-20 12:33:28 1119

原创 C中的+0与-0

**C中的+0与-0 因为-1 在内存中的存储是 FFFFFFFF。而 -0比-1大于1,所以 -0 本来实际内存应该为 100000000 然而整形只有四个字节,所以必须舍去最高位1,最后成为00000000和+0没有什么区别,但是进行过类似的运算在 EFL标记位中的进位标记和符号位会改变。而1000_0000则是-128**

2015-09-20 12:31:40 1066

转载 怎样取整

C语言的浮点数到整数的转换会去掉小数部分,因此在取整之前加上0.5会时大于等于0.5的小数部分进位。int ( x <0 ? x-0.5:x+0.5)注意:因为取整的默认方式是截断,因此通常在将浮点数转换为整数的时候最好都使用显式的取整步骤。一不小心,就有可能将你认为的8.0转换成了7,因为它的内部表示可能是7.999999.

2015-09-20 12:30:08 978

原创 字符串

1 字符串被放在了哪里 void main() { const char a[4] = “d”; char b[4] = “ddd”; char c[] = “ddd”; char *d = “ddd”; const char *e =”dddd”;a[0] = ‘a’; b[0] = ‘a’; c[0]= ‘a’ d[0]=’a’; e[0]=’a’ }其中1

2015-09-20 12:28:15 485

原创 IAR 链接

基本概念section与section属性 section是包含数据段或者代码段可放置在存储器内的最小逻辑单位,section即可放在RAM也可放在ROM内。在通常的嵌入式应用中,放置在RAM中的section没有任何内容,只是占有该存储空间。section具有如下属性: 编译器内部自定义section即属性 iar中关于block的概念 The block directive define

2015-09-20 12:24:10 4501

原创 IAR中C内嵌汇编格式

IAR c嵌入汇编格式

2015-09-19 17:40:29 4680

原创 iar通过Terminal I/O调试

有时用户也许需要对程序中的指令进行调试,以便在没有硬件支持的情况下使用stdin和stdout。C-SPY通过终端I/O窗口来模拟stdin和stdout。

2015-09-19 17:35:24 8408

原创 ucos_ii定时器详解

UCOSII从V2.83版本以后,加入了软件定时器,这使得UCOSII的功能更加完善,在其上的应用程序开发与移植也更加方便。在实时操作系统中一个好的软件定时器实现要求有较高的精度、较小的处理器开销,且占用较少的存储器资源。

2015-09-19 17:24:23 13422 1

转载 单片机前后台系统的优缺点

单片机运行操作系统的理由

2015-09-19 17:11:45 6581

原创 ucos在M3中的中断嵌套机制

M3的中断控制器特性ucos中断嵌套机制

2015-09-19 16:57:54 3483 2

转载 uc/os程序设计点滴记录

ucos程序设计

2015-09-19 11:26:19 1003

原创 使用uc/os开发要明确的几个堆栈

ucos中的堆栈

2015-09-19 11:11:46 1383

原创 初学者EFM32上移植uC/OSII

前言之前大学接触过uc/os,大学开了ARM这门课程,用的是周立功的教材,好像是大四开的,你懂的,实验只带手不带脑,复制–编译–下载–嘿,灯亮了–走人。 最近在接触EFM32系列MCU,就想弥补一下大学的遗憾。为时间4天的准备和移植工作终于完成,还是,嘿灯亮了。

2015-09-19 10:32:24 2196

原创 一个类型转换的讨论

m3一个类型的转换

2015-09-19 08:57:59 1063

原创 uC/OS-ii在M3中的任务切换与任务堆栈

uc/os在M3任务切换时的堆栈情况

2015-09-18 21:49:57 2437

原创 临界区管理

1.临界区临界区是指必须以互斥的方式执行的代码段,也就是说临界区范围内只能由一个活动的线程。例如:修改共享变量的过程中其他的执行线程可能会访问共享变量,那么修改共享变量的代码就被看成是临界区的一部分。临界区问题指用安全、公平和对称的方式来执行临界区代码的问题2.管理临界区的三种方法第一种方法#if OS_CRITICAL_METHOD == 1 #define OS_ENTE

2015-09-18 21:39:28 1052

原创 SVC和PEDSVC

SVC异常是必须在执行SVC指令后立即得到响应的(对于SVC异常来说,若因优先级不比当前正处理的高,或是其它原因使之无法立即响应,将上访成硬fault——译者注),应用程序执行SVC时都是希望所需的请求立即得到响应。另一方面,PendSV则不同,它是可以像普通的中断一样被悬起的(不像SVC那样会上访)。OS可以利用它“缓期执行”一个异常——直到其它重要的任务完成后才执行动作。悬起PendSV 的方法

2015-09-18 21:23:03 1444

原创 Cortex-M3中断

1 异常M3支持15个系统异常,240个外部异常IRQ,其中NMI,复位,hardfault三个异常的优先级固定不可更改且是负数,其余的都可编程。M3的异常分为抢占优先级和子优先级。2 关于中断优先级M3中,除了复位,NMI以及硬fault有固定的优先级,其他优先级都是可编程的。原则上,CM3支持3个固定的高优先级和多达256级的可编程优先级,并且支持128级抢占。但是,绝大多数CM3芯片都会精

2015-09-18 21:19:14 4531

原创 B , BX, BL, BXL

B,BX,BL,BXLB Label ;跳转到Label处对应的地址BL Label ;跳转到Label对应的地址,并且把跳转前的下条指令地址保存到LR BX reg ;跳转到由寄存器reg给出的地址BLX reg ;跳转到由寄存器reg给出的地址,并根据REG的LSB切换处理器 ;状态还要把

2015-09-18 20:57:39 3635

原创 IAR程序中获取堆指针与栈指针

IAR在程序中获取堆指针和栈指针

2015-09-18 16:11:02 2545

原创 LWIP的调试方式

LWIP提供了观察和调试协议栈内部的方法。LWIP关于调试的内容在debug.h和stats.h文件中可见。 9.1 调试接口重定向 为了实现重定向 printf()函数,我们需要重写 fputc() 这个 c 标准库函数,因为 printf()在 c 标准库函数中实质是一个宏,最终是调用了 fputc()这个函数的。重定向的这部分工作,由 usart.c 文件中的 fputc(int ch,

2015-09-18 16:04:03 9955

原创 枚举在单片机编程的应用

什么时候需要用到enum呢?当变量的数值在几个范围之间,如一个week变量取值只有Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday。这样用enum比较好.当然也可以用define.但是define维护起来比较麻烦, 适合变量的数值范围值较少的时候.1、用enum关键字说明常量(即说明枚举常量)有以下几点好处:

2015-05-06 14:44:23 3717

原创 IAR中常用的 #pragma 命令和扩展关键字

pragma 命令1、#pragma message(“ ”) 编译器编译到此处,在Build窗口中打印相应文本信息。2、#pragma error “” 编译器编译到此处,在Build窗口中产生错误并打印其文本信息。3、#pragma inline [=forced | never] 用这个指令是建议编译将这条指令后面的函数内联到调用它的函数的函数体中去。 当#pragma i

2015-05-06 10:00:20 17190

原创 一个RC电路的验证

一直困惑这种电路在滤波器类型中属于哪一类。 1、Multisim中仿真波特图如下 其中-3dB频率为21.9KHz。2、公式推导3、感性认识从阻抗角度理解,理解为Z1//Z2再与Z3串联。从Z3取出电压。Z2随着频率升高,阻抗减小,从分压的角度则Z3获得的电压越来越大。照此理解,则图中波特图形状就很好理解了。3、总结很菜的电路,大一就接触的理

2015-04-10 21:00:19 1445 1

原创 C在嵌入式中高效编程

本文是《ARM嵌入式系统开发:软件设计与优化》一书部分学习笔记,实验均在IAR上完成。目标板芯片为M3内核。

2015-03-31 15:11:29 1265

原创 iar创建工程模板

每次用IAR新建一个工程时候,

2014-11-08 10:07:39 2636

转载 Linux的软中断实现机制

本文转自:http://bbs.chinaunix.net/thread-2333484-1-1.html

2014-10-26 21:21:08 768

转载 Linux驱动程序调试方法

驱动程序开发的一个重大难点就是不易调试。本文目的就是介绍驱动开发中常用的几种直接和间接的调试手段,它们是:利用printk查看OOP消息利用strace利用内核内置的hacking选项利用ioctl方法利用/proc 文件系统使用kgdb一、利用printk这是驱动开发中最朴实无华,同时也是最常用和有效的手段。scull驱动的main.c第338行如下,就是使用printk进行调试

2014-10-25 17:36:42 1040

转载 Linux异步IO机制

Linux® 中最常用的输入/输出(I/O)模型是同步 I/O。在这个模型中,当请求发出之后,应用程序就会阻塞,直到请求满足为止。这是很好的一种解决方案,因为调用应用程序在等待 I/O 请求完成时不需要使用任何中央处理单元(CPU)。但是在某些情况中,I/O 请求可能需要与其他进程产生交叠。可移植操作系统接口(POSIX)异步 I/O(AIO)应用程序接口(API)就提供了这种功能。在本文中,我们

2014-10-25 16:23:44 527

原创 ARM体系架构下的同步操作

处理器在访问共享资源时,必须对临界区进行同步,即保证同一时间内,只有一个对临界区的访问者。当共享资源为一内存地址时,原子操作是对该类型共享资源同步访问的最佳方式。随着应用的日益复杂和SMP的广泛使用,处理器都开始提供硬件同步原语以支持原子地更新内存地址。CISC处理器比如IA32,可以提供单独的多种原子指令完成复杂的原子操作,由处理器保证读-修改-写回过程的原子性。

2014-10-22 09:03:50 879

转载 linux中的container of

container of解释/**  * container_of - cast a member of a structure out to the containing structure  * @ptr:    the pointer to the member.  * @type:   the type of the container struct this is emb

2014-10-21 21:46:06 508

转载 linux kernel中struct timer_list使用

linux kernel中struct timer_list使用内核中最终的计时资源是定时器。定时器用于定时器超时处理程序在未来某个特定时间点执行,或者周期性的轮询硬件的状态。Linux提供了内核定时器完成这类工作。一般来说,定时器都在超时后马上就会执行超时处理函数,但是也有可能被推迟到下一个时钟节拍时才能执行,所以不能用定时器来实现任何硬实时任务。在kernel中如果想周

2014-10-21 10:38:58 1720

原创 linux I/O内存驱动设备--学习笔记

I/O内存与端口访问硬件--ledARM只支持内存空间对I/O端口的操作步骤1、I/O端口函数操作I/Ou 申请I/O端口内核提供了一套函数来允许驱动申请它需要的I/O端口,其中核心的函数是:Struct resource *request_mem_region(unsigned long fisrt,unsigned long n,const char *name)这

2014-10-20 10:50:46 634

原创 linux之等待队列--阻塞型驱动学习---学习笔记

阻塞型IO字符设备驱动程序进行读写操作时,有时目标设备无法立刻满足用户的读写需求,例如,调用read时没有数据可以交换,但以后可能会有,或者一个进程试图向设备写数据时,但设备暂时没有准备好接收数据。应用程序只是调用read或write并得到返回值,故应用程序不处理此类问题,此时驱动程序就应当阻塞进程,使它进入睡眠并等待条件满足,这就是阻塞型IO.阻塞方式是文件读写操作的默认方式,但应用程序

2014-10-19 10:43:50 1084

原创 linux的misc设备led--6410---学习笔记

Ioctl 驱动在用户空间,使用ioctl系统调用来控制设备,原型如下:Int ioctl(int fd, unsigned long cmd,…)原型中的省略号表示这是一个可选参数,存在与否依赖于控制命(第2个参数)是否涉及到与设备的数据交互。 Linux-2.6.36.2的原型是:Long(*unlocked_ioctl)(struct *flip, unsigned 

2014-10-18 19:46:26 705

原创 嵌入式交叉开发系统

2014-10-15 09:42:16 1122

easyjtag drive

jtag的安装驱动。立马就能用亲

2013-11-12

easyarm.exe

easyarm 软件,周立功公司的,,大家应该用得到

2013-11-12

使用状态机设计(vhdl)、ppt

用vhdl写出高效率的状态机,老师给的ppt ,还不错 哦

2012-03-13

空空如也

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

TA关注的人

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