关闭

编写优质嵌入式C程序

前言:这是一年前我为公司内部写的一个文档,旨在向年轻的嵌入式软件工程师们介绍如何在裸机环境下编写优质嵌入式C程序。感觉是有一定的参考价值,所以拿出来分享,抛砖引玉。 转载请注明出处:http://blog.csdn.net/zhzht19861011/article/details/45508029 摘要:本文首先分析了C语言的陷阱和缺陷,对容易犯错的地方进行归纳整理;分析...
阅读(1476) 评论(0)

带有const修饰的指针解读

通过实例来看看const所修饰的指针使用方法:  1、   先看一个普通的指针使用。   形式:int *pTmp   含义:一个普通的指向int类型的指针 [cpp] view plaincopyprint? int main(int argc, char *argv[])   {     int i = 1;        ...
阅读(14) 评论(0)

编写优质嵌入式C程序

前言:这是一年前我为公司内部写的一个文档,旨在向年轻的嵌入式软件工程师们介绍如何在裸机环境下编写优质嵌入式C程序。感觉是有一定的参考价值,所以拿出来分享,抛砖引玉。 转载请注明出处:http://blog.csdn.net/zhzht19861011/article/details/45508029 摘要:本文首先分析了C语言的陷阱和缺陷,对容易犯错的地方进行归纳整理;分析...
阅读(1741) 评论(0)

MDK软件不能模拟仿真STM32的问题解决方法

MDK软件不能模拟仿真STM32的问题解决方法 刘勇军,杨选成 中山市中等专业学校,中山 528458 摘要: 学习和使用RealView MDK开发工具及STM32等芯片时,如果每个系列芯片都要购买、制作评估板或开发板的话,经济条件不允许,也不现实。当然也可以在没有硬件的条件下,通过MDK软件的模拟仿真来学习STM32系列芯片的编程,但MDK软件对模拟仿真的支持不是很全面,大部...
阅读(155) 评论(0)

单片机中的ROM,RAM和FLASH的作用

单片机中的ROM,RAM和FLASH的作用 标签: ROMRAMFlash单片机运作原理 2016-03-01 13:21 910人阅读 评论(0) 收藏 举报 本文章已收录于:   嵌入式开发知识库  分类: 微机原理(3)  版权声明:本文为博主原创文章,未经博主允许不得转载。 本文部分参考自:http://blog....
阅读(119) 评论(0)

STM32F0非对齐访问引起的硬件错误及其排除

前段时间在用STM32L0芯片时遇到一个硬件错误,主要是内存的非对齐访问导致的。 注:CM3内核支持非对齐访问,而CM0不支持非对齐访问。 先科普一下,什么是非对齐访问 如上图所示,若要访问的变量是int、float、u32类型的(占4字节),则这些变量在内存中,只能以图中0、4、8为起始地址; 若要访问的变量是u16类型的(占2字节),则这些变量在内存中,...
阅读(204) 评论(0)

单片机程序是如何执行的_单片机达人解密:指令数据写哪了?

单片机的运行需要执行程序,同时硬件也是必不可少的,二者缺一不可。大家都知道单片机的运行需要执行写好的程序,但是单片机的指令数据都被写在了哪里?在哪读取指令?单片机达人给你解答技术难题。  让我们从最开始的环节讲起。在单片机上电的瞬间,MCU的程序指针PC会被初始化为上电复位时的地址,从哪个地址处读取将要执行的指令,由此程序在MCU上开始执行(当然在调用程序的main之前,还有一系列其他的的初始化...
阅读(440) 评论(1)

设备地址与IO内存映射

在嵌入式编程中,绝大部分功能都是通过驱动外设实现的,这些外设不仅可以是CPU外部的某种功能模块,也可以是CPU芯片内部集成的某些器件。这些芯片内部的外设基本都是通过总线的方式与CPU核心相连,而对它们的控制也通过对这些总线上的外设寄存器的配置来实现。 外设寄存器也称为“I/O端口”,通常包括:控制寄存器、状态寄存器和数据寄存器三大类,而且一个外设的寄存器通常被连续地编址。 但是外设寄存...
阅读(89) 评论(0)

LMA(装载内存地址)与VMA(虚拟内存地址)

关于LMA和VMA,这个问题,有点点小复杂,不过,此处,我会把我的理解,尽量通过通俗的方式解释出来,以方便理解。当然,鄙人水平有限,难免有错,希望各位批评指正。       一般提及LMA和VMA,多数情况都是和ld,链接器相关的。在了解这两个名词的详细含义之前,有些基本知识和前提要说一下: [基础知识] 1。从你写的源代码到执行你的程序,一般经历了这几个过程:源代码编辑 -> ...
阅读(56) 评论(0)

代码覆盖率浅谈

在做单元测试时,代码覆盖率常常被拿来作为衡量测试好坏的指标,甚至,用代码覆盖率来考核测试任务完成情况,比如,代码覆盖率必须达到80%或 90%。于是乎,测试人员费尽心思设计案例覆盖代码。用代码覆盖率来衡量,有利也有有弊。本文我们就代码覆盖率展开讨论,也欢迎同学们踊跃评论。 首先,让我们先来了解一下所谓的“代码覆盖率”。我找来了所谓的定义: 代码覆盖率 = 代码的覆盖程度,一种度量方...
阅读(54) 评论(0)

stm32 设置systick中断抢先式优先级

最近使用STM32时希望将systick的中断优先级降低,但是CMSIS里给出的例子都是类似 [plain] view plain copy     NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;       NVIC_InitStructure.NVIC_IRQChannelPreempt...
阅读(91) 评论(0)

stm32 堆和栈(stm32 Heap & Stack)【worldsing笔记】

关于堆和栈已经是程序员的一个月经话题,大部分有是基于os层来聊的。   那么,在赤裸裸的单片机下的堆和栈是什么样的分布呢?以下是网摘:     刚接手STM32时,你只编写一个 int main() { while(1); } BUILD://Program Size: Code=340 RO-data=252 RW-data=0 ZI-...
阅读(397) 评论(0)

程序是如何执行的(三)函数调用

一、局部变量与全局变量   函数中出现的变量可以分为局部变量和全局变量,在函数内部定义的变量(没有global语句)就是局部变量,只有在函数内部才能够使用它们。在函数外定义的变量就是全局变量 全局变量的作用是增加了函数间数据联系的渠道,全局变量在全部执行过程中都占用存储单元,如果在同一个源文件中,局部变量和全局变量同名,则在局部变量的作用范围内全局变量被屏蔽即它不起作用。   静...
阅读(79) 评论(0)

更改函数的返回地址

这是网络安全老师布置的实验,觉得是大学以来做过的最有意思的一个实验。 Task Description: C语言编写程序,包含一个函数,改变函数的返回地址,使函数返回后跳转到某个指定的指令位置,而不是函数调用后紧跟的位置。 先上代码: #include void foo(){ int a, *p; p = (int*)((int)&a + 8); ...
阅读(58) 评论(0)

进入OS前的两步之PendSV(任务切换)

先了解下如何使用PendSV异常。(为何要使用PendSV而不是其他的异常,请参考《cortex-M3权威指南》) 1,如何设定PendSV优先级? NVIC_SYSPRI14 EQU 0xE000ED22 NVIC_PENDSV_PRI EQU 0xFF     LDR R0, =NVIC_SYSPRI14 LDR R1, =NVIC_PENDSV_PRI ...
阅读(284) 评论(0)

Violate的应用和作用

 以前也是知道violate 的作用,是可变的意思,因为变量可能发生意想不到的变化,用到的时候一定要用最新的数据,   因为很多编译器在编译程序的过程是对程序进行优化,以提高运行效率,这就可能出现这样的情况,用的到变量值不是最新的,而是已经存在在缓存中的值,这样就可能出现莫名其妙的错误,所以对一些易变的变量,加上violate 修饰,编译器在编译过程中就不会对读写这个变量就不会进行优化,...
阅读(133) 评论(0)

C/C++不同文件夹下包含头文件的方法及#include的使用

本文主要介绍了如何不同文件夹下使用预处理器指示符#include。 假设我们有如下一个工程,其中包含了几个源代码文件和头文件。其中main.c是主源代码文件,里面包含main函数。 在base中包含:func3.h,func3.c,文件夹main和文件夹func4 在main中包含:main.c,func1.h,func1.c和文件夹func2。 在func2中包含:func2.h...
阅读(95) 评论(0)

SST25VF080B SPI接口FLASH STM32驱动

所有的FLASHA 都一样只能从1变0,要想从0变1 只有擦除一个页扇, SST25VF080B 最小可以擦除4KB的页 速度也不错 50MHz 容量1MB 挺够用的 10万次的擦写寿命。最低2.7V 就可正常工作。 Flexible Erase Capability – Uniform 4 KByte sectors – Uniform 32 KByte overlay b...
阅读(83) 评论(0)

STM32从Flash地址0x08000000的启动重映射

在初写STM32程序时,遇到一个困惑,STM32的Flash在MDK里被设置为起始地址0x0800 0000,而CM3手册规定芯片复位时要从0x0000 0000地址开始取出中断向量 ,那STM32怎么样执行代码呢?地址重映射?或者在0x0000 0000里有对应有实际存储器? 仔细阅读手册,发现这件事是因为STM32设计的Flash起始地址是在0x0800 0000位置开始的。全部代码都只...
阅读(887) 评论(1)

关于ISP、IAP、DFU和bootloader

这是嵌入式开发中常用的几个专业术语,其诞生的背景和其具体作用大概如下 在很久很久以前,那是8051单片机流行的时代,做单片机开发都需要一个专用工具,就是单片机的编程器,或者叫烧写器。说“烧”写一点不为过,当年的经典芯片AT89C51在编程时需要十几伏的高电压,加在一个特定的引脚上,才能进入编程。对于某款芯片的编程,都有一个特定的时序,这个时序通常在芯片的datasheet里进行描...
阅读(326) 评论(0)
23条 共2页1 2 下一页 尾页
    个人资料
    • 访问:9812次
    • 积分:142
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:20篇
    • 译文:0篇
    • 评论:2条
    最新评论