最简单的C程序(STM32版的helloworld)
- 格式:pdf
- 大小:631.44 KB
- 文档页数:22
hellocorld简单编程代码在计算机编程中,Hello World程序是一个非常基础的程序,用于向初学者展示如何编写一个简单的程序。
下面是一个使用不同编程语言编写的Hello World程序示例。
一、C语言版```c#include <stdio.h>int main() {printf("Hello, World!\n");return 0;}```解释:* `#include <stdio.h>`:这一行包含了标准输入输出头文件,它包含了`printf`函数的声明。
* `int main()`:这是程序的主函数,程序的执行从这里开始。
* `printf("Hello, World!\n");`:这一行会在屏幕上打印出"Hello, World!"。
`\n`表示换行。
* `return 0;`:表示程序正常结束。
二、Python版```pythonprint("Hello, World!")```解释:* `print("Hello, World!")`:这一行会在屏幕上打印出"Hello, World!"。
三、Java版```javapublic class HelloWorld {public static void main(String[] args) {System.out.println("Hello, World!");}}```解释:* `public class HelloWorld`:定义了一个公共类HelloWorld。
在Java中,每个程序都必须有一个主类。
* `public static void main(String[] args)`:这是程序的主函数,Java程序的执行从这里开始。
`main`方法必须声明为`public`和`static`,因为它是程序的入口点。
Helloworld!(内含⾃⼰编写的C语⾔⼆叉树同学录) 修改:刷了⼀段时间的题,⽔平渐涨,发现同学录真的要做成市⾯可⾏的应⽤的话,应该按学号建⽴⼆叉平衡树,红⿊树是⼀个可⾏的选择。
在同学的推荐下,来到博客园来找志同道合的⼈交流代码。
3个⽉后参加蓝桥杯⽐赛,报名的是C语⾔组,所以接下来3个⽉我会在此发布刷题时的⼼得与原创代码。
以下代码是我的课程设计⾃⼰花12⼩时编写的⼆叉树同学录。
反思⼀下⾃⼰的代码,删除节点⽤了取巧的办法,并没有完全删除节点内信息,仅仅是将学号数组第⼀个字符设为空,没有释放节点与接下来的连接节点。
为什么⽤⼆叉树,并没有掌握精髓,应该是要⽤⼆叉排序树按学号排序,这样搜索起来就快了。
不过因为仅仅是课程设计,也没⼼思真的去做⼀个很完美的程序。
另外代码中有⼀段重复使⽤率⽐较⾼,也没去单独编⼀个函数,没有使⽤⽤C语⾔中字符串相关的函数,初学者也能弄懂。
有兴趣的同学可以交流⼀下。
最后庆祝⼀下!第⼀次开通博客园账户,第⼀次写博客,感觉还是挺新奇的哈哈。
1 #include<stdio.h>2 #include<stdlib.h>3 typedef struct Student_node4 {5char number[20];6char name[20];7char sex[20];8char telephone[20];9char interest[100];10char favourite_sentence[1000];11struct Student_node *left;12struct Student_node *right;13 }student_node,*student;14int n,k,flagf=1,flagd=1,flaga=1,c=0,insert;15char findnumber[20];16void init(student *stu)17 {18 *stu=NULL;19 }20int make_student(student *stu)21 {22int i;23char t;24if(k==0)25 {26 *stu=NULL;27return0;28 }29 printf("当前节点有值则输⼊1,⽆值则输⼊0\n");30 scanf("\n%c",&t);31if(t=='0')32 *stu=NULL;33else if(t=='1')34 {35 *stu=(student)malloc(sizeof(student_node));36 printf("输⼊学号\n");37 scanf("\n%c",&t);38 (*stu)->number[0]=t;39for(i=1;t!='\n';i++)40 {41 scanf("%c",&t);42 (*stu)->number[i]=t;43 }44 t='\0';45 printf("输⼊名字\n");46for(i=0;t!='\n';i++)47 {48 scanf("%c",&t);49 (*stu)->name[i]=t;50 }51 t='\0';52 printf("输⼊性别\n");53for(i=0;t!='\n';i++)54 {55 scanf("%c",&t);56 (*stu)->sex[i]=t;57 }58 t='\0';59 printf("输⼊电话\n");60for(i=0;t!='\n';i++)61 {62 scanf("%c",&t);63 (*stu)->telephone[i]=t;64 }65 t='\0';66 printf("输⼊兴趣、爱好\n");67for(i=0;t!='\n';i++)68 {69 scanf("%c",&t);70 (*stu)->interest[i]=t;71 }72 t='\0';73 printf("输⼊座右铭\n");74for(i=0;t!='\n';i++)75 {76 scanf("%c",&t);77 (*stu)->favourite_sentence[i]=t;78 }79 t='\0';80 k--;81 make_student(&((*stu)->left));82 make_student(&((*stu)->right));83 }84return0;85 }86int show_student(student stu)87 {88int i;89if(k==0)90return0;91if(stu!=NULL)92 {93if(stu->number[0]!='\0')94 {95for(i=0;stu->number[i]!='\n';i++)96 printf("%c",stu->number[i]);97 printf("\n");98for(i=0;stu->name[i]!='\n';i++)99 printf("%c",stu->name[i]);100 printf("\n");101for(i=0;stu->sex[i]!='\n';i++)102 printf("%c",stu->sex[i]);103 printf("\n");104for(i=0;stu->telephone[i]!='\n';i++)105 printf("%c",stu->telephone[i]);106 printf("\n");107for(i=0;stu->interest[i]!='\n';i++)108 printf("%c",stu->interest[i]);109 printf("\n");110for(i=0;stu->favourite_sentence[i]!='\n';i++) 111 printf("%c",stu->favourite_sentence[i]); 112 printf("\n");113 printf("-----------------\n");114 }115 k--;116 show_student(stu->left);117 show_student(stu->right);118 }119return0;120 }121int find(student stu)122 {123int i,flag=0;124if(k==0)125return0;126if(stu!=NULL)127 {128 k--;129for(i=0;stu->number[i]!='\n'||findnumber[i]!='\n';i++) 130 {131if(findnumber[i]!=stu->number[i])132 {133 flag=1;134break;135 }136 }137if(!flag&&stu->number[i]==findnumber[i])138 {139 flagf=0;140for(i=0;stu->number[i]!='\n';i++)141 printf("%c",stu->number[i]);142 printf("\n");143for(i=0;stu->name[i]!='\n';i++)144 printf("%c",stu->name[i]);145 printf("\n");146for(i=0;stu->sex[i]!='\n';i++)147 printf("%c",stu->sex[i]);148 printf("\n");149for(i=0;stu->telephone[i]!='\n';i++)150 printf("%c",stu->telephone[i]);151 printf("\n");152for(i=0;stu->interest[i]!='\n';i++)153 printf("%c",stu->interest[i]);154 printf("\n");155for(i=0;stu->favourite_sentence[i]!='\n';i++)156 printf("%c",stu->favourite_sentence[i]);157 printf("\n");158 printf("-----------------\n");159return0;160 }161else162 {163 find(stu->left);164 find(stu->right);165 }166 }167return0;168 }169int delete_student(student *stu)170 {171int i,flag=0;172if(k==0)173return0;174if((*stu)!=NULL)175 {176 k--;177for(i=0;(*stu)->number[i]!='\n'||findnumber[i]!='\n';i++) 178 {179if(findnumber[i]!=(*stu)->number[i])180 {181 flag=1;182break;183 }184 }185if(!flag&&(*stu)->number[i]==findnumber[i])186 {187 flagd=0;188 (*stu)->number[0]='\0';189return0;190 }191else192 {193 delete_student(&((*stu)->left));194 delete_student(&((*stu)->right));195 }196 }197return0;198 }199int add_student(student *stu)200 {201int i;202char t;203if(k==0)204return0;205if((*stu)!=NULL)206 {207if((*stu)->number[0]=='\0')208 {209 flaga=0;210 printf("输⼊学号\n");211 scanf("\n%c",&t);212 (*stu)->number[0]=t;213for(i=1;t!='\n';i++)214 {215 scanf("%c",&t);216 (*stu)->number[i]=t;217 }218 t='\0';219 printf("输⼊名字\n");220for(i=0;t!='\n';i++)221 {222 scanf("%c",&t);223 (*stu)->name[i]=t;224 }225 t='\0';226 printf("输⼊性别\n");227for(i=0;t!='\n';i++)228 {229 scanf("%c",&t);230 (*stu)->sex[i]=t;231 }232 t='\0';233 printf("输⼊电话\n");234for(i=0;t!='\n';i++)235 {236 scanf("%c",&t);237 (*stu)->telephone[i]=t;238 }239 t='\0';240 printf("输⼊兴趣、爱好\n");241for(i=0;t!='\n';i++)242 {243 scanf("%c",&t);244 (*stu)->interest[i]=t;245 }246 t='\0';247 printf("输⼊座右铭\n");248for(i=0;t!='\n';i++)249 {250 scanf("%c",&t);251 (*stu)->favourite_sentence[i]=t; 252 }253 t='\0';254return0;255 }256else257 {258 add_student(&((*stu)->left));259 add_student(&((*stu)->right));260 }261 }262return0;263 }264int can_insert(student stu)265 {266if(stu!=NULL)267 {268 c++;269if(stu->left==NULL||stu->right==NULL) 270 {271 printf("%d ",c);272 can_insert(stu->left);273 can_insert(stu->right);274 }275else276 {277 can_insert(stu->left);278 can_insert(stu->right);279 }280 }281return0;282 }283void creat(student *stu)284 {285int i;286char t;287 *stu=(student)malloc(sizeof(student_node)); 288 n++;289 printf("输⼊学号\n");290 scanf("\n%c",&t);291 (*stu)->number[0]=t;292for(i=1;t!='\n';i++)293 {294 scanf("%c",&t);295 (*stu)->number[i]=t;296 }297 t='\0';298 printf("输⼊名字\n");299for(i=0;t!='\n';i++)300 {301 scanf("%c",&t);302 (*stu)->name[i]=t;303 }304 t='\0';305 printf("输⼊性别\n");306for(i=0;t!='\n';i++)307 {308 scanf("%c",&t);309 (*stu)->sex[i]=t;310 }311 t='\0';312 printf("输⼊电话\n");313for(i=0;t!='\n';i++)314 {315 scanf("%c",&t);316 (*stu)->telephone[i]=t;317 }318 t='\0';319 printf("输⼊兴趣、爱好\n");320for(i=0;t!='\n';i++)321 {322 scanf("%c",&t);323 (*stu)->interest[i]=t;324 }325 t='\0';326 printf("输⼊座右铭\n");327for(i=0;t!='\n';i++)328 {329 scanf("%c",&t);330 (*stu)->favourite_sentence[i]=t;331 }332 t='\0';333 init(&((*stu)->left));334 init(&(*stu)->right);335 }336int creat_student(student *stu)337 {338int x;339if(stu!=NULL)340 {341 c++;342if(c==insert)343 {344if((*stu)->left==NULL&&(*stu)->right==NULL)345 {346 printf("插⼊左节点请输⼊0,插⼊右节点请输⼊1\n");347 scanf("%d",&x);348if(!x)349 {350 creat(&((*stu)->left));351return0;352 }353else354 {355 creat(&((*stu)->right));356return0;357 }358 }359else if((*stu)->left==NULL)360 {361 printf("插⼊左节点\n");362 creat(&((*stu)->left));363return0;364 }365else if((*stu)->right==NULL)366 {367 printf("插⼊右节点\n");368 creat(&((*stu)->right));369return0;370 }371 }372else373 {374if((*stu)->left!=NULL)375 creat_student(&((*stu)->left));376if((*stu)->right!=NULL)377 creat_student(&((*stu)->right));378 }379 }380return0;381 }382int main()383 {384char x;385int i,key=0;386 student stu;387 printf("***************************创建同学录***************************\n"); 388 printf("学⽣个数\n");389 scanf("%d",&n);390 k=n;391 make_student(&stu);392 system("pause");393while(key!=5)394 {395 system("cls");396 printf("|***********************************************************|\n"); 397 printf("|**************************同学录***************************|\n"); 398 printf("|***********************************************************|\n\n\n"); 399 printf("1、遍历输出 2、查找 3、删除 4、增加 5、退出程序\n"); 400 scanf("%d",&key);401if(key==1)402 {403 k=n;404 printf("学号、姓名、性别、电话、爱好、座右铭\n-----------------\n"); 405 show_student(stu);406 }407if(key==2)408 {409 printf("请输⼊要查找的学⽣的学号\n");410 k=n;411 scanf("\n%c",&x);412 findnumber[0]=x;413for(i=1;x!='\n';i++)414 {415 scanf("%c",&x);416 findnumber[i]=x;417 }418 printf("学号、姓名、性别、电话、爱好、座右铭\n-----------------\n"); 419 find(stu);420if(flagf)421 printf("查⽆此⼈!\n");422 flagf=1;423 }424if(key==3)425 {426 printf("请输⼊要删除的学⽣的学号\n");427 k=n;428 scanf("\n%c",&x);429 findnumber[0]=x;430for(i=1;x!='\n';i++)431 {432 scanf("%c",&x);433 findnumber[i]=x;434 }435 delete_student(&stu);436if(flagd)437 printf("输⼊学号不正确,删除失败!\n");438else439 printf("删除成功!\n");440 flagd=1;441 }442if(key==4)443 {444 k=n;445 add_student(&stu);446if(flaga)447 {448 c=0;449 printf("以下节点可供插⼊\n");450 can_insert(stu);451 printf("\n");452 printf("插⼊到哪个节点之下?\n");453 scanf("%d",&insert);454 c=0;455 creat_student(&stu);456 }457 flaga=1;458 }459if(key==5)460 {461 exit(0);462 }463 system("pause");464 }465return0;466 }。
stm32电灯最简单代码在学习STM32单片机时,我们常常会选择最简单的例子进行学习和实践。
其中之一就是通过STM32实现一个简单的电灯控制,下面就是这个最简单的STM32电灯控制代码。
首先,需要在工程中添加头文件和宏定义:```#include 'stm32f10x.h'#define LED GPIO_Pin_13```其中,stm32f10x.h是STM32标准库中的头文件,GPIO_Pin_13表示LED所在引脚的编号。
然后,需要进行GPIO的初始化:```GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Pin = LED;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStructure);```其中,RCC_APB2PeriphClockCmd是时钟使能函数,将GPIOC的时钟开启;GPIO_InitStructure是GPIO初始化结构体,其中GPIO_Pin表示要初始化的引脚,GPIO_Mode表示引脚模式为输出模式,GPIO_Speed表示引脚速度为50MHz,GPIO_Init表示初始化。
最后,就是控制LED灯的代码:```while(1){GPIO_SetBits(GPIOC, LED); //LED亮Delay(0xFFFFF);GPIO_ResetBits(GPIOC, LED); //LED灭Delay(0xFFFFF);}```其中,GPIO_SetBits表示将LED引脚设置为高电平,GPIO_ResetBits表示将LED引脚设置为低电平,Delay是延时函数,0xFFFFF表示延时时间。
6个变态的C语言HelloWorld程序介绍6个变态的C语言Hello World程序介绍对于初学者来说,第一个程序一般都是hello world,本文是店铺搜索整理的6个变态的'C语言Hello World程序介绍,有需要的小伙伴可以参考一下,希望对大家有所帮助!想了解更多相关信息请持续关注我们店铺!下面的六个程序片段主要完成这些事情:输出Hello, World混乱C语言的源代码下面的所有程序都可以在GCC下编译通过,只有最后一个需要动用C++的编译器g++才能编程通过。
hello1.c#define _________ }#define ________ putchar#define _______ main#define _(a) ________(a);#define ______ _______(){#define __ ______ _(0x48)_(0x65)_(0x6C)_(0x6C)#define ___ _(0x6F)_(0x2C)_(0x20)_(0x77)_(0x6F)#define ____ _(0x72)_(0x6C)_(0x64)_(0x21)#define _____ __ ___ ____ _________#include<stdio.h>_____hello2.c#include<stdio.h>main(){int x=0,y[14],*z=&y;*(z++)=0x48;*(z++)=y[x++]+0x1D;*(z++)=y[x++]+0x07;*(z++)=y[x++]+0x00;*(z++)=y[x++]+ 0x03;*(z++)=y[x++]-0x43;*(z++)=y[x++]-0x0C;*(z++)=y[x++]+0x57;*(z++)=y[x++]-0x08;*(z++)=y[x++]+0x03;*(z++)=y[x++]-0x06;*(z++)=y[x++]-0x08;*(z++)=y[x++]-0x43;*(z++)=y[x]-0x21;x=*(--z);while(y[x]!=NULL)putchar(y[x++]);}hello3.c#include<stdio.h>#define __(a) goto a;#define ___(a) putchar(a);#define _(a,b) ___(a) __(b);main(){ _:__(t)a:_('r',g)b:_('$',p)c:_('l',f)d:_(' ',s)e:_('a',s)f:_('o',q)g:_('l',h)h:_('d',n)i:_('e',w)j:_('e',x)k:_('\n',z)l:_('H',l)m:_('X',i)n:_('!',k)o:_('z',q)p:_('q',b)q:_(',',d)r:_('i',l)s:_('w',v)t:_('H',j)u:_('a',a)v:_('o',a)w:_(')',k)x:_('l',c)y:_('\t',g)z:___(0x0)}hello4.cint n[]={0x48,0x65,0x6C,0x6C,0x6F,0x2C,0x20,0x77,0x6F,0x72,0x6C,0x64,0x21,0x0A,0x00},*m=n;main(n){putchar(*m)!='\0'?main(m++):exit(n++);}hello5.cmain(){int i,n[]={(((1<<1)<<(1<<1)<<(1<<1)<<(1<<(1>>1)))+((1<<1)<<(1<<1))), (((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<( 1<<1)<<(1<<1))+((1<<1)<<(1<<(1>>1)))+ (1 <<(1>>1))),(((1<<1)<<(1<<1)<<(1<<1)<< (1 <<1))-((1<<1)<<(1<<1)<<(1<<(1>>1)))- ((1<<1)<<(1<<(1>>1)))),(((1<<1)<<(1<<1)<<(1 <<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<(1>>1 )))-((1<<1)<<(1<<(1>>1)))),(((1<<1)<< (1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<( 1<<(1>>1)))-(1<<(1>>1))),(((1<<1)<<(1<<1)<<(1<<1))+((1<<1)<<(1<<1)<<(1<<(1>>1))) -((1<<1)<<(1<<(1>>1)))),((1<<1)<< (1<<1)<<(1<<1)),(((1<<1)<<(1<<1)<<(1<<1)<<(1<< 1))-((1<<1)<<(1<<1))-(1<<(1>>1))),(((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<< (1 <<1)<<(1<<(1>>1)))-(1<<(1>>1))), (((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))- ((1<<1)<< (1 <<1)<<(1<<(1>>1)))+(1<<1)), (((1<<1)<< (1<<1)<<(1<<1)<< (1<<1))-((1<<1)<< (1<<1) <<(1<<(1>>1)))-((1<<1) <<(1<< (1>>1)))), (((1<<1)<< (1<<1)<<(1<<1)<< (1<<1))- ((1<<1)<<(1<<1)<<(1<<1))+((1<<1)<< (1<<(1>> 1)))), (((1<<1)<<(1<<1) <<(1<<1))+(1<<(1 >>1))),(((1<<1)<<(1<<1))+((1<<1)<< (1<<( 1>>1))) + (1<< (1>>1)))}; for(i=(1>>1);i<(((1<<1) <<(1<<1))+((1 <<1)<< (1<<(1>>1))) + (1<<1)); i++) printf("%c",n[i]); }hello6.cpp下面的程序只能由C++的编译器编译(比如:g++)#include <stdio.h>#define _(_) putchar(_);int main(void){int i = 0;_(++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++i)_(++++++++++++++++++++++++++++++++++++++++++++++++++++++++++i)_(++++++++++++++i)_(--++i)_(++++++i)_(--------------------------------------------------------------------------------------------------------------------------------------i)_(------------------------i)_(++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++i)_(----------------i)_(++++++i)_(------------i)_(----------------i)_(--------------------------------------------------------------------------------------------------------------------------------------i)_(----------------------------------------------i)return i;}【6个变态的C语言Hello World程序介绍】。
各种语言的HelloWorld编程hello world百科名片C和C++“hello world”程序hello world作为所有编程语言的起始阶段,占据着无法改变的地位,所有中/英/法/德/美……版本的编程教材中,hello world总是作为第一个TEST记录于书本之中,所有的编程第一步就在于此了!经典之中的经典!hello world!目录简介 AKA 控制台: 传统图形界面应用开发工具: 基于web图形用户界面: 展开编辑本段简介这个例程是从Kernighan & Ritchie 合著的《The C Programme Language》开始有的,因为它的简洁,实用,并包含了一个程序所应具有的一切,因此为后来的些类书的作者提供了范例,一直待续到今。
我们刚开始接触计算机语言大多从Hello world 开始,下面是各种语言的Helloworld program:as400的RPGLE语言: D Vc_Hello s 100AC Eval Vc_Hello = 'Hello World!' C DSPLY Vc_Hello编辑本段AKA 控制台:ABC语言的Hello World程序WHILE (1=1) : WRITE \Ada语言的Hello World程序with Ada.Text_Io; use Ada.Text_Io; procedure Hello is beginPut_Line (\ end Hello;AmigaE语言的Hello World程序PROC main()WriteF('Hello, World!') ENDPROCAPL语言的Hello World程序'Hello World'Assembly语言的Hello World程序Accumulator-only architecture: DEC PDP-8, PAL-III assembler See the Example section of the PDP-8 article.Accumulator + index register machine: MOS 6502, CBM, ca65 asmMSG: .ASCIIZ \ LDX #0LDA MSG,X ; load initial char@LP: JSR $FFD2 ; CHROUT CBM KERNAL INXLDA MSG,X BNE @LP RTSAccumulator/Index microcoded machine: Data General Nova, RDOS See the example section of the Nova article.Expanded accumulator machine: Intel x86, MS-DOS, TASM MODEL SMALL IDEAL STACK 100HDATASEG语言的Hello World程序MSG DB 'Hello, world!$'CODESEG语言的Hello World程序MOV AX, @data MOV DS, AXMOV DX, OFFSET MSGMOV AH, 09H ; DOS: output ASCII$ string INT 21HMOV AX, 4C00H INT 21H ENDGeneral-purpose-register CISC: DEC PDP-11, RT-11, MACRO-11 .MCALL .REGDEF,.TTYOUT,.EXIT .REGDEFHELLO: MOV #MSG,R1 MOVB (R1),R0 LOOP: .TTYOUT MOVB +(R1),R0 BNE LOOP .EXITMSG: .ASCIZ /HELLO, WORLD!/ .END HELLOCISC: VAX, VMS, MACRO32 .title helloterm_name: .ascid /SYS$INPUT/ term_chan: .blkw 1 out_iosb: .blkq 1msg: .asciz /Hello, world!/ .entry start,0; establish a channel for terminal I/O $assign_s devnam=term_name,- chan=term_chan blbc r0,error; queue the I/O request $qio_s chan=term_chan,- func=#io$_writevblk,- iosb=out_iosb,- p1=msg,- p2=#13blbc r0,error $exit_s ; normal exit error: halt ; errorcondition .end startAWK语言的Hello World程序BEGIN { print \BASIC语言的Hello World程序PRINT \MS BASIC语言的Hello World程序(traditional, unstructured) 10 PRINT \ 20 ENDTI-BASIC语言的Hello World程序isp \Structured BASIC语言的Hello World程序print \BCPL语言的Hello World程序GET \ LET START () BE $(WRITES (\ $)BF语言的Hello World程序++++++++++[>+++++++>++++++++++>+++>+<<<++.>+.+++++++..+++.>++.<.+++.------.--------.>+.>.C语言的Hello World程序#include int main(void) {printf(\ }C++语言的Hello World程序#include using namespace std; int main() {cout << \ return 0; }C#语言的Hello World程序class HelloWorldApp {public static void Main() {System.Console.WriteLine(\ } }Clean语言的Hello World程序module hello Start :: String Start = \CLIST语言的Hello World程序PROC 0WRITE Hello, World!COBOL语言的Hello World程序IDENTIFICATION DIVISION. PROGRAM-ID. HELLO-WORLD. ENVIRONMENT DIVISION. DATA DIVISION. PROCEDURE DIVISION. DISPLAY \ STOP RUN.Common Lisp语言的Hello World程序(format t \感谢您的阅读,祝您生活愉快。
手把手教你用CBuilder实现硬件版helloworld编程控制电灯泡亮之前,我们公布了一篇关于人工智能的知识应用实例——智能家居开源系统的二次开发的文章,引起了广大读者朋友们的强烈反响。
有不少朋友向我们索取了智能家居硬件二次开发的源程序代码参考学习。
有问到C语言、Delphi,java语言、Python语言、visual studio .NET开发环境等,几乎涵盖了好多种语言和软件开发工具。
作为程序员来讲,几乎上都比较擅长软件应用的开发,但对于硬件这块的知识几乎是空白,更谈不上软硬件如何相结合进行二次开发了。
为此,我们将编写推出一系列的硬件二次开发的Demo小例程,都是基于硬件的二次开发,基于物联网技术的应用。
我们将给广大爱好者或程序员朋友们,带来硬件版的或者说物联网版本的Hello World程序,给大家对硬件控制带来一个崭新的认识。
原来,实现智能硬件的控制,你也一样可以哦,并不难,非常简单。
C++Builder 10.2.3由于作者本人,最早期使用的是C++Builder和Delphi的软件开发工具,出于怀旧吧,我们今天第一个硬件版Hello World程序将使用C++Builder来进行编写,软件使用的是C++Builder 10.2.3 最新的版本。
当然,这个开发工具也同样适用于Delphi的开发,毕竟是一个祖宗嘛。
好了,废话不多说了,我们下面就开始进行工程的创建。
这个工程的功能,就是让我们可以通过鼠标点击按钮,实现打开灯泡和关闭灯泡的功能。
创建工程首先,我们使用File菜单下面的“VCL Forms Application- C++ Builder”来创建程序窗口。
创建窗体这样,一个Form设计器界面,就在我们面前了。
摆放控件然后,我们在Form窗体上,摆放4个Button按钮,以及一个ClientSocket控件。
我们PC电脑和硬件智能控制盒使用Socket的通信方式,进行接互,对于硬件控制盒的关键点介绍,我们后面会进行讲解。
简单的c语言程序代码C语言是一种简单而强大的编程语言,广泛用于计算机科学和软件开发领域。
它的语法简洁明了,易于理解和学习。
在本文中,我们将介绍一些简单的C语言程序代码示例,以帮助初学者入门。
1. Hello, World!"Hello, World!"是编程中最简单的程序,它可以让我们在屏幕上输出一条简单的问候语。
以下是使用C语言编写的Hello World程序的示例代码:```c#include <stdio.h>int main() {printf("Hello, World!");return 0;}```在这个示例中,我们使用了`stdio.h`头文件,其中包含了输入输出函数的定义。
`printf`函数用于将文本输出到屏幕上。
`int main()`是程序的主函数,程序从这里开始执行。
`return 0;`语句表示程序执行成功。
2. 计算两个数的和这个示例程序可以计算两个数的和,并将结果打印到屏幕上。
以下是示例代码:```c#include <stdio.h>int main() {int num1, num2, sum;printf("请输入两个整数:");scanf("%d%d", &num1, &num2);sum = num1 + num2;printf("两个数的和是:%d", sum);return 0;}```在这个程序中,我们首先声明了三个整型变量`num1`、`num2`和`sum`。
`printf`函数用于显示提示信息,要求用户输入两个整数。
然后,使用`scanf`函数将用户输入的值存储在`num1`和`num2`中。
接下来,我们计算两个数的和,将结果存储在`sum`中,并使用`printf`函数将结果显示在屏幕上。
3. 判断一个数是否为正数下面是一个简单的程序示例,可以判断用户输入的数是否为正数。
stm32三自由度机器人c语言程序代码main.c/******************************************************************************** * @file GPIO/IOToggle/main.c* @author MCD Application Team* @version V3.5.0* @date 08-April-2011* @brief Main program body.****************************************************************************** * @attention******************************************************************************* *//* Includes ------------------------------------------------------------------*/ #include "stm32f10x.h"#include <stdio.h>#include "main.h"#include "delay.h"#include "DMA.h"#include "TIMx.h"#include "GPIOx.h"#include "NVIC.h"#include "USARTx.h"/* 宏定义 ------------------------------------------------------------------*/ #define uchar unsigned char#define uint unsigned int#define Motor1_SUB 16 //电机1 16细分#define Motor2_SUB 16 //电机2 16细分#define Motor3_SUB 16 //电机3 16细分#define Motor1_DIR PAout( 4 ) //电机1 方向#define Motor2_DIR PAout( 5 ) //电机2 方向#define Motor3_DIR PAout( 7 ) //电机3 方向#define Motor1_UP Motor1_DIR = 1 //电机1 上升#define Motor2_UP Motor2_DIR = 1 //电机2 上升#define Motor3_UP Motor3_DIR = 1 //电机3 上升#define Motor1_DOWN Motor1_DIR = 0 //电机1 下降#define Motor2_DOWN Motor2_DIR = 0 //电机2 下降#define Motor3_DOWN Motor3_DIR = 0 //电机3 下降/* 变量定义 ------------------------------------------------------------------*/ u8 Delay_1s_Finishflag = 0;u8 KeyTrg = 0; //按键触发u8 KeyCont = 0; //按键长按uint i;u16 EXIT0_CNT = 0;u8 Motor1_OriginFlag = 0; //电机1 原点标识u8 Motor2_OriginFlag = 0; //电机1 原点标识u8 Motor3_OriginFlag = 0; //电机1 原点标识u8 Motor_Arrived = 0; //电机到达标识/* 函数声明 ------------------------------------------------------------------*/ void RTC_configuration( void );void RCC_Configuration( void );void KeyRead( void );void Delay_Ms( u16 time );void delay_1s( uint time );//================================== MAIN=======================================int main( void )u16 i = 0;BUZZER = 0;//蜂鸣器复位GPIOE -> ODR &= 0xffff0000; //LED1 ~ LED8 = 0;RCC_Configuration();// RTC_configuration();GPIO_Configuration();NVIC_Configuration();EXTI_Configuration();Motor_Init( 0 0 0 );//TIM1关闭状态不会触发TIM2//屏蔽所有外部中断EXTI -> IMR = 0;if( LS1 ){TIM_CCxCmd( TIM2 TIM_Channel_1 TIM_CCx_Disable );Motor1_OriginFlag = 1;}if( LS2 ){TIM_CCxCmd( TIM2 TIM_Channel_2 TIM_CCx_Disable );Motor2_OriginFlag = 1;}if( LS3 ){TIM_CCxCmd( TIM2 TIM_Channel_3 TIM_CCx_Disable );Motor3_OriginFlag = 1;}Delay_Ms( 1000 );//开启所有外部中断EXTI -> IMR = 0x07;while( !Motor1_OriginFlag | !Motor2_OriginFlag | !Motor3_OriginFlag ){TIM1_TIM2_PWM( 1000 3200 );//让没有回到原位的导轨滑块回到原位用于初始状态的调平基准}//屏蔽所有外部中断EXTI -> IMR = 0;TIM_Cmd( TIM1 DISABLE );//关闭TIM1TIM1 -> CNT = 0;//定时器1 当前计数值清零TIM2 -> CNT = 0;//定时器2 当前计数值清零Delay_Ms( 1000 );Motor1_UP;//电机1 上升Motor2_UP;//电机2 上升Motor3_UP;//电机3 上升TIM_CCxCmd( TIM2 TIM_Channel_1 TIM_CCx_Enable );//使能 TIM2 -> CH1通道PWM输出TIM_CCxCmd( TIM2 TIM_Channel_2 TIM_CCx_Enable );//使能 TIM2 -> CH2通道PWM输出TIM_CCxCmd( TIM2 TIM_Channel_3 TIM_CCx_Enable );//使能 TIM2 -> CH3通道PWM输出TIM_ITConfig( TIM1 TIM_IT_Update ENABLE ); //开启TIM1中断Motor_Arrived = 0;TIM1_TIM2_PWM( 1000 1600 );while( !Motor_Arrived );Motor_Arrived = 0;TIM1_TIM2_PWM( 700 3200 );while( !Motor_Arrived );Motor1_DOWN;//电机1 下降Motor2_DOWN;//电机2 下降Motor3_DOWN;//电机3 下降Motor_Arrived = 0;TIM1_TIM2_PWM( 500 1600 );while( !Motor_Arrived );//==================================== F1=========================================TIM_CCxCmd( TIM2 TIM_Channel_1 TIM_CCx_Disable ); //关闭 TIM2 -> CH1通道PWM输出TIM_CCxCmd( TIM2 TIM_Channel_2 TIM_CCx_Enable ); //使能 TIM2 -> CH2通道PWM输出TIM_CCxCmd( TIM2 TIM_Channel_3 TIM_CCx_Disable ); //关闭 TIM2 -> CH3通道PWM输出Motor_Arrived = 0;Motor2_UP;//电机2 上升TIM1_TIM2_PWM( 1500 500 );//2#电机上升while( !Motor_Arrived );delay_ms( 2000 );TIM_CCxCmd( TIM2 TIM_Channel_1 TIM_CCx_Enable ); //使能 TIM2 -> CH1通道PWM输出TIM_CCxCmd( TIM2 TIM_Channel_2 TIM_CCx_Disable ); //关闭 TIM2 -> CH2通道PWM输出TIM_CCxCmd( TIM2 TIM_Channel_3 TIM_CCx_Disable ); //关闭 TIM2 -> CH3通道PWM输出Motor_Arrived = 0;Motor1_UP;//电机1 上升TIM1_TIM2_PWM( 1500 1500 );//1#电机上升while( !Motor_Arrived );delay_ms( 3000 );//==================================== F2=========================================TIM_CCxCmd( TIM2 TIM_Channel_1 TIM_CCx_Disable ); //关闭 TIM2 -> CH1通道PWM输出TIM_CCxCmd( TIM2 TIM_Channel_2 TIM_CCx_Enable ); //使能 TIM2 -> CH2通道PWM输出TIM_CCxCmd( TIM2 TIM_Channel_3 TIM_CCx_Disable ); //关闭 TIM2 -> CH3通道PWM输出Motor_Arrived = 0;Motor2_DOWN;//电机2 下降TIM1_TIM2_PWM( 1500 2000 );//2#电机下降while( !Motor_Arrived );delay_ms( 3000 );TIM_CCxCmd( TIM2 TIM_Channel_1 TIM_CCx_Disable ); //关闭 TIM2 -> CH1通道PWM输出TIM_CCxCmd( TIM2 TIM_Channel_2 TIM_CCx_Disable ); //关闭 TIM2 -> CH2通道PWM输出TIM_CCxCmd( TIM2 TIM_Channel_3 TIM_CCx_Enable ); //使能 TIM2 -> CH3通道PWM输出Motor_Arrived = 0;Motor3_UP;//电机3 上升TIM1_TIM2_PWM( 1500 1500 );//3#电机上升while( !Motor_Arrived );delay_ms( 3000 );TIM_CCxCmd( TIM2 TIM_Channel_1 TIM_CCx_Enable ); //使能 TIM2 -> CH1通道PWM输出TIM_CCxCmd( TIM2 TIM_Channel_2 TIM_CCx_Disable ); //关闭 TIM2 -> CH2通道PWM输出TIM_CCxCmd( TIM2 TIM_Channel_3 TIM_CCx_Disable ); //关闭 TIM2 -> CH3通道PWM输出Motor_Arrived = 0;Motor1_DOWN;//电机1 下降TIM1_TIM2_PWM( 1500 2500 );//1#电机下降while( !Motor_Arrived );delay_ms( 3000 );//=================================== F3=========================================TIM_CCxCmd( TIM2 TIM_Channel_1 TIM_CCx_Disable ); //关闭 TIM2 -> CH1通道PWM输出TIM_CCxCmd( TIM2 TIM_Channel_2 TIM_CCx_Enable ); //使能 TIM2 -> CH2通道PWM输出TIM_CCxCmd( TIM2 TIM_Channel_3 TIM_CCx_Disable ); //关闭 TIM2 -> CH3通道PWM输出Motor_Arrived = 0;Motor2_UP;//电机2 上升TIM1_TIM2_PWM( 1500 3000 );//2#电机上升while( !Motor_Arrived );delay_ms( 2000 );//==================================== F4=========================================TIM_CCxCmd( TIM2 TIM_Channel_1 TIM_CCx_Enable ); //使能 TIM2 -> CH1通道PWM输出TIM_CCxCmd( TIM2 TIM_Channel_2 TIM_CCx_Disable ); //关闭 TIM2 -> CH2通道PWM输出TIM_CCxCmd( TIM2 TIM_Channel_3 TIM_CCx_Disable ); //关闭 TIM2 -> CH3通道PWM输出Motor_Arrived = 0;Motor1_UP;//电机1 上升TIM1_TIM2_PWM( 1500 2500 );//1#电机上升while( !Motor_Arrived );delay_ms( 3000 );//==================================== F5=========================================TIM_CCxCmd( TIM2 TIM_Channel_1 TIM_CCx_Disable ); //关闭 TIM2 -> CH1通道PWM输出TIM_CCxCmd( TIM2 TIM_Channel_2 TIM_CCx_Disable ); //关闭 TIM2 -> CH2通道PWM输出TIM_CCxCmd( TIM2 TIM_Channel_3 TIM_CCx_Enable ); //使能 TIM2 -> CH3通道PWM输出Motor_Arrived = 0;Motor3_UP;//电机3 上升TIM1_TIM2_PWM( 1500 2500 );//3#电机上升while( !Motor_Arrived );delay_ms( 3000 );//==================================== F6=========================================TIM_CCxCmd( TIM2 TIM_Channel_1 TIM_CCx_Disable ); //关闭 TIM2 -> CH1通道PWM输出TIM_CCxCmd( TIM2 TIM_Channel_2 TIM_CCx_Enable ); //使能 TIM2 -> CH2通道PWM输出TIM_CCxCmd( TIM2 TIM_Channel_3 TIM_CCx_Disable ); //关闭 TIM2 -> CH3通道PWM输出Motor_Arrived = 0;Motor2_UP;//电机2 上升TIM1_TIM2_PWM( 1500 3000 );//2#电机上升while( !Motor_Arrived );delay_ms( 2000 );//================================ F7 回原位======================================TIM_CCxCmd( TIM2 TIM_Channel_1 TIM_CCx_Enable ); //使能 TIM2 -> CH1通道PWM输出TIM_CCxCmd( TIM2 TIM_Channel_2 TIM_CCx_Disable ); //关闭 TIM2 -> CH2通道PWM输出TIM_CCxCmd( TIM2 TIM_Channel_3 TIM_CCx_Disable ); //关闭 TIM2 -> CH3通道PWM输出Motor_Arrived = 0;TIM1_TIM2_PWM( 1500 3000 );//1#电机上升while( !Motor_Arrived );TIM_CCxCmd( TIM2 TIM_Channel_1 TIM_CCx_Disable ); //关闭 TIM2 -> CH1通道PWM输出TIM_CCxCmd( TIM2 TIM_Channel_2 TIM_CCx_Disable ); //关闭 TIM2 -> CH2通道PWM输出TIM_CCxCmd( TIM2 TIM_Channel_3 TIM_CCx_Enable ); //使能 TIM2 -> CH3通道PWM输出Motor_Arrived = 0;Motor3_UP;//电机3 上升TIM1_TIM2_PWM( 1500 500 );//3#电机上升while( !Motor_Arrived );delay_ms( 2000 );for( i = 0; i < 5; ++i ){BUZZER = !BUZZER;delay_ms( 200 );}BUZZER = 0;//蜂鸣器复位while ( 1 ){LED2 = 1;LED3 = 1;LED1 = 1;delay_ms( 1000 );LED1 = 0;delay_ms( 1000 );}}//==========================子程序入口=================================/*** @brief 时钟配置* @param None* @retval None*///外部晶振为8M PLLCLK=SYSCLK=72M HCLK=72M P2CLK=72M P1CLK=36M ADCCLK=36M USBCLK=48M TIMCLK=72Mvoid RCC_Configuration( void ){ErrorStatus HSEStartUpStatus; //定义错误状态枚举变量ERROR SUCCESSRCC_DeInit(); //RCC寄存器重新设置为默认值RCC_HSEConfig( RCC_HSE_ON ); //打开外部高速时钟晶振HSEStartUpStatus = RCC_WaitForHSEStartUp();//等待外部高速时钟工作if(HSEStartUpStatus == SUCCESS){RCC_HCLKConfig( RCC_SYSCLK_Div1 ); //设置AHB不分频 HCLK = SYSCLKRCC_PCLK2Config( RCC_HCLK_Div1 ); //设置APB2不分频 P2CLK = HCLKRCC_PCLK1Config( RCC_HCLK_Div2 ); //设置APB1为2分频P1CLK = HCLK / 2FLASH_SetLatency( FLASH_Latency_2 ); //设置FLASH代码延时FLASH_PrefetchBufferCmd( FLASH_PrefetchBuffer_Enable ); //设置预取指缓存RCC_PLLConfig( RCC_PLLSource_HSE_Div1 RCC_PLLMul_9 ); //设置PLL时钟外部时钟不分频为HSE的9倍频8MhZ * 9 = 72MHZRCC_PLLCmd(ENABLE); //使能PLLwhile(RCC_GetFlagStatus( RCC_FLAG_PLLRDY) == RESET ); //等待PLL准备就绪 RCC_SYSCLKConfig( RCC_SYSCLKSource_PLLCLK ); //设置PLL为系统时钟源while( RCC_GetSYSCLKSource() != 0x08 ); //判断PLL是否为系统时钟源}}/*** @brief RTC实时时钟配置* @param None* @retval None*/void RTC_configuration( void ){RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP|RCC_APB1Periph_PWRENABLE);PWR_BackupAccessCmd(ENABLE);BKP_DeInit();RCC_LSEConfig(RCC_LSE_ON);while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET);RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);RCC_RTCCLKCmd(ENABLE);RTC_WaitForSynchro();RTC_WaitForLastTask();RTC_WaitForLastTask();RTC_SetPrescaler( 32767 );RTC_WaitForLastTask();PWR_BackupAccessCmd(DISABLE);}/*** @brief STM32主板按键查询函数* @param None* @retval None*/void KeyRead( void ){u8 ReadKey_Data; //读取按键输入数据ReadKey_Data = GPIOC -> IDR ^ 0x0f;KeyTrg = ReadKey_Data & ( ReadKey_Data ^ KeyCont ); KeyCont = ReadKey_Data;}/*** @brief 软件延时函数* @param None* @retval None*/void Delay_Ms( u16 time ) //延时1ms函数{u16 ij;for( i = 0; i < time; i++ )for( j = 10000; j > 0; j-- );}/*** @brief TIM4 精确延时* @param None* @retval None*/void delay_1s( uint time ) //延时1s函数uint i;for( i = 0; i < time; i++ ){TIM_Cmd( TIM4 ENABLE ); //开启定时器TIM4while( !Delay_1s_Finishflag );Delay_1s_Finishflag = 0;}}/******************************************************************************** * @file GPIO/IOToggle/stm32f10x_it.c* @author MCD Application Team* @version V3.5.0* @date 08-April-2011* @brief Main Interrupt Service Routines.* This file provides template for all exceptions handler and peripherals* interrupt service routine.****************************************************************************** * @attention** THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE * TIME. AS A RESULT STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY* DIRECT INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.** <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>****************************************************************************** *//* Includes ------------------------------------------------------------------*/ #include "stm32f10x_it.h"#include "main.h"#include "dma.h"#include "GPIOx.h"/* 宏定义 -------------------------------------------------------------------*///=================================MAIN中定义====================================extern u16 EXIT0_CNT;extern u8 Motor1_OriginFlag; //电机1 原点标识extern u8 Motor2_OriginFlag; //电机1 原点标识extern u8 Motor3_OriginFlag; //电机1 原点标识extern u8 Motor_Arrived; //电机到达标识// -------------------------------- SENSOR USE--------------------------------- extern u8 Delay_1s_Finishflag;extern void Delay_Ms( u16 time );//=================================MAIN中定义====================================//****************************************************************************** */** @addtogroup STM32F10x_StdPeriph_Examples* @{*//** @addtogroup GPIO_IOToggle* @{*//* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ /* Private functions ---------------------------------------------------------*//******************************************************************************/ /* Cortex-M3 Processor Exceptions Handlers */ /******************************************************************************//*** @brief This function handles NMI exception.* @param None* @retval None*/void NMI_Handler(void){}/*** @brief This function handles Hard Fault exception.* @param None* @retval None*/void HardFault_Handler(void){/* Go to infinite loop when Hard Fault exception occurs */while (1){}}/*** @brief This function handles Memory Manage exception.* @param None* @retval None*/void MemManage_Handler(void){/* Go to infinite loop when Memory Manage exception occurs */ while (1){}}/*** @brief This function handles Bus Fault exception.* @param None* @retval None*/void BusFault_Handler(void){/* Go to infinite loop when Bus Fault exception occurs */ while (1){}}/*** @brief This function handles Usage Fault exception.* @param None* @retval None*/void UsageFault_Handler(void){/* Go to infinite loop when Usage Fault exception occurs */ while (1){}}/*** @brief This function handles SVCall exception.* @param None* @retval None*/void SVC_Handler(void){}/*** @brief This function handles Debug Monitor exception.* @param None* @retval None*/void DebugMon_Handler(void){}/*** @brief This function handles PendSV_Handler exception.* @param None* @retval None*/void PendSV_Handler(void){}/*** @brief This function handles SysTick Handler.* @param None* @retval None*/void SysTick_Handler(void){}/*** @brief This function handles TIM4 global interrupt request.* @param None* @retval None*/void TIM4_IRQHandler( void ){if( TIM_GetITStatus( TIM4 TIM_IT_Update ) != RESET ){TIM_Cmd( TIM4 DISABLE ); //关闭定时器TIM4TIM_ClearITPendingBit( TIM4 TIM_FLAG_Update ); //清除TIM4中断待处理位 Delay_1s_Finishflag = 1; //延时1s完成标志}}/************************************************************ 函数名:TIM3_IRQHandler** 功能描述:TIM3中断服务程序** 输入参数: 无** 输出参数: 无***********************************************************/void TIM3_IRQHandler( void )}/*** @brief This function handles TIM2 global interrupt request.* @param None* @retval None*/void TIM2_IRQHandler( void ){}/*** @brief This function handles TIM4 global interrupt request.* @param None* @retval None*/void TIM1_UP_IRQHandler( void ){if( TIM_GetITStatus( TIM1 TIM_IT_Update ) != RESET ){TIM_ClearITPendingBit( TIM1 TIM_IT_Update ); //清除TIM1中断待处理位 TIM_Cmd( TIM1 DISABLE ); //关闭定时器TIM1Motor_Arrived = 1; //电机定位完成LED8 = !LED8;}}/*** @brief This function handles USART3 global interrupt request.* @param None* @retval None*/void USART1_IRQHandler( void ){GPIO_SetBits( GPIOC GPIO_Pin_4 );Delay_Ms( 1000 );USART_ClearFlag( USART1 USART_FLAG_RXNE );USART_ClearITPendingBit( USART1 USART_FLAG_RXNE );/*** @brief DMA1 -> CH7 USART2发送数据完成DMA中断入口* @param None* @retval None*/void DMA1_Channel7_IRQHandler( void ){LED2 = 1;if( DMA_GetFlagStatus( DMA1_FLAG_TC7 ) != RESET ){LumMod_Uart_DAM_Tx_Over();}}/*** @brief This function handles USART3 global interrupt request.* @param None* @retval None*/void USART3_IRQHandler( void ){}/*** @brief DMA1 -> CH6 USART2接收数据完成DMA中断入口* @param None* @retval None*/void USART2_IRQHandler( void ){LED3 = 1;if( USART_GetITStatus( USART2 USART_IT_IDLE ) != RESET ) // 空闲中断 {LumMod_Uart_DMA_Rx_Data();USART_ReceiveData( USART2 ); // Clear IDLE interrupt flag bit}}* @brief This function handles EXTI0 global interrupt request. * @param None* @retval None*/void EXTI0_IRQHandler( void ){if( EXTI_GetITStatus( EXTI_Line0 ) != RESET ){delay_ms( 10 );//延时防止抖动if( LS1 == 1 ){LED5 = !LED5;}while( !LS1 );TIM_CCxCmd( TIM2 TIM_Channel_1 TIM_CCx_Disable );Motor1_OriginFlag = 1;//电机1 到达原点EXTI_ClearITPendingBit( EXTI_Line0 );EXTI -> IMR = 0x06;//关闭外部中断0}}/*** @brief This function handles EXTI1 global interrupt request. * @param None* @retval None*/void EXTI1_IRQHandler( void ){if( EXTI_GetITStatus( EXTI_Line1 ) != RESET ){delay_ms( 10 );//延时防止抖动if( LS2 == 1 ){LED6 = !LED6;}while( !LS2 );TIM_CCxCmd( TIM2 TIM_Channel_2 TIM_CCx_Disable );Motor2_OriginFlag = 1;//电机2 到达原点EXTI_ClearITPendingBit( EXTI_Line1 );EXTI -> IMR = 0x05;//关闭外部中断1}}/*** @brief This function handles EXTI2 global interrupt request.* @param None* @retval None*/void EXTI2_IRQHandler( void ){if( EXTI_GetITStatus( EXTI_Line2 ) != RESET ){delay_ms( 10 );//延时防止抖动if( LS3 == 1 ){LED7 = !LED7;}while( !LS3 );TIM_CCxCmd( TIM2 TIM_Channel_3 TIM_CCx_Disable );Motor3_OriginFlag = 1;//电机3 到达原点EXTI_ClearITPendingBit( EXTI_Line2 );EXTI -> IMR = 0x03;//关闭外部中断2}}/******************************************************************************/ /* STM32F10x Peripherals Interrupt Handlers */ /* Add here the Interrupt Handler for the used peripheral(s) (PPP) for the */ /* available peripheral interrupt handler's name please refer to the startup */ /* file (startup_stm32f10x_xx.s). */ /******************************************************************************//*** @brief This function handles PPP interrupt request.* @param None* @retval None*//*void PPP_IRQHandler(void){}*//*** @}*//*** @}*//******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****//******************************************************************************** * @file 传感器模块测试程序/LCD12864/LCD12864_main.c* @author dotod* @version V1.0* @date 10-DEC-2017* @brief Main program body.****************************************************************************** * @attention printf() 输出打印函数******************************************************************************* */#include "printf.h"/******************************************************************************* * Function Name : fputc* Descxxxxription : 重定向printf() 函数* Input :* Output : None* Return : None*******************************************************************************/int fputc( int ch FILE *f ){USART2 -> SR; //USART_GetFlagStatus( USART1 USART_FLAG_TC ) 解决第一个字符发送失败的问题USART_SendData( USART2 ( unsigned char ) ch ); //顺序发送字符while( USART_GetFlagStatus( USART2 USART_FLAG_TC )!= SET ); //等待发送完成return( ch );}/******************************************************************************* * Function Name : fgetc* Descxxxxription : 重定向scanf() 函数* Input :* Output : None* Return : None*******************************************************************************/ int fgetc( FILE *f ){while ( USART_GetFlagStatus( USART3 USART_FLAG_RXNE ) == RESET ); //等待串口1输入数据return (int)USART_ReceiveData( USART3 );}/******************************************************************************** * @file 传感器模块测试程序/delay();* @author dotod* @version V1.0* @date 10-DEC-2017* @brief Main program body.****************************************************************************** * @attention* SYSTICK 非中断方式实现精确延时 SYSTICK时钟固定为HCLK的时钟1/8* 选用内部时钟源72M 所以SYSTICK的时钟为9M 即SYSTICK定时器以9M的频率递减* SysTick 主要包括CTRL LOAD VAL CALIB 4个寄存器*********************************************************************************//* Includes ------------------------------------------------------------------*/ #include "delay.h"/*** @brief 实现us精确延时* @param None* @retval None*/void delay_us( u32 nus ){u32 temp;SysTick -> LOAD = 9 * nus;SysTick -> VAL = 0X00;//清空计数器SysTick -> CTRL = 0X01;//使能减到零是无动作采用外部时钟源do{temp = SysTick -> CTRL;//读取当前倒计数值}while( ( temp & 0x01 ) && ( ! ( temp & ( 1 << 16 ) ) ) );//等待时间到达SysTick -> CTRL = 0x00; //关闭计数器SysTick -> VAL = 0X00; //清空计数器}/*** @brief 实现ms精确延时* @param None* @retval None*/void delay_ms( u16 nms ){u32 temp;SysTick -> LOAD = 9000 * nms;SysTick -> VAL = 0X00;//清空计数器SysTick -> CTRL = 0X01;//使能减到零是无动作采用外部时钟源do{temp=SysTick -> CTRL;////读取当前倒计数值}while( ( temp & 0x01 ) && ( !( temp & ( 1 << 16 ) ) ) );//等待时间到达SysTick -> CTRL = 0x00; //关闭计数器SysTick -> VAL = 0X00; //清空计数器}/********************************************************************************* @file 传感器模块测试程序* @author dotod* @version V1.0* @date 10-DEC-2017* @brief******************************************************************************* @attention********************************************************************************//* Includes ------------------------------------------------------------------*/ #include "DMA.h"#include <stdio.h>#include <string.h>/* 变量定义 ------------------------------------------------------------------*/u8 LumMod_Tx_Buf[ 20 ];u8 LumMod_Rx_Buf[ 20 ];uint LumMod_Rx_Data_index = 0;uint LUMMOD_TX_BSIZE = 0;uint LUMMOD_RX_BSIZE = 0;/*** @brief USART_DMA_Init USART1 DMA通道配置* @param None* @retval None*/void USART_DMA_Init( void ){DMA_InitTypeDef DMA_InitStructure;/* DMA1 clock enable */RCC_AHBPeriphClockCmd( RCC_AHBPeriph_DMA1 ENABLE ); //开启DMA1时钟/*--- LUMMOD_UART_Tx_DMA_Channel DMA Config ---*/DMA_Cmd( DMA1_Channel7 DISABLE ); // 关闭DMA通道7DMA_DeInit( DMA1_Channel7 ); // 恢复DMA通道配置缺省值DMA_InitStructure.DMA_PeripheralbaxxxxseAddr = ( uint32_t )( &USART2 -> DR ); // 设置串口发送数据寄存器地址DMA_InitStructure.DMA_MemorybaxxxxseAddr = ( uint32_t )LumMod_Tx_Buf; // 设置发送数据缓冲区首地址DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;// 设置数据传输方向双向传输内存缓冲区 -> 外设寄存器DMA_InitStructure.DMA_BufferSize = LUMMOD_TX_BSIZE;// 需要发送的字节数这里可以设置为0 实际要发送数据时会重新设置次值DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;// 设置外设递增模式因为该通道只连接一个外设所以不需要递增DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;// 设置DMA内存缓冲区地址递增模式DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;// 外设数据宽度为8位 1个字节DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;// 内存数据宽度为8位 1个字节DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;// 设置DMA传输方式单次传输模式DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;// 优先级设为很高DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;// 关闭内存到内存的DMA方式DMA_Init( DMA1_Channel7 &DMA_InitStructure ); // DMA通道初始化DMA_ClearFlag( DMA1_FLAG_GL7 ); // 清除DMA所有标志DMA_Cmd( DMA1_Channel7 DISABLE ); // 失能DMADMA_ITConfig( DMA1_Channel7 DMA_IT_TC ENABLE ); // 开启发送DMA中断/*--- LUMMOD_UART_Rx_DMA_Channel DMA Config ---*/DMA_Cmd( DMA1_Channel6 DISABLE ); // 关闭DMA通道6DMA_DeInit( DMA1_Channel6 ); // 恢复DMA通道配置缺省值DMA_InitStructure.DMA_PeripheralbaxxxxseAddr = LUMMOD_UART_DR_baxxxxse; // 设置串口接收数据寄存器地址DMA_InitStructure.DMA_MemorybaxxxxseAddr = ( uint32_t )LumMod_Rx_Buf; // 设置接收数据缓冲区首地址DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;// 设置数据传输方向双向传输外设寄存器 -> 内存缓冲区DMA_InitStructure.DMA_BufferSize = LUMMOD_RX_BSIZE;// 设置最大接收字节数DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;// 设置外设递增模式因为该通道只连接一个外设所以不需要递增DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;// 设置DMA内存缓冲区地址递增模式DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;// 外设数据宽度为8位 1个字节DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;// 内存数据宽度为8位 1个字节DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;// 设置DMA传输方式单次传输模式DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;// 优先级设为很高DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;// 关闭内存到内存的DMA方式DMA_Init( DMA1_Channel6 &DMA_InitStructure ); // DMA通道初始化DMA_ClearFlag( DMA1_FLAG_GL6 ); // 清除DMA所有标志DMA_Cmd( DMA1_Channel6 ENABLE ); // 开启DAM接收通道等待接收数据}/*** @brief DMA1 -> CH7 USART2发送数据完成DMA中断处理* @param None* @retval None*/void LumMod_Uart_DAM_Tx_Over( void ){DMA_ClearFlag( DMA1_FLAG_GL7 ); // 清除标志位DMA_Cmd( DMA1_Channel7 DISABLE ); // 关闭DMA通道DMA1_Channel7 -> CNDTR = 0; // 清除数据长度// OSMboxPost( mbLumModule_Tx ( void * ) 1 ); // 设置标志位}/*** @brief USART2要发送数据处理* @param None* @retval None*/u16 LumMod_Cmd_WriteParam( u16 sample_num u8 *psz_param ){// uint err;uint LumMod_Tx_Index ;if( !sample_num ) //判断数据长度是否有效return 0;while ( DMA_GetCurrDataCounter( DMA1_Channel7 ) );//检查DMA通道内是否还有数据 if( psz_param )memcpy( LumMod_Tx_Buf psz_param ( sample_num > 1024 ? 1024 :sample_num ) );LumMod_Tx_Index = 0;LumMod_Tx_Buf[ LumMod_Tx_Index++ ] = 1;LumMod_Tx_Buf[ LumMod_Tx_Index++ ] = 2;LumMod_Tx_Buf[ LumMod_Tx_Index++ ] = 3;LumMod_Tx_Buf[ LumMod_Tx_Index++ ] = 4;LumMod_Tx_Buf[ LumMod_Tx_Index++ ] = 5;LumMod_Tx_Buf[ LumMod_Tx_Index++ ] = 6;LumMod_Tx_Buf[ LumMod_Tx_Index++ ] = 7;LumMod_Tx_Buf[ LumMod_Tx_Index++ ] = 8;LumMod_Uart_Start_DMA_Tx( LumMod_Tx_Index );// OSMboxPend( mbLumModule_Tx 0 &err );return sample_num;}/*** @brief USART1要发送数据字节数目高速DMA并开启DMA传输* @param None* @retval None*/void LumMod_Uart_Start_DMA_Tx ( uint16_t size ){DMA1_Channel7 -> CNDTR = ( uint16_t )size; // 设置要发送的字节数目DMA_Cmd( DMA1_Channel7 ENABLE ); // 开启DMA发送}/*** @brief DMA1 -> CH3 USART1接收数据完成DMA中断入口* @param None* @retval None*/void LumMod_Uart_DMA_Rx_Data( void ){DMA_Cmd( LUMMOD_UART_Rx_DMA_Channel DISABLE ); // 关闭DMA防止干扰DMA_ClearFlag( LUMMOD_UART_Rx_DMA_FLAG ); // 清除DNA标志位LumMod_Rx_Data_index = LUMMOD_RX_BSIZE -DMA_GetCurrDataCounter( DMA1_Channel3 ); //获得接收的字节数LUMMOD_UART_Rx_DMA_Channel -> CNDTR = LUMMOD_RX_BSIZE; // 重新设置计数值必须大于等于可能接收到的数据帧数目DMA_Cmd( LUMMOD_UART_Rx_DMA_Channel ENABLE ); //DMA开启等待数据接收/***如果中断发送数据帧的速率很快 MCu来不及处理此次中断接收的数据中断又发来新的数据这里不能开启否则数据会被覆盖*有一下两种解决方法*1 - 重新开启DMA接收数据之前将LumMod_Rx_Buf缓冲区的数据复制到另一个数组中再开启DMA 然后马上处理数组中的数据*2 - 建立双缓冲在LumMod_Uart_DMA_Rx_Data()函数中重新配置DMA_MemorybaxxxxseAddr的缓冲区地址那么下次接收到的数据* 会被保存到新的缓冲区不会被覆盖*/// OSMboxPost( mbLumModule_Rx LumMod_Rx_Buf ); //}/******************************************************************************** * @file 传感器模块测试程序* @author dotod。
STM32入门简易教程首先,我们需要一块STM32开发板。
ST公司有多种型号可供选择,其中比较常用的是STM32F4系列和STM32F7系列。
这些开发板通常配有USB接口和一些基本的外设,如LED、按钮和串口通信。
安装完开发环境后,我们就可以开始编写代码了。
首先,我们需要创建一个新的工程。
在STM32CubeIDE中,我们可以选择创建一个基于单片机型号的模板工程。
然后,我们可以命名工程,并选择要使用的板级支持软件包。
一旦工程创建完成,我们就可以添加源文件并开始编写代码了。
在STM32CubeIDE中,我们可以使用C语言或C++语言来编写代码。
我们可以使用标准的C库或者ST提供的HAL库来操作单片机的外设。
在编写代码之前,我们需要了解一些基本概念。
每个STM32单片机都有一些寄存器,用于控制和配置外设。
我们可以使用这些寄存器来读取和写入寄存器的值,以控制外设的行为。
一般来说,我们需要完成以下几个步骤来编写STM32的代码:1.配置时钟:STM32单片机有多个时钟源和时钟分频器,我们需要配置它们以满足我们的需求。
2.配置外设:根据我们的需求,我们需要配置STM32的外设,如GPIO、USART、SPI等。
我们可以使用寄存器来配置和控制外设。
3.编写主程序:我们可以编写一个循环主程序,在其中处理一些任务。
这可能包括读取和写入外设、处理中断等。
以上就是一个简单的STM32入门教程。
当然,STM32的功能非常丰富,这只是一个入门的起点。
如果想深入学习STM32,我们可以继续学习更多的外设和高级特性。
Linux下如何编写第一个C语言helloworld程序
Linux下如何编写第一个C语言hello world程序
我想很多人不知道Linux下编写第一个C语言hello world程序是怎么做的,下面是店铺收集整理的.Linux下如何编写第一个C语言hello world程序,希望对大家有帮助~~
Linux下编写第一个C语言hello world程序的方法
进入Linux系统后,启动一个shell命令终端,在Ubuntu的三键启动终端方法是同时按下 Ctrl键+Alt键+t 启动后如下图所示:在终端下敲入命令gedit helloworld.c 后按下回车键。
这个命令会用gedit软件打开文件名为helloworld.c的文件,如果该文件不存在工作目录,则gedit软件会自动新建一个名为helloworld.c的文件。
命令如下图所示:
gedit软件启动后操作类似Windows下的记事本,编辑代码如图所示,并保存退出。
图中的代码为:
#include
int main()
{
printf("hello world! ");
return 0;
}
现在我们回到终端操作,输入命令 gcc helloworld.c ,按下回车键进行编译,稍等片刻编译完成,请看图。
如果不是如图所示结果也不要着急,检查下你的代码是否和我的一样哦。
上面我们使用gcc命令把helloworld.c文件转换为了名为a.out 的可执行文件输入命令 ./a.out 就可以运行程序了,请看运行结果图。
【Linux下如何编写第一个C语言hello world程序】。
接触了STM32的开发板快一周了,拿到板子厂商提供了些DEMO程序,其他想自己学习,看了ST的资料手册,感觉看下来,一个工具还是不知道怎么用,还好现在网络强大,在论坛上可以去找自己需要的资料.我把搜集的资料整理了一下,以及自己加了一些自己的,方便自己以后再用到,方便查找,同时和网友们一起分享,希望你们有什么新的想法也提出来,一起分享.开始吧!嘿嘿简述1STM32的输入输出管脚有下面8种可能的配置:(4输入+2输出+2复用输出)①浮空输入_IN_FLOATING②带上拉输入_IPU③带下拉输入_IPD(所谓上拉就是接一电阻到电源;下拉就是接一电阻到地。
也就是说带上拉就是口初始的时候是高电平,下拉就是低电平。
)④模拟输入_AIN⑤开漏输出_OUT_OD⑥推挽输出_OUT_PP⑦复用功能的推挽输出_AF_PP⑧复用功能的开漏输出_AF_ODI/O口的输出模式下,有3种输出速度可选(2MHz、10MHz和50MHz),这个速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路)。
通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。
高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。
当然如果要输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。
关键是GPIO的引脚速度跟应用匹配(推荐10倍以上)。
比如:对于串口,假如最大波特率只需,那么用2M的GPIO的引脚速度就够了,既省电也噪声小。
对于I2C接口,假如使用400k波特率,若想把余量留大些,那么用2M的GPIO的引脚速度或许不够,这时可以选用10M的GPIO 引脚速度。
对于SPI接口,假如使用18M或9M波特率,用10M的GPIO的引脚速度显然不够了,需要选用50M的GPIO的引脚速度。
stm32程序编写引言stm32是一款广泛应用于嵌入式系统的微控制器系列,由STMicroelectronics公司生产。
它具有强大的处理能力和丰富的外设接口,适用于各种应用领域,如工业控制、汽车电子、智能家居等。
本文将深入探讨stm32程序的编写方法和技巧,帮助读者更好地理解和应用stm32。
stm32程序编写的基本流程stm32程序编写的基本流程包括项目配置、驱动程序编写、主程序编写和调试测试。
下面将详细介绍每个步骤的具体内容。
项目配置在开始编写stm32程序之前,我们首先需要进行项目配置。
这包括选择适当的开发环境和工具链,配置编译选项和链接选项,以及选择合适的芯片型号和外设接口。
配置完成后,我们可以开始编写驱动程序和主程序。
驱动程序编写驱动程序是stm32程序的核心组成部分,它负责与外设进行交互并提供相应的功能。
驱动程序的编写需要根据具体的外设接口和芯片型号进行,通常包括初始化、配置和操作等步骤。
在编写驱动程序时,我们需要参考芯片的技术手册和外设的数据手册,了解其寄存器的结构和功能,以及相应的操作方法。
主程序编写主程序是stm32程序的入口点,它负责初始化系统和外设,并执行相应的任务。
主程序的编写需要根据具体的应用需求进行,通常包括任务的调度、数据的处理和结果的输出等步骤。
在编写主程序时,我们需要考虑系统的实时性和稳定性,合理安排任务的优先级和时间片,以及处理异常情况和错误处理等。
调试测试调试测试是stm32程序开发过程中非常重要的一步,它可以帮助我们发现和解决程序中的问题。
调试测试的方法包括使用调试器进行单步调试、使用示波器进行信号分析和使用仿真器进行性能测试等。
在进行调试测试时,我们需要仔细观察程序的运行情况,记录和分析错误信息,找出问题的原因并进行修复。
stm32程序编写的技巧和注意事项在编写stm32程序时,我们需要注意以下几点技巧和注意事项。
熟悉芯片和外设熟悉芯片和外设的功能和特性是编写stm32程序的基础,只有了解它们的工作原理和操作方法,才能编写出正确和高效的驱动程序。
1. A Beginners Hello World 初学者代码public class HelloWorld{public static void Main(){System.Console.WriteLine("HELLO WORLD");}}2. Slightly improved version略有提高代码using System; (就这?会用命名空间?)public class HelloWorld{public static void Main(){Console.WriteLine("HELLO WORLD");}}3. Command Line Arguments 命令行参数代码using System;public class HelloWorld{public static void Main(string[] args) //会传参数了 {Console.WriteLine(args[0]);}}4. From Constructor 构造函数代码using System;public class HelloWorld{public HelloWorld(){Console.WriteLine("HELLO WORLD");}public static void Main(){HelloWorld hw = new HelloWorld(); //会用类了?构造?}}5. More OO代码using System;public class HelloWorld{public void helloWorld(){Console.WriteLine("HELLO WORLD");}public static void Main(){HelloWorld hw = new HelloWorld();hw.HelloWorld(); //更进一步的面向对象?会用方法了?}}6. From another class 调用另一个类代码using System;public class HelloWorld{public static void Main(){HelloWorldHelperClass hwh = new HelloWorldHelperClass(); //类里调用其它类?hwh.writeHelloWorld();}}public class HelloWorldHelperClass{public void writeHelloWorld(){Console.WriteLine("Hello World");}}7. Inheritance 继承代码abstract class HelloWorldBase //抽象类{public abstract void writeHelloWorld();}class HelloWorld : HelloWorldBase //继承----不得不严肃起来了,能抽象的已经可以做系统架构设计了!{public override void writeHelloWorld(){Console.WriteLine("Hello World");Console.ReadLine();}}class HelloWorldImp{static void Main(){HelloWorldBase hwb = new HelloWorld();hwb.writeHelloWorld();}}8. Static Constructor 静态构造函数代码using System;public class HelloWorld{private static string strHelloWorld;static HelloWorld() //静态构造{strHelloWorld = "Hello World";}void writeHelloWorld(){Console.WriteLine(strHelloWorld); }public static void Main(){HelloWorld hw = new HelloWorld(); //需要吗?hw.writeHelloWorld(); //平常我会觉得很可笑----居然写得这么啰嗦}}9. Exception Handling异常处理代码using System;public class HelloWorld{public static void Main(string[] args){try{Console.WriteLine(args[0]);}catch(IndexOutOfRangeException e) //会用异常处理了,但如何更好回收资源呢?异常接下来应该是资源回收啊?我以前也犯这种毛病,GC应该怎么更好使用,我到现在还不是很纯熟{Console.WriteLine(e.ToString());}}10. Creating a DLL and using it in an application 做组件吗?代码using System;namespace HelloLibrary{public class HelloMessage{public string Message{get{return"Hello, World!!!";}}}}//------代码using System;using HelloLibrary;namespace HelloApplication{class HelloApp{public static void Main(string[] args)HelloMessage m = new HelloMessage();}}}11. Using Property实用属性代码using System;public class HelloWorld{public string strHelloWorld{get//会用属性了{return"Hello World";}}public static void Main(){HelloWorld hw = new HelloWorld();Console.WriteLine(hw.strHelloWorld);}}12. Using Delegates //委托!代码using System;class HelloWorld{delegate void SimpleDelegate();//定义委托static void writeHelloWorld(){Console.WriteLine("HelloWorld");}static void Main(){SimpleDelegate d = new SimpleDelegate(writeHelloWorld); //委托?!?!d(); //语法的确这么写,但含义无法理解;因为实在体会不出好处来}13. Using Attributes //我不会!补习去!代码#define DEBUGGINGusing System;using System.Diagnostics;public class HelloWorld : Attribute{[Conditional("DEBUGGING")]public void writeHelloWorld(){Console.WriteLine("Hello World"); Console.ReadLine();}public static void Main(){HelloWorld hw = new HelloWorld(); hw.writeHelloWorld();}}14. Using Interfaces//接口代码using System;interface IHelloWorld{void writeHelloWorld();}public class HelloWorld : IHelloWorld{public void writeHelloWorld(){Console.WriteLine("Hello World"); }public static void Main(){HelloWorld hw = new HelloWorld(); hw.writeHelloWorld();}}15. Dynamic Hello World //Again代码using System;using System.Reflection;namespace HelloWorldNS{public class HelloWorld{public string writeHelloWorld(){return"HelloWorld";}public static void Main(string[] args){Type hw = Type.GetType(args[0]);// Instantiating a class dynamicallyobject[] nctorParams = new object[] {};object nobj = Activator.CreateInstance(hw,nctorParams);// Invoking a methodobject[] nmthdParams = new object[] {};string strHelloWorld = (string) hw.InvokeMember("writeHelloWorld", BindingFlags.Default | BindingFlags.InvokeMethod, null,nobj, nmthdParams);Console.WriteLine(strHelloWorld);}}16. Unsafe Hello World //Unsafe代码using System;public class HelloWorld{unsafe public void writeHelloWorld(char[] chrArray) {fixed (char* parr = chrArray){char* pch = parr;for (int i = 0; i < chrArray.Length; i++)Console.Write(*(pch + i));}}public static void Main(){HelloWorld hw = new HelloWorld();char[] chrHelloWorld = new char[] { 'H', 'e', 'l', 'l', 'o ', ' ', 'W', 'o', 'r', 'l', 'd' };hw.writeHelloWorld(chrHelloWorld);}17. Using InteropServices代码using System;using System.Runtime.InteropServices;class Class1{ //COM , API接口我以前就这么低俗地理解. 其实工具会帮你生成[DllImport("kernel32")]private static extern int Beep(int dwFreq, int dwDuration);static void Main(string[] args){Console.WriteLine("Hello World");Beep(1000, 2000);}}原文地址:/babyblue/archive/2004/03/11/2852.html /peter120123/archive/2009/11/27/1611852.html。
Mini2440初级篇编译Hello World俗话说得好,万丈高楼平地起,为了开发Linux下的驱动,一切都得从基础做起,就从编译运行最简单的Hello World开始。
首先将开发板通过串口线和电脑链接,前提条件是开发板上已经安装了Linux操作系统了,同时开发板选择为从NAND FLASH启动。
开机启动系统之后,PC机上的超级终端显示了一些启动信息之后通过按下Enter键进入Linux的终端界面:在终端下利用指令在用户文件夹下创建hello.c文件,命令行如下所示,编写hello.c文件可以使用Linux系统下的vi指令,具体操作如下图所示,在vi界面下需要知道部分vi的指令,这里就不赘述了:接下去就是要编译源文件了,在文件所在目录下利用指令arm-linux-gcc –o hello hello.c 最后利用make 生成hello 可执行文件:到了这里发现原来板上的没有gcc的,为了装上gcc,将文件拷到U盘,然后接上开发板,利用cp指令想把文件复制到开发板上,突然发现:囧!!!突然发现开发板上的空间是64M啊,一个gcc就把它塞爆了,毕竟还只是学习的板子啊,为了解决问题,还是调用虚拟机上的Ubuntu 来做吧。
在虚拟机上按照以上流程进行操作,内容如下图所示:执行完arm-linux-gcc –o hi hi.c后再输入make生成hi可执行文件,到这里的时候发现出现了错误,显示cannot execute binary file,囧!!继续百度,终于找到了一个解决方案,原来是编译指令有问题,改为gcc hi.c–o hi就可以了,然后直接调用./hi就可以实现了:最后只要将生成的可执行文件通过介质转移到开发板上就可以执行了。
Author:Hot BloodContact:394011495@School of Electronic and Information EngineeringSouth China University of Technology。