
C语言
大文梅
我很懒,还没有添加简介
展开
-
位操作总结
以下位操作以如下图序列,小端序:获取某一位:#define GET_BIT(x, bit) ((x & (1 << bit)) >> bit) /* 获取第bit位 */清0某一位:#define CLEAR_BIT(x, bit) (x &= ~(1 << bit)) /* 清零第bit位 */置位某一位:#define SET_BIT(x, bit) (x |= (1 << bit)) /* 置位第bit位 */获取连原创 2021-04-21 10:48:23 · 164 阅读 · 0 评论 -
uCOS在任务切换时做了什么以及任务切换汇编代码分析
通过最简单的任务切换函数讲解,工程使用《[野火®]《uCOS-III内核实现与应用开发实战指南—基于STM32》》第5章节的工程。以下所说的地址自己做时可能有所不同。先说明几个任务相关全局变量:#define TASK1_STK_SIZE 20#define TASK2_STK_SIZE 20static CPU_STK Task1Stk[TASK1_STK_SIZE]; //Task1Stk[0]地址为0x20000028;Task1Stk[TASK1_STK原创 2021-02-25 21:34:35 · 4738 阅读 · 4 评论 -
C语言const关键字
关键问题点:const 属于修饰符 ,关键是看const 修饰的位置在那里1、const int a这里const 修饰的是int,而int定义的是一个整值因此a 所指向的对象 值 不能通过 *a 来修改,但是 可以重新给 a 来赋值,使其指向不同的对象eg:const int *a = 0;const int b = 1;int c = 1;a = &b //ok! 额外:注意不能通过a 来修改 b值a = &c //ok! 额外:虽然c本身不是一个常量*a原创 2021-01-04 19:23:21 · 260 阅读 · 0 评论 -
简单状态机
一个完整的状态机包括:state(状态):就是系统在其生命周期中某一时刻的运行情况,此时,系统会执行一些动作,或者等待一些外部输入。guard(条件):状态机对外部消息进行响应的时候,除了需要判断当前的状态,还要判断跟这个状态相关的一些条件是否成立。event(事件):就是在一定的时间和空间发生的对系统有意义的事情。action(动作):当一个Event被状态机系统分发的时候,状态机用action来进行响应,比如修改一下变量的值,进行输入输出,产生另一个event或者迁移到另一个状态等。trans原创 2020-12-24 21:45:06 · 547 阅读 · 1 评论 -
按键的消抖处理
消抖思路:按键从识别按下开始,持续一个消抖时间,如果按键继续按下,则判定按键按下,否则按键未按下。总共四个按键,定义如下:`#define KEY1 0x00#define KEY2 0x01#define KEY3 0x02#define KEY4 0x03`按键按下的状态定义如下:#define KEY_DOWN 1 //按键被按下#define KEY_UP 0 //按键弹起按键原创 2020-06-12 21:39:05 · 1483 阅读 · 0 评论 -
关于写入Flash中的应用
使用文件系统出现一些很奇怪的问题,明明格式化写入读取这些都成功了,但是在使用的时候总是出现BUG,就使用数组记录了/*******************************************************函数名称 : Writter_BJ_Signal功 能 : 将当前的报警状态写入Flash中参 数 : 无返 回 值 : 无*************...原创 2019-11-15 14:21:43 · 298 阅读 · 0 评论 -
软件模拟SPI驱动FLASH芯片——SST26VF064
程序没什么好说的,软件模拟SPI驱动的网上也是挺多的,不过要说一下的就是SST26VF064这款芯片与其他FLASH不同的是,它上电之后有写保护位,搞了好一阵子都没有发现这个原因,后面还是我师傅发现要首先取消掉它的写保护位。代码如下:#ifndef _SPI_FLASH_H_#define _SPI_FLASH_H_#include "stm32f10x.h"#define SS...原创 2019-08-28 17:13:09 · 1988 阅读 · 12 评论 -
stm32中的CAN通讯列表模式配置解析与源码
选择两个32位筛选器,列表模式的话就是14*2=28个CAN帧。假如我想要筛选一个0x10f46601的帧,它的二进制为:0001 0000 1111 0100 0110 0110 0000 0001而筛选器为:xxxx xxxx xxxx xxxx xxxx xxxx xxxx x100 ,后面的100是因为扩展数据帧也就是说把上面要筛选的帧弄到这个筛选的X中,即:1 00...原创 2019-08-07 17:31:36 · 4244 阅读 · 2 评论 -
学习
版权声明:本文为博主原创文章,...转载 2019-07-31 18:24:18 · 149 阅读 · 0 评论 -
时间戳转北京时间,C语言实现
时间戳转北京时间,C语言实现#include “stdio.h”#define u8 unsigned char#define u16 unsigned shord#define u32 unsigned int//判断是否是闰年函数//月份 1 2 3 4 5 6 7 8 9 10 11 12//闰年 31 29 31 30 31 30 31 31 30 ...原创 2019-07-22 10:49:52 · 1938 阅读 · 0 评论 -
AD7606调试过程与源码
公司有一个项目用到了AD7606,控制器用的STM32,使用的模式是并行16位模式,程序刷好之后发现读取的AD数据乱码,结果发现是因为AD7606的接地不对,当然这个问题是我师傅找出来的,查找的过程如下:用示波器看了BUSY线,转换线等各种线的波形,目的是确定芯片是否正常工作。师傅又测量了V1通道两端的波形,在没有给输入的情况下发现存在波形。后面师傅又去看了下手册,发现V1通道需要接AGND...原创 2019-08-02 18:28:08 · 13175 阅读 · 37 评论