当前位置: 首页 > news >正文

不会技术怎么做公司网站旺道营销软件

不会技术怎么做公司网站,旺道营销软件,电子商务网站建设意义,网络搭建模拟软件​1.操作寄存器 在嵌入式开发中#xff0c;常常要操作寄存器#xff0c;对寄存器进行写入#xff0c;读出等等操作。每个寄存器都有自己固有的地址#xff0c;通过C语言访问这些地址就变得尤为重要。 #define GSTATUS1 (*(volatile unsigned int *)0x560000B0)在这里…​1.操作寄存器 在嵌入式开发中常常要操作寄存器对寄存器进行写入读出等等操作。每个寄存器都有自己固有的地址通过C语言访问这些地址就变得尤为重要。 #define GSTATUS1        (*(volatile unsigned int *)0x560000B0)在这里我们举一个例子。这是一个状态寄存器的宏定义。首先通过unsigned int我们能够知道该寄存器是32位的。因为要避免程序执行过程中直接从cache中读取数据所以用volatile进行修饰。每次都要重新读取该地址上的值。首先volatile unsigned int * 是一个指针我们就假设它为p吧。 它存储的地址就是后面的0x560000B0然后取这个地址的值也就是 * p所以源代码变成了* volatile unsigned int * 0x560000B0,接下来我们就能直接赋值给GSTATUS1来改变地址0x560000B0上存储的值了。 /* NAND FLASH (see S3C2410 manual chapter 6) */ typedef struct {S3C24X0_REG32   NFCONF;S3C24X0_REG32   NFCMD;S3C24X0_REG32   NFADDR;S3C24X0_REG32   NFDATA;S3C24X0_REG32   NFSTAT;S3C24X0_REG32   NFECC; } S3C2410_NAND;static S3C2410_NAND * s3c2410nand  (S3C2410_NAND *)0x4e000000;volatile unsigned char *p  (volatile unsigned char *)s3c2410nand-NFSTAT;有时候你会看到这样一种情况的赋值。其实这和我们刚刚讲过的差不多。只不过这里是在定义了指针的同时对指针进行赋值。 这里首先定义了结构体S3C2410_NAND里面全部是32位的变量。又定义了这种结构体类型的指针且指向0x4e000000这个地址也就是此刻s3c2410nand指向了一个实际存在的物理地址。 s3c2410nand指针访问了NFSTAT变量但我们要的是它的地址而不是它地址上的值。所以用取NFSTAT地址这样再强制转换为unsigned char型的指针赋给p就可以直接通过p来给NFSTAT赋值了。 推荐文章 STM32中较为常见的C语言基础知识 2.操作函数指针 指针不光能指向变量、字符串、数组还能够指向函数。在C语言中允许将函数的入口地址赋值给指针。这样就可以通过指针来访问函数。 还可以把函数指针当成参数来传递。函数指针可以简化代码减少修改代码时的工作量。通过接下来的讲解大家会体会到这一点的。 #include iostream using namespace std;/*比较函数声明*/ int max(int,int);int (*test)(int,int);int main(int argc,char* argv[]) {int largernumber;/*将max函数的入口地址赋值给*函数指针test*/testmax;/*通过指针test调用函数max实*现比较大小*/largernumber(*test)(1,2);coutlargernumberendl;return 0;       }int max(int a,int b) {return (ab?a:b);   }通过注释大家应该很容易理解函数指针其实和变量指针、字符串指针差不多的。如果大家理解了这个小程序那么理解起下面这个有关Nand flash的源代码就好多了。 typedef struct {void (*nand_reset)(void);void (*wait_idle)(void);void (*nand_select_chip)(void);void (*nand_deselect_chip)(void);void (*write_cmd)(int cmd);void (*write_addr)(unsigned int addr);unsigned char (*read_data)(void); }t_nand_chip;static t_nand_chip nand_chip;/* NAND Flash操作的总入口, 它们将调用S3C2410或S3C2440的相应函数 */ static void nand_reset(void); static void wait_idle(void); static void nand_select_chip(void); static void nand_deselect_chip(void); static void write_cmd(int cmd); static void write_addr(unsigned int addr); static unsigned char read_data(void);/* S3C2410的NAND Flash处理函数 */ static void s3c2410_nand_reset(void); static void s3c2410_wait_idle(void); static void s3c2410_nand_select_chip(void); static void s3c2410_nand_deselect_chip(void); static void s3c2410_write_cmd(int cmd); static void s3c2410_write_addr(unsigned int addr); static unsigned char s3c2410_read_data();/* S3C2440的NAND Flash处理函数 */ static void s3c2440_nand_reset(void); static void s3c2440_wait_idle(void); static void s3c2440_nand_select_chip(void); static void s3c2440_nand_deselect_chip(void); static void s3c2440_write_cmd(int cmd); static void s3c2440_write_addr(unsigned int addr); static unsigned char s3c2440_read_data(void);/* 初始化NAND Flash */ void nand_init(void) { #define TACLS   0 #define TWRPH0  3 #define TWRPH1  0/* 判断是S3C2410还是S3C2440 */if ((GSTATUS1  0x32410000) || (GSTATUS1  0x32410002)){nand_chip.nand_reset          s3c2410_nand_reset;nand_chip.wait_idle           s3c2410_wait_idle;nand_chip.nand_select_chip    s3c2410_nand_select_chip;nand_chip.nand_deselect_chip  s3c2410_nand_deselect_chip;nand_chip.write_cmd           s3c2410_write_cmd;nand_chip.write_addr          s3c2410_write_addr;nand_chip.read_data           s3c2410_read_data;/* 使能NAND Flash控制器, 初始化ECC, 禁止片选, 设置时序 */s3c2410nand-NFCONF  (115)|(112)|(111)|(TACLS8)|(TWRPH04)|(TWRPH10);}else{nand_chip.nand_reset          s3c2440_nand_reset;nand_chip.wait_idle           s3c2440_wait_idle;nand_chip.nand_select_chip    s3c2440_nand_select_chip;nand_chip.nand_deselect_chip  s3c2440_nand_deselect_chip;nand_chip.write_cmd           s3c2440_write_cmd; #ifdef LARGER_NAND_PAGEnand_chip.write_addr          s3c2440_write_addr_lp; #elsenand_chip.write_addr          s3c2440_write_addr; #endifnand_chip.read_data           s3c2440_read_data;/* 设置时序 */s3c2440nand-NFCONF  (TACLS12)|(TWRPH08)|(TWRPH14);/* 使能NAND Flash控制器, 初始化ECC, 禁止片选 */s3c2440nand-NFCONT  (14)|(11)|(10);}/* 复位NAND Flash */nand_reset(); }这段代码是用于操作Nand Flash的一段源代码。首先我们看到开始定义了一个结构体里面放置的全是函数指针。他们等待被赋值。然后是定义了一个这种结构体的变量nand_chip。然后是即将操作的函数声明。 这些函数将会被其他文件的函数调用。因为在这些函数里一般都只有一条语句就是调用结构体的函数指针。 接着往下看是针对两种架构的函数声明。然后在nand_init函数中对nand_chip进行赋值这也就是我们刚刚讲过的将函数的入口地址赋值给指针。现在nand_chip已经被赋值了。如果我们要对Nand进行读写操作我们只需调用nand_chip.read_data()或者nand_chip.write_cmd()等等函数。 这是比较方便的一点另一点此代码具有很强的移植性如果我们又用到了一种芯片我们就不需要改变整篇代码只需在nand_init函数中增加对新的芯片的判断然后给nand_chip赋值即可。所以我说函数指针会使代码具有可移植性易修改性。 推荐文章 C语言进阶之 回调函数详解 3.操作寄存器的位 #define GPFCON      (*(volatile unsigned long *)0x56000050) GPFCON ~ (0x13); GPFCON | (0x13);结合我们刚刚所讲的首先宏定义寄存器这样我们能够直接给它赋值。位操作中我们要学会程序第2行中的给目标位清0这里是给bit3清0。第3行则是给bit3置1。
http://www.zqtcl.cn/news/24048/

