
c
文章平均质量分 87
c语言学习
vonchenchen1
长期负责代码拷贝
展开
-
协程切换原理与实践 -- 从ucontext api到x86_64汇编
实现一个对称协程切换的demo,相同流程先使用ucontext api实现,了解流程后再使用x86_64汇编实现,x86_64汇编直接拷贝了开源项目libco的代码,封装成类似ucontext api的方法调用。文章最后实现一个可以选择使用ucontext和汇编切换协程的简单demo。原创 2023-05-14 12:10:06 · 1909 阅读 · 0 评论 -
单片机Json框架的实现
单片机Json框架,可以在单片机上实现简单json的生成和解析。原创 2016-01-28 23:42:55 · 10060 阅读 · 2 评论 -
单片机JSON生成框架
背景最近买了51822的蓝牙开发板,闲暇之余进行了一些调试,目前还没有深究蓝牙协议的原理。借助git上51822的现有安卓例程以及开发板自带程序,基本可以实现Android手机和开发板间的数据传递,那么,问题来了。数据用什么样的格式传递呢?如果数据量小的话可以自定义一些规则进行解析,记得做毕业设计的时候就是自定义了几个tag,单片机通过串口发送带Tag的字符串,上位机根据Tag解析数据,显原创 2016-01-08 02:41:54 · 5399 阅读 · 3 评论 -
C语言简单实现接口
学习jni的时候简单的做了一个实验 使用函数指针和结构体简单实现了一下C语言的接口。#include <stdio.h>#include <stdlib.h>//c语言做接口typedef struct{ int (*add)(int , int ); void (*print)(char* );}Env ,*PEnv;//获取一个实例的指针,可以使用不同的初始化函数对接口进原创 2015-11-21 16:30:42 · 9410 阅读 · 2 评论 -
判断完全二叉树
#include#include#include#define ELEMENTTYPE inttypedef struct tree{ ELEMENTTYPE data; struct tree *next[2];}BiTNode,*BiTree;ELEMENTTYPE enter_data(){ ELEMENTTYPE data; scanf("%d"原创 2014-01-18 15:26:46 · 960 阅读 · 0 评论 -
c语言递归的一些总结
前年写的一些东西第一个问题是猴子吃桃问题,记得当时刚学c语言的时候自己递了一个多小时才归出来。貌似是个基础题。题目大意是猴子摘了一堆桃子,每天吃掉一半又多吃一个,到了第十天,就剩下一个了,问这堆桃子最初有几个。我们先列个表,看看有什么规律,由于我们算最后的总数,所以就列一下剩余桃子的数量吧。假设最初的数量是A则第一天剩余0.5*A-1……第十天为1。这就原创 2014-01-18 15:18:50 · 18302 阅读 · 1 评论 -
创建二叉树
*创建一颗树,树的叉等于所在层数void create_tree(TreeNode **treenode, int max_data, int num){ int i; LNode new_node; int test_data; printf("star : num = %d\n", num); if(max_data > 1) { //********原创 2014-01-18 15:28:56 · 974 阅读 · 0 评论 -
面试回来好好学习了一下void*
面试后对void泛型的一些认识 面试的时候,发现编程题中参数基本都是void泛型而非具体的char 或者 int,整体感觉回答的不是很清楚,有些蒙对,有些全错,回来做了一些实验,重新研究了一下void。 如果一个链表需要存储各种类型的数据,比如char,int,还有数组该怎么办呢?抛开书本,用我们最直观的想法考虑。Char和int的长度是不同的,更不要说数组了,而链表节点的长度肯定原创 2014-03-29 09:51:26 · 843 阅读 · 0 评论 -
递归初始化二叉树
#include#include#include#define LEFT 1#define RIGHT 2#define ON 0typedef struct node{ int data; struct node * next[2];}BiTNode, *BiTree;int init_tree(BiTNode *tree, int deep){原创 2014-01-18 15:24:58 · 2442 阅读 · 0 评论 -
约瑟夫环
#include//#include#include#includetypedef struct node{ int number; int psw; struct node *next;}LNode,*LinkList;int create_circle_linklist(LNode *l){ int num,psw; int length = 1原创 2014-01-18 15:23:41 · 739 阅读 · 0 评论 -
一个简单单片机项目的一些想法
仪器的原理是借助电磁感应,为线圈通电,不同含铁量的成分会使线圈产生不同频率的震荡,由此来测试成分的含铁量。我做的部分也非常简单,使用51单片机操作12864做显示,矩阵键盘控制系统的行为,1302存储时间,可有可无,24c02用来存储预设参数,用于方便计算,仅此而已。 接到任务后,准备一晚上把它弄完。这也是上大学以来首次通宵做东西(其实后半夜基本都在发呆),第一天晚上进展还算比较快,每个基原创 2014-01-18 15:21:06 · 2007 阅读 · 0 评论 -
指针的指针
*程序的基本功能是实现一个树,层数等于所包含的节点数,每个节点中存放一个链表。typedef struct node{ int data; struct node *next;}LNode; 树中包含的链表节点 typedef struct treenod{ LNode *listnode; struct tr原创 2014-01-18 15:16:33 · 840 阅读 · 0 评论 -
自己仿写一个ucosii(二) 任务控制块的简析
任务控制块是任务管理的核心数据结构,任务控制块的数量就是操作系统最多可处理任务的数量。ucosii目测一般都是10个以下的任务。空闲任务链表和就绪任务链表。在初始化ucos时,我们会创建一个空闲任务链表,里面包含最大任务数量。而创建一个任务时,我们会摘下一个任务块(链表的节点),然后通过 任务创建函数将相关的参数赋值给任务块,再把任务块放进就绪链表中。下面具体看看任务控原创 2014-01-23 20:12:34 · 1469 阅读 · 0 评论 -
自己仿写一个ucosii(四) 任务调度函数
这是一张神奇的表格.... 没搞太明白直接用了unsigned char const DCOS_UnMapTbl[]={ 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x00 to 0x0F */ 4, 0, 1, 0, 2, 0, 1, 0,原创 2014-01-23 21:59:04 · 972 阅读 · 0 评论 -
自己仿写一个ucosii(三) 初始化与创建任务
有了任务控制块,接下来就是任务初始化了,其中分为创建块和创建任务。有了任务控制块的模子就可以复制几个了,然后再把它们穿起来,统一管理。操作系统初始化函数就是做这件事的。OSInit函数就是做这个的。此函数先初始化一些操作系统的一些全局变量,比如任务嵌套次数,空闲任务计数,操作系统运行开关等。然后就开始将我们创建的各种块,比如任务控制块,事件管理块,内存块,消息块原创 2014-01-23 20:46:57 · 1057 阅读 · 0 评论