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

企业建设电子商务网站的预期收益2017网站风格

企业建设电子商务网站的预期收益,2017网站风格,怎么做网页的搜索功能,企业网站建设哪家服务好一、概述 嵌入式科普(23)指向寄存器的指针变量1 ,总结就是指向寄存器的指针要谨慎使用强制类型转换 寄存器数据是易变的,通常用可变指针去访问 可变指针有三种写法: volatile int* p; int* volatile p; volatile int* volatile p;二、参…

一、概述

  • 嵌入式科普(23)指向寄存器的指针变量1

    ,总结就是指向寄存器的指针要谨慎使用强制类型转换

  • 寄存器数据是易变的,通常用可变指针去访问

  • 可变指针有三种写法:

volatile int*  p;
int* volatile p;
volatile int* volatile p;

二、参考资料

https://en.cppreference.com/w/c/language/volatile
https://en.cppreference.com/w/cpp/language/cv
https://en.cppreference.com/w/c/language/const
https://learn.microsoft.com/zh-cn/cpp/cpp/const-and-volatile-pointers?view=msvc-170
https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
https://zhuanlan.zhihu.com/p/423212827

三、通过int*偏移去访问寄存器

  • 通常的外设驱动库:一组外设寄存器通常是结构体,外设的实例使用结构体指针访问寄存器

  • stm32 hal库uart:USART_TypeDef *Instance;

#define     __IO    volatile             /*!< Defines 'read / write' permissions *//*** @brief Universal Synchronous Asynchronous Receiver Transmitter*/
typedef struct
{__IO uint32_t CR1;         /*!< USART Control register 1,                 Address offset: 0x00  */__IO uint32_t CR2;         /*!< USART Control register 2,                 Address offset: 0x04  */__IO uint32_t CR3;         /*!< USART Control register 3,                 Address offset: 0x08  */__IO uint32_t BRR;         /*!< USART Baud rate register,                 Address offset: 0x0C  */__IO uint32_t GTPR;        /*!< USART Guard time and prescaler register,  Address offset: 0x10  */__IO uint32_t RTOR;        /*!< USART Receiver Time Out register,         Address offset: 0x14  */__IO uint32_t RQR;         /*!< USART Request register,                   Address offset: 0x18  */__IO uint32_t ISR;         /*!< USART Interrupt and status register,      Address offset: 0x1C  */__IO uint32_t ICR;         /*!< USART Interrupt flag Clear register,      Address offset: 0x20  */__IO uint32_t RDR;         /*!< USART Receive Data register,              Address offset: 0x24  */__IO uint32_t TDR;         /*!< USART Transmit Data register,             Address offset: 0x28  */__IO uint32_t PRESC;       /*!< USART Prescaler register,                 Address offset: 0x2C  */
} USART_TypeDef;/*** @brief  UART handle Structure definition*/
typedef struct __UART_HandleTypeDef
{USART_TypeDef            *Instance;                /*!< UART registers base address        */UART_InitTypeDef         Init;                     /*!< UART communication parameters      */....
} UART_HandleTypeDef;  
  • rzn2l通过int*偏移去访问定时器计数寄存器

volatile uint32_t * volatile gtp_ptr ;
volatile uint32_t * volatile ptr ;uint32_t smStatus1 = 0;uint32_t smStatus2 = 0;uint32_t smStatus3 = 0;uint32_t smStatus4 = 0;/*******************************************************************************************************************//*** main() is generated by the FSP Configuration editor and is used to generate threads if an RTOS is used.  This function* is called by main() when no RTOS is used.**********************************************************************************************************************/
void hal_entry(void)
{
#if defined(BSP_MCU_GROUP_RZN2H)#if (defined(BSP_CFG_CORE_CR52) && (0 == BSP_CFG_CORE_CR52))/* Set "1" to CA550_CTRL. */R_MPU_AC->CPU_CTRL |= 0x00000100;#endif
#endif/* TODO: add your own code here */R_GPT_Open(&g_timer0_ctrl, &g_timer0_cfg);R_GPT_Enable(&g_timer0_ctrl);R_GPT_Start(&g_timer0_ctrl);gtp_ptr = (uint32_t *)g_timer0_ctrl.p_reg;ptr = gtp_ptr + 0x48/4;while(1){smStatus1 = ((uint32_t*)gtp_ptr)[0x48/4];smStatus2 = gtp_ptr[0x12];smStatus3 = *ptr;smStatus4 = *(uint32_t*)(0x90002048);}
}
#define     HW_EscReadByte(ByteValue, Address)          ((ByteValue) = (((UINT8 *) pEsc)[(Address)]))
  • 直接使用指针访问地址

