- 博客(5)
- 收藏
- 关注
原创 使用DMA空闲中断,串口重定向和环形缓存区来实现串口通信
重定向是指用户自己重写C语言的库函数,当连接器检查到用户编写了与C语言库函数相同名字的函数时,优先采用用户编写的函数,而printf函数在C语言中我们知道是个格式化输出函数,但是在单片机中我们的输出设备是不确定的,所以我们需要重定向printf函数,因为printf在C语言标准库中实质是个宏,最终调用的其实是fputc函数,所以我们需要重写fputc函数。而当CPU做完更重要的任务以后,就可以触发空闲中断,从而去内存的某个地址,也就是缓存区中读取串口传输的数据,从而避免程序卡死。
2025-01-11 19:47:02
370
原创 嵌入式第二课
然后讲到这里,我们再引入一个新的概念叫状态机,也就是通过一个状态和另一个状态来判断你到底干了什么,用按键举例,我们将按键分为三个状态:初始状态,按键按下状态,按键释放状态,那么从初始状态到按键按下状态,我们所进行的操作就是按下按键,而从按键按下状态到按键释放状态,我们所进行的就是抬起按键,通过状态的改变,我们做到了对行为的判断。
2025-01-10 20:46:29
116
原创 蓝桥杯嵌入式,32的初体框架
然后来到这一块的重点,任务调度器。所谓任务调度器是什么,任务调度器就是像你对日常生活时间的安排,如八点起床,九点写作业,十二点吃饭等等,但是有人可能会疑惑,我在51里面将延时变量放到中断里面不也可以做到变量到一定的值就去做任务吗,但是51里面这个思路其实是有点问题的,因为这个思路其实还是一条线做到底,如果中途有一个复杂的函数影响到了我的进程,那么所有的函数都会被滞后,而任务调度器则不会存在这个问题,而是像操作系统一样可以统筹好各个任务,对于任务调度器的实现,代码如下。
2025-01-09 15:28:24
160
原创 逻辑操作符与i++和++i
有人可能会疑惑,为什么我明明是i = a++,但是为什么最后得到的是i = 1而不是0,这是因为对于这个语句,我先执行的是逻辑操作符||,也就是说我的a++的先使用再加一针对的是逻辑操作符,而赋值语句排在逻辑操作符之后,也就是说我的赋值 i 其实是等于已经自增后的a了。在学完i++和++i后,有很多人对于先使用再++与先++在使用想必区分的比较清楚了,但对于下面这个代码。它运行的结果却是这个。
2023-11-02 19:09:02
42
1
原创 梦开始的地方
我叫泽芝(咱就不实名上网了),目前是湖南理工学院大一的学生 ,专业是电子信息工程。对于编程,我自己的期望是能够最起码把C++学完,并且可以拿个竞赛奖项。对于学习编程这事,我个人认为应该要以老师讲的内容为辅,主要在于自己的实践,就像我昨天在C语言的课上做老师布置的题目简单计算器,即便已经听老师讲过一遍了,但自己去写还是难免有错误出现。C语言于个人而言,感觉并算不上难,但这的的确确是计算机语言的基石,个人打算每周最起码拿出12个小时来学习C语言。最后的最后,我想要进入华为,祝我上岸把!
2023-10-14 17:58:02
39
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人