STM3210E-EVAL官方开发板,主芯片STM32F103ZET6,支持ucLinux开发,官网也给出了开发套件。
但是官网没有给出BOOT的源代码,只有HEX文件(根据推测该HEX文件时KEIL生成的)。
看过UBOOT的启动后,了解了BOOT启动都干些什么事,我仿照UBOOT在KEIL软件下写功能超级简单的BOOT,就是完成外设的初始化,初始化控制器串口1,经过验证,可以跳转到内核,内核能够实现printf打印输出。
2025/6/28 22:53:54 232KB STM32 ucLinux Boot 源码
1
这个是很经典的问题实验题目:生产者与消费者(综合性实验)实验环境:C语言编译器实验内容:①由用户指定要产生的进程及其类别,存入进入就绪队列。
  ②调度程序从就绪队列中提取一个就绪进程运行。
如果申请的资源被阻塞则进入相应的等待队列,调度程序调度就绪队列中的下一个进程。
进程运行结束时,会检查对应的等待队列,激活队列中的进程进入就绪队列。
运行结束的进程进入over链表。
重复这一过程直至就绪队列为空。
  ③程序询问是否要继续?如果要转直①开始执行,否则退出程序。
实验目的:通过实验模拟生产者与消费者之间的关系,了解并掌握他们之间的关系及其原理。
由此增加对进程同步的问题的了解。
实验要求:每个进程有一个进程控制块(PCB)表示。
进程控制块可以包含如下信息:进程类型标号、进程系统号、进程状态、进程产品(字符)、进程链指针等等。
系统开辟了一个缓冲区,大小由buffersize指定。
程序中有三个链队列,一个链表。
一个就绪队列(ready),两个等待队列:生产者等待队列(producer);
消费者队列(consumer)。
一个链表(over),用于收集已经运行结束的进程本程序通过函数模拟信号量的操作。
参考书目:1)徐甲同等编,计算机操作系统教程,西安电子科技大学出版社2)AndrewS.Tanenbaum著,陈向群,马红兵译.现代操作系统(第2版).机械工业出版社3)AbranhamSilberschatz,PeterBaerGalvin,GregGagne著.郑扣根译.操作系统概念(第2版).高等教育出版社4)张尧学编著.计算机操作系统教程(第2版)习题解答与实验指导.清华大学出版社实验报告要求:(1)每位同学交一份电子版本的实验报告,上传到202.204.125.21服务器中。
(2)文件名格式为班级、学号加上个人姓名,例如:电子04-1-040824101**.doc  表示电子04-1班学号为040824101号的**同学的实验报告。
(3)实验报告内容的开始处要列出实验的目的,实验环境、实验内容等的说明,报告中要附上程序代码,并对实验过程进行说明。
基本数据结构:PCB*readyhead=NULL,*readytail=NULL;//就绪队列PCB*consumerhead=NULL,*consumertail=NULL;//消费者队列PCB*producerhead=NULL,*producertail=NULL;//生产者队列over=(PCB*)malloc(sizeof(PCB));//over链表intproductnum=0;//产品数量intfull=0,empty=buffersize;//semaphorecharbuffer[buffersize];//缓冲区intbufferpoint=0;//缓冲区指针structpcb{/*定义进程控制块PCB*/intflag;//flag=1denoteproducer;flag=2denoteconsumer;intnumlabel;charproduct;charstate;structpcb*processlink;……};processproc()---给PCB分配内存。
产生相应的的进程:输入1为生产者进程;
输入2为消费者进程,并把这些进程放入就绪队列中。
waitempty()---如果缓冲区满,该进程进入生产者等待队列;
linkqueue(exe,&producertail);//把就绪队列里的进程放入生产者队列的尾部voidsignalempty()boolwaitfull()voidsignalfull()voidproducerrun()voidcomsuerrun()voidmain(){processproc();element=hasElement(readyhead);while(element){exe=getq(readyhead,&readytail);printf("进程%d申请运行,它是一个",exe->numlabel);exe->flag==1?printf("生产者\n"):printf("消费者\n");if(exe->flag==1)producerrun();elsecomsuerrun();element=hasElement(readyhead);}printf("就绪队列没有进程\n");if(ha
1
voidshowMenu()//主菜单界面{printf("\n\n-------------===================主界面====================--------------");printf("\n\n");printf("火车票务管理系统\n");printf("\n");printf("1列车信息录入\n");printf("\n");printf("2列车信息删除\n");printf("\n");printf("3列车信息修改\n");printf("\n");printf("4列车信息输出\n");printf("\n");printf("5列车信息查询\n");printf("\n");printf("6列车票价排序\n");printf("-------------------------------------------------------------------------\n");printf("\n请输入你的选择:");}
2025/5/9 15:51:25 249KB 火车票 管理系统 C语言 数据结构
1
第6章解决“实用C编程”第6章中的练习练习6-1:编写一个程序来查找两个之间的距离的平方点。
(对于更高级的问题,请找到实际距离。
此问题涉及使用标准功能sqrt。
请使用您的帮助系统来查找有关如何使用此功能的更多信息。
)#include#include<math.h>intmain(){ floatx1,y1,x2,y2,gdistance; printf("Inputx1:"); scanf("%f",&x1); printf("Inputy1:"); scanf("%f",&y1);printf("Inputx2:"); scanf("%f",&x2); printf("Inputy2:");
2025/4/3 11:14:32 1KB
1
1、大数相乘。
要求实现两个十进制大整数的相乘,输出乘法运算的结果。
定义两个大单元,MUL乘法2、C语言编写多重循环程序,查看其反汇编码,分析各条语句功能,并采用汇编语言编写相同功能程序。
反汇编在WinDbg考虑两重循环3、结合Windows界面编程,实现计算器功能。
可以调用Windows的计算器4、实现内存与外存或者内存之间的大数据块复制,尽可能对代码进行性能优化,显示执行时间,并可通过WinDbg等查看执行结果。
执行前后时间5、C库函数底层分析与实现(printf\scanf\strcpy……),分析C库函数的底层实现细节,用汇编语言实现相同功能的简单C库函数。
分析printf6、通过查阅资料,采用汇编实现随机数算法。
随机数7、实现两个文本文件内容的比对。
若两文件内容一样,输出相应提示;
若两文件不一样,输出对应的行号。
详细请参考具体代码
2025/2/24 21:17:35 515KB 大数相乘
1
全套课程设计,经检验,程序无BUG#include#include"lex.h"main(){ //LexScan() //{ charch,ch1;//存放读入的字符 chartoken[50]={'\0'};//存放识别的字符串 inti=0;//字符串的指针 intflag;//字符串比较的标志 AttrWordattrword[200]={{"\0"}};//定义属性字 intAWflag=1;//属性字计数器 intk,c,flag1=0,Linenum=1; FILE*fp=fopen("d:\\lex.txt","r"); if(fp==NULL) { printf("can'topentext!"); exit(0); } ch=fgetc(fp);
2024/12/22 9:08:31 961KB 编译原理 课程设计 计算机
1
voidPrint(int*arr,intsz){inti=0;for(i=0;i<sz;i++){printf("%d",arr[i]);}}
2024/12/9 20:52:34 2KB TAG
1
1.把SEGGER_RTT.cSEGGER_RTT.hSEGGER_RTT_Conf.hSEGGER_RTT_printf.c4个文件,导入到keil项目中,记得工程中添加include引用路径.2.include"SEGGER_RTT.h"使用 SEGGER_RTT_printf(0,"SEGGERRTT%d%d%d\r\n",u,u1,key);函数输出字符到默认终端.使用SEGGER_RTT_TerminalOut(1,RTT_CTRL_TEXT_BRIGHT_RED"Counteroverflow!");指定终端输出3.显示用JLinkRTTViewer.exe或JLinkRTTClient.都是jlink自带的,如果没有说明jlink版本太低了.安装一下http://download.csdn.net/download/baidu_33184823/9310037
2024/12/5 6:41:24 17KB Jlink debug RTT 调试
1
2018worldfinal金牌吉老师几何板子structpoint{dbx,y;pointoperator+(constpoint&k1;)const{return(point){k1.x+x,k1.y+y};}pointoperator-(constpoint&k1;)const{return(point){x-k1.x,y-k1.y};}pointoperator*(dbk1)const{return(point){x*k1,y*k1};}pointoperator/(dbk1)const{return(point){x/k1,y/k1};}intoperator==(constpoint&k1;)const{returncmp(x,k1.x)==0&&cmp;(y,k1.y)==0;}pointturn(dbk1){return(point){x*cos(k1)-y*sin(k1),x*sin(k1)+y*cos(k1)};}pointturn90(){return(point){-y,x};}booloperator<(constpointk1)const{inta=cmp(x,k1.x);if(a==-1)return1;elseif(a==1)return0;elsereturncmp(y,k1.y)==-1;}dbabs(){returnsqrt(x*x+y*y);}dbabs2(){returnx*x+y*y;}dbdis(pointk1){return((*this)-k1).abs();}pointunit(){dbw=abs();return(point){x/w,y/w};}voidscan(){doublek1,k2;scanf("%lf%lf",&k1;,&k2;);x=k1;y=k2;}voidprint(){printf("%.11lf%.11lf\n",x,y);}dbgetw(){returnatan2(y,x);}pointgetdel(){if(sign(x)==-1||(sign(x)==0&&sign;(y)==-1))return(*this)*(-1);elsereturn(*this);}intgetP()const{returnsign(y)==1||(sign(y)==0&&sign;(x)==-1);}};
2024/8/28 10:17:11 23KB c++ algorithm
1
STM32F103的SD卡读取,移植的是fatfs文件系统,串口输出,需要把串口配置成自己板子上的,就可以用了,还有设计printf函数里的串口选择,别忘记了,绝对可以用,已经测试过了!
2024/8/8 19:05:29 5.02MB stm32f103 SDIO fatfs
1
共 68 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