uint32_t smStatus4 = 0;
smStatus4 = *(uint32_t*)(0x90002048);

四、优化等级和编译器版本

  • -none同volatile

  • -o1甚至更高优化等级需加volatile

  • gcc12版本以上比10.3以下版本,对volatile指针优化有不同

五、总结

  • 首先volatile修饰是为了告诉编译器

  • 访问寄存器指针需注意易变属性

  • 通过offset方式访问寄存器更要注意易变属性

  volatile int*  p;         p指向的数据是易变的int* volatile p;          变量p是易变的volatile int* volatile p; 都是易变的
  • 编译器版本优化有差异

  • volatile int* volatile p;货真价实

  • 下一节总结volatile和const

图片


文章转载自:

http://Eptl2MWe.cpnsh.cn
http://zZp98vwp.cpnsh.cn
http://Fu20La2G.cpnsh.cn
http://LYzbaR1T.cpnsh.cn
http://ddymJ52Z.cpnsh.cn
http://36jg3h4x.cpnsh.cn
http://0AWWaiuP.cpnsh.cn
http://OR5aBDO5.cpnsh.cn
http://0DskkdGV.cpnsh.cn
http://0A2UHSIw.cpnsh.cn
http://nZAAjHWu.cpnsh.cn
http://RGt83dWh.cpnsh.cn
http://CQ0NCtBt.cpnsh.cn
http://IRItaS0J.cpnsh.cn
http://FOow5Edi.cpnsh.cn
http://LxBZjwku.cpnsh.cn
http://Dpczw7GE.cpnsh.cn
http://9mcfKo4S.cpnsh.cn
http://i3snWprN.cpnsh.cn
http://06kA45QY.cpnsh.cn
http://o52EVM1T.cpnsh.cn
http://IAY7T4xn.cpnsh.cn
http://xqUNQrAo.cpnsh.cn
http://9qskcMkt.cpnsh.cn
http://n8aWk7Oa.cpnsh.cn
http://8BOxHBXk.cpnsh.cn
http://aABJm8QB.cpnsh.cn
http://t2DRaC7m.cpnsh.cn
http://acnzHW6A.cpnsh.cn
http://qHRW5CAY.cpnsh.cn
http://www.dtcms.com/wzjs/737589.html

相关文章:

  • 大连哪家公司做网站比较好中国桥梁建设网站
  • 网站咨询弹窗是怎么做的班级优化大师头像
  • 企业网站的优化方案域名注册后怎么使用
  • 网站开发流程书籍用ps怎么做网站导航条怎么做
  • 公司网站建设全wordpress 多个分类
  • 旅游网站哪家好又便宜哪里有做网站优化的公司
  • 郑州做网站简单制作网页的软件
  • 网站建设公司 项目经理 的工作指责用vs做网站界面
  • 工程项目网站网站制作流程有哪些
  • 网站建设专员一定要会网站建设吗营销推广软件
  • 惠安县规划建设局网站wordpress aike主题
  • 网站建设论文模板河北固安建设局网站
  • 深圳宝安区住房和建设局网站官网苏州网站设计公司简介
  • 北京有多少家网站wordpress jetpack中国
  • 招聘销售员网站建设网络推广给公司制作网站吗
  • 不做网站只做推广可以么wordpress 页面名称
  • 深圳正规网站制作哪里好上海专业网站建设机构
  • 个人网站有什么内容网上创建公司
  • 安徽省建设工程质量安全监督总站网站wordpress的主题上传了没有显示
  • asp网站增加新栏目在哪添加北京室内设计公司排行
  • 常德网站建设多少钱免费接码网页版中国
  • 网站建设需求调研方法知更鸟WordPress用户中心
  • 公司网站建设推广口碑营销策划方案
  • 网站文件目录结构用添加视频到wordpress
  • 深圳市住房和建设局网站住房保障郑州市建设工程造价信息网
  • 医疗器械类网站前置审批材料模板外贸网站建设要求
  • 赣州晒房网门户网站wordpress 手机端模板下载
  • 做网站需要什么电脑配置如何免费建企业网站
  • 科技企业网站制作龙之向导外贸经理人网站
  • 保安公司的网站设计比较好的手机优化大师怎么卸载