- 博客(7)
- 资源 (3)
- 收藏
- 关注
原创 STM32从Flash地址0x08000000的启动重映射
在初写STM32程序时,遇到一个困惑,STM32的Flash在MDK里被设置为起始地址0x0800 0000,而CM3手册规定芯片复位时要从0x0000 0000地址开始取出中断向量 ,那STM32怎么样执行代码呢?地址重映射?或者在0x0000 0000里有对应有实际存储器?仔细阅读手册,发现这件事是因为STM32设计的Flash起始地址是在0x0800 0000位置开始的。全部代码都只能从
2014-03-17 10:59:12 11785
原创 uC/OSIII的消息队列处理机制
在uC/OSIII中没有邮箱这个概念,而是统一合并到了消息队列MSG_Q。因为消息队列可以看作是很多邮箱的集合,邮箱只是包含单个消息的消息队列。在分析消息队列之前,必须要对消息的数据结构做一个彻底的分析。消息队列对象和其他内核对象一样,它的结构定义很简单:下面看一下消息队列的结构体,记住这个结构体名字叫OS_Q:struct os_q { /* Message Queue */
2014-03-16 17:40:49 2389
原创 uC/OSIII时钟节拍处理过程
时钟节拍涉及到的函数调用过程:从main开始,创建了第一个任务AppTaskStart,在其一开始执行时,对BSP和CPU进行初始化,调用BSP_CPU_TickInit()函数;该函数定义在bsp文件夹下的bsp.c文件中,该函数先读取时钟频率,然后按OSCfg_TickRate_Hz值计算应该为CM3的systick定时器设置的到期值。void BSP_CPU_TickInit (
2014-03-14 17:57:57 4377
原创 板子修理经验一例
同事一块小板子,RC滤波后直接进单片机差分AD采样。核心就这样的四个元件,两个R,一个C,一个MCU。在RC滤波后,直到AD引脚上,电平都正常。进入单片机后,程序输出显示0xFFFF,16bitAD,明显是超范围了。本以为是程序有bug,仔细询问后,已经生产了100块了,只有这3块有问题。经验一,这种情况基本排除程序bug的可能性,99%硬件问题。那就开始找吧,测单片机电源LDO电
2014-03-13 20:04:17 813
原创 #include顺序不正确导致定义无法找到定义
本意是想将全部头文件包含在一个文件里,可以省去每次在各个c中添加各种头文件。因此在includes.h中做了以下包含:#include #include #include #include "LED.h"#include "bsp_ser.h" 然后在user.c中做以下包含:#include "includes.h" 以为这样使用就不用每次在各个C文件
2014-03-13 19:51:28 2775
原创 结构体的定义位置不正确导致的错误
今天遇到一个结构体数组的定义错误,MDK编译器报错为:error: expression must be a pointer to a complete object type本以为是函数形参为指针,调的是结构体变量名而出错,以前遇到过这种调用错误。但是检查后发现并没有调用问题。结构体数组定义如下:"func.c"中:struct msg_param{uint16_t
2014-03-11 20:17:58 10415
原创 uC/OSIII在Cortex-M3的任务切换和中断退出分析
按uC/OSIII书中所讲,普通任务切换和中断进入退出后的任务切换应该是不同的函数,因为普通任务切换时要入栈出栈全部寄存器,而中断进入和退出时处理器会自动入栈出栈一部分寄存器(Cortex-M3 是自动保存xPSR, PC, LR, R12, R0-R3 )。但是uC/OSIII在Cortex-M3平台中,任务切换函数却是使用的同一函数,确切的说是使用了同一样的一个宏定义,如下:#defi
2014-03-09 15:43:27 3027
BleSensorTag-debug.rar
2019-10-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人