程序员的自我修养-第一章
信号量与互斥量的区别
根本区别,互斥量用于线程的互斥,信号量用于线程的同步
互斥量只能为0/1,信号量可以为非负整数
互斥量的一组加锁和解锁只能在同一线程内使用,信号量可以在一个线程内释放,另一个线程内得到。
二元信号量也是信号量,主要保证线程的同步,但因为是二元的,只用0,1两个状态,也只能同时允许一个线程访问。从这一点上看与互斥量类型,但二元信号量与互斥量并不是完全相同,二元信号量终究是信号量,主要保证同步,可以在不同线程申请,释放,互斥量在哪个线程申请就在哪释放。
野火的freertos书中,有这样一段话:
二值信号量和互斥信号量(以下使用互斥量表示互斥信号量)非常相似,但是有一些细 微差别:互斥量有优先级继承机制,二值信号量则没有这个机制。这使得二值信号量更偏 向应用于同步功能(任务与任务间的同步或任务和中断间同步),而互斥量更偏向应用于 临界资源的访问。
c++基础1
比c增加的特性bool, namespace, cin, cout, cerr(这三个不是关键字,是运算符重载,cout带缓冲,cerr不带缓冲)
引用类似指针,修改变量是不用指针那么麻烦还要去找地址了,声明时就必须进行初始化。之后使用原变量,新引用都可以正常修改该地址下的值。
1234int a = 10;int &b = a;cout<<a<<" "<<b<<endl;cout<<&a<<" "<<&b<<endl;
a,b的地址都一样,可以把b看作a的别名。
const 与 指针基础情况const放在 * 的左边 指针变量所指向的数据不能通过指针变量改变,但指针变量是可以改变的
123456789int main(){ int a = 10; int b = 20; const int* p = &a; //等价于 int const* p = &a; p = &b; //指针变 ...
freertos-任务创建
硬件初始化定义一个bsp_init初始化函数,把初始化外设的函数都放到那里面去,
1234static void BSP_INIT(void){ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); LED_GPIO_Config(); //初始化led}
创建单任务——SRAM静态内存静态内存,即预先定义好的全局变量,这些变量保存值内部SRAM中。他们是运行前分配的,之前用ucos是就一直使用的是静态内存,
定义任务函数任务必须返回值,是死循环,要延时时,要使用freertos提供的延时函数,不能自己写一个for循环延时
123456789101112131415161718192021static void LED_Task(void* parameter){ while(1){ LED(ON); vTaskDelay(500); // 延时500个tick LED(OFF); vTaskDelay(500); // 延时500个tick & ...
freertos-移植
下载freertos源码FreeRTOS,准备一个stm32空工程。
解压后,FreeRTOS包含以下文件夹
demo:一些移植好的历程,包括stm32f103等,
license:略
source:源码,包括include(一些头文件),和portable(和编译器密切相关的文件,keil环境用RVDS)
将source下以.c结尾的文件移植到我们工程下面新建的src文件夹中,
将portable下MemMang文件夹和RVDS文件夹下cm3文件夹移植到我们工程下面新建的prot文件夹中,
将include文件夹移植到我们工程文件夹下。
拷贝freeRTOSConfig.s(demo工程下)到我们工程下
添加源码到工程组文件夹
指定头文件路径,主要是include文件夹,port文件夹和FreeRTOSConfig.h文件,
FreeRTOSConfig.h文件主要内容断言, freertos定义了一些断言接口 12#define vAssertCalled(char,int) printf("Error:%s,%d\ ...
test
。。。。。
本博客使用hexo框架搭配butterfly主题建立
首次建立博客主要参考了以下几篇文章:
GitHub+Hexo 搭建个人网站详细教程 - 知乎 (zhihu.com)
Butterfly 安裝文檔(一) 快速開始 | Butterfly
Markdown写作规范
建立过程中,遇到的最大的一个问题是typora的默认图片保存路径与hexo路径不符,导致图片无法显示,参考了这篇文章解决。
(8条消息) 解决:hexo+github本地和线上图片不显示问题_Donaghy的博客-CSDN博客
测试一下图片