相关文章:

  • 网上接单做网站哪个网站做贷款推广
  • 做家装壁纸的网站wordpress 路径插件
  • 怎么做关注网站找网站漏洞赚钱怎么做的
  • 网站开发项目名wordpress 文章列表页
  • 建设网站 注册与登陆官方网站投诉平台
  • 汕头网站建设方案维护做sns网站需要什么
  • 做百度推广送网站吗做调查网站的问卷哪个给的钱高
  • 建设网站要什么深圳外发加工网
  • 图片上传不了网站做app网站
  • 旅游网站模板南阳教育论坛网站建设
  • 如何建设像艺龙一样网站ps做网站ui
  • 兰州网站开发哪里可以做wordpress 外链转内链 页面
  • 织梦网站管理安装qnap如何搭wordpress
  • 如何通过html做网站百度搜索不到任何网站
  • 建设集团招工信息网站wordpress英文显示改中文
  • 眉山建设局网站百度应用下载
  • 什么网站的新闻做参考文献网站设计一般什么字体
  • 网站做小学一年二班作业怎么做设计加盟
  • 网站qq代码帝国cms官网
  • 房产网络建筑优化公司排名
  • 怎么开个人网站赚钱公司网站建设案例教程
  • 河南第二建设集团有限公司网站被墙网站查询
  • cf租号网站怎么做的个人自媒体创意名字
  • 校园兼职网站建设网页设计学校
  • 策划公司网站长沙人才招聘网站
  • 石家庄做网站的有哪些公司公司网站建设价格贵吗
  • 建个公司网站需要多少钱企业网站托管趋势
  • 优化网站广告优化企业管理系统oa
  • 花钱做网站不给源代码全国中小型企业名录
  • 叶榭做网站网店美工岗位应具备哪些技能