MDK

构建实时数据仓库首选,云原生数据仓库AnalyticDB for MySQL技术解密

孤街醉人 提交于 2020-04-09 14:26:42
阿里云分析型数据库重磅推出基础版,极大降低了用户构建数据仓库门槛。高度兼容MySQL,极低的使用成本和极高的性能,使中小企业也可以轻松的搭建一套实时数据仓库,实现企业数据价值在线化。 AnalyticDB for MySQL的产品系列包括基础版(单机版)和集群版,基础版为单个节点提供服务,极简的架构大大的降低了基础版的成本。存储计算分离架构、行列混存技术、轻量的索引构建方式和分布式混合计算引擎又保证了基础版强大的分析性能。年成本不到一万就可以构建一套实时数据仓库,无需成立专门的大数据团队,为企业节省百万成本。 1.基础版技术架构 如下为基础版架构图,整体由Coordinator和Worker组成,各自的职责如下介绍。 1.1 Coordinator: 前端控制节点,职责包括 (1)MySQL协议层接入,SQL解析 (2)认证和鉴权,提供了更完善和细化的权限体系模型,白名单和集群级别RAM控制,并审计与合规记录所有SQL操作。 (3)集群管理:成员管理、元数据、数据一致性、路由同步、备份与恢复(数据与log管理) (4)后台异步任务管理 (5)事务管理 (6)优化器,执行计划生成 (7)计算调度,负责执行任务调度 1.2 Worker: 存储和计算节点,包含 (1)计算模块 分布式MPP+DAG混合计算引擎和优化器达到了更高的复杂计算能力和混合负载管理能力

MDK stm32 AD&串口 软件仿真

让人想犯罪 __ 提交于 2020-03-12 13:47:54
Mdk软件调试,选项 选择use simulator 即软件仿真 下面红框中 一定按照上述文字一字不差填入,右下的两个一定要根据芯片填写妥当。 串口数据思路 借助串口工具将两个串口相连接 使用command将,mdk软件仿真串口输出在电脑串口上 虚拟串口工具====vspd,安装方法附带 https://blog.csdn.net/qq_34202873/article/details/88391265 串口调试助手 附带(自选) step1,利用虚拟串口将两个串口相连接,可以利用串口调试工具进行测试是否将两个串口连接 step2 开始仿真, Step3 命令行将MDK串口输出连接在电脑COM口上 MODE COM4 9600,0,8,1 ASSIGN COM4 <S1IN>S1OUT 第一行命令是改变com口模式, 第二行是将单片机(仿真虚拟软件)串口(Sx)映射(<SxIN>Sxout)到计算机COM口上。 Step4 开始运行,打开串口调试助手选择串口,此时上述被映射串口被占用,无法打开,需要打开的是与之配对的串口。 Step5 AD数据模拟输入 Perfect 来源: CSDN 作者: hanginghang 链接: https://blog.csdn.net/qq_35502383/article/details/104815855

MDK编译优化笔记

北战南征 提交于 2020-03-11 06:00:37
在一次使用MDk的编译优化等级比较高的时候发现编译不优化时功能正常,开了优化等级0 2就出现异常,调试中看了很多博客总结一下。 一个变量,如果你的主程序要用到,同时中断还要用到,要加volatile修饰。告诉编译器这个变量是可能随时发生变化的,使得编译器编译程序的时候,每次都从RAM里面读取数据,而不是使用之前缓存到寄存器里面的值。 对于多任务的程序,如果一个公共变量被多个任务用到也要加volatile修饰。 同时变量定义的时候用了关键字volatile修饰,但是在其他文件引用时不加volatile变量修饰一样会被编译器优化掉。现则反过来想想,原因还是很简单的,MDK编译多个文件时是分别编译,最后再用链接器链接,当编译的时候一个模块引用另外一个模块的变量,完全是靠的变量声明,如果声明都不加volatile,那么引用的模块肯定会把变量当成普通变量的,再反推一下,如果原变量没有加volatile,但是声明的时候加了volatile,是不是引用的模块会将这个变量当成volatile型变量呢   C编译器是以每个C文件作为基本编译单元的,称为模块,被编译为obj;而模块之间的函数或变量访问都是通过标号来实现的,标号本身没有任何属性,只是提供给链接器使用的一个符号名称而已,标号的属性完全就靠调用的地方的原型声明来决定的!因此,你在一个.C模块中定义为volatile,仅仅是在

在MDK中使用 printf 函数

一笑奈何 提交于 2020-03-10 10:29:03
microlib 提供了一个有限的 stdio 子系统,它仅支持未缓冲的 stdin 、 stdout 和 stderr 。 这样,即可使用 printf() 来显示应用程序中的诊断消息。 要使用高级 I/O 函数,您必须提供自己实现的以下基本函数,以便与您自己的 I/O 设备配合使用。 fputc() 为所有输出函数实现此基本函数。 例如, fprintf() 、 printf() 、 fwrite() 、 fputs() 、 puts() 、 putc() 和 putchar() 。 fgetc() 为所有输入函数实现此基本函数。 例如, fscanf() 、 scanf() 、 fread() 、 read() 、 fgets() 、 gets() 、 getc() 和 getchar() 。 __backspace() 如果输入函数使用 scanf() 或 fscanf() ,则实现此基本函数。 Notemicrolib 中不支持的转换为 %lc 、 %ls 和 %a 。 下面是完整的资料: 在 keil (我用的是 realview mdk3.11 )建立 ARM 的工程时其中有一项是选 use MicroLIB 调整 microlib 输入 / 输出函数 microlib 提供了一个有限的 stdio 子系统,它仅支持未缓冲的 stdin 、 stdout 和

STM32CubeMX 串口空闲中断加DMA 实现多串口不定长度收发数据,且不影响收发

[亡魂溺海] 提交于 2020-02-29 13:30:39
主题思想: 接收:配置串口DMA接收,打开串口的空闲中断,但是配置DMA接收的长度一定要合适,小了的话容易溢出。然后在串口的空闲中断里,关闭DMA的接收,且取出DMA数据,转存也好,直接处理也好。完了之后,再次配置DMA接收,把地址指向DMA接受数组的开始。 发送:DMA发送时,置位标记,需等发送完成中断里清零标记,防止连续调用DMA发送,造成上次没发完,这次直接更改了DMA发送的指针。导致发送不完整。 一、CubeMX配置(图不是一个工程的,仅作参考) 配置串口,可配置多个串口,方式相同 配置完成后,根据使用习惯生成代码 二、改写代码(代码是F103,用了Uart1和Uart3) 打开MDK,修改DMA处void MX_DMA_Init(void) 里,无需DMA接收中断,注释掉DMA接收中断,具体注释掉通道几,根据芯片来 void MX_DMA_Init(void) { /* DMA controller clock enable */ __HAL_RCC_DMA1_CLK_ENABLE(); /* DMA interrupt init */ /* DMA1_Channel2_IRQn interrupt configuration */ HAL_NVIC_SetPriority(DMA1_Channel2_IRQn, 0, 0); HAL_NVIC_EnableIRQ

使用安富莱harldfault调试方法总结

非 Y 不嫁゛ 提交于 2020-02-29 04:36:56
https://blog.csdn.net/zhzht19861011/article/details/8645661 在编写STM32程序代码时由于自己的粗心会发现有时候程序跑着跑着就进入了 HardFault_Handler中断,按照经验来说进入HardFault_Handler故障的原因主要有两个方面: 1:内存溢出或则访问越界。 2:堆栈溢出。 发生异常后我们可以首先查看LR寄存器的值,确认当前使用的堆栈是MSP还是PSP,然后找到相对应的堆栈指针,并在内存中查看相对应堆栈的内容,内核将R0~R3,R12,LR,PC,XPRS寄存器依次入栈,其中LR即为发生异常前PC将要执行的下一条指令地址。那么Cortex-M3 内核HardFault错误调试定位方法有: ​ 方法1 如何精确定位出问题代码的所在位置: 以访问越界为例:(对STM32F103C8T6内部flash模拟EEPROM) #define STM32_FLASH_SIZE 64 #define STM32_FLASH_WREN 1 #define FLASH_SAVE_ADDR 0X08078000 ​#define FLASH_HIS_ADDR 0X08078002 ... FLASH_SAVE_ADDR是开始存储的基地址,STM32F103C8T6内部flash大小是64K,在STM32的内部闪存(FLASH

stm32堆栈整理

只谈情不闲聊 提交于 2020-02-28 10:31:20
STM32的堆栈大小在官方文件已经定义好了,分别是: Heap_Size EQU 0x00000200 一共512字节 Stack_Size EQU 0x00000400 一共1K字节 /*********************************************************************************************/ 但是STM32在keil环境下每次编译后的堆栈起始地址并不是固定的(就算事先已经定义好了堆栈的大小),因为栈的起始地址是由用户程序中事先定义好的变量数目决定的(实测是如此)。但欣慰的是,一旦这次编译之后,堆栈的首地址就不会再发生改变了,换言之,就是在烧完程序之后,堆栈的地址就永远不变了。 /*********************************************************************************************/ 要关心STM32的堆栈关系,首先无法避免的就是下面这两幅图片了: 图一:MDK环境下,STM32 Bulid Output窗口部分截图 图二:MDK环境下,STM32的.map文件中关于堆栈地址的说明(绿色高亮部位) /************************************************************

STM32+IAP方案 实现网络升级应用固件

时光毁灭记忆、已成空白 提交于 2020-02-28 05:10:57
关注了这个概念有些日子了,这段时间总算有机会实战==网络升级应用固件,这里记录下遇到的问题,及解决方案。 原理与网上流传的串口作为传输手段 一致;不同之处,无非我这里使用了网络设备传输。==(lwip)TFTP客户端的应用. 参考: IAR环境下STM32+IAP方案的实现 STM32浅谈之IAP.pdf 基于IAP和Keil MDK的远程升级设计 keil MDK中如何生成*.bin格式的文件 概况: 什么是IAP,为什么要IAP 可实现的原理 实现过程 细节及实现 以上基本都可以从【IAR环境下STM32+IAP方案的实现】中找到答案。这里只是贴图,醒目: IAP框架布局: STM32F103ZET6的启动方式有三种:内置FLASH启动、内置SRAM启动、系统存储器ROM启动,通过BOOT0和BOOT1引脚的设置可以选择从哪中方式启动,这里选择内置的FLASH启动。其FLASH的地址为0x08000000—0x0807ffff,共512KB,这些都能从芯片数据手册中直接得到。而这里首要的一个问题是中断的问题。正常情况下发生中断的过程为:发生中断(中断请求),到中断向量表查找中断函数入口地址,跳转到中断函数,执行中断函数,中断返回。也就是说在STM32的内置的Flash中有一个中断向量表来存放各个中断服务函数的入口地址,内置Flash的分配情况大致如下图2-1。

IOT设备连接上云

此生再无相见时 提交于 2020-02-27 03:01:11
如何让我的设备连接上云?参考如下路径。 云 物联网平台 创建产品 定义物模型 Topic定义 创建设备 设备端开发 虚拟设备调试 真实设备开发 规则引擎 数据流转 场景联动 设备管理 云端开发 设备分组 文件管理 子设备管理 服务端订阅 数据解析 监控运维 IoT Studio Web可视化开发 移动可视化开发 服务开发 数据分析 数据开发 数据管理 IoT数据存储 其他数据源接入 流数据分析 空间可视化 二维数据可视化 三维数据可视化 端 Link Kit SDK 选择设备类型和连接方式 WiFi设备 以太网设备 蜂窝网设备 子设备通过网关代理连云 DTU 选择需要的SDK C Java Python NodeJS Android iOS AliOS Things 获取源码 选择开发方式 使用IAR开发 使用Keil MDK开发 使用AliOS Studio开发 使用Docker开发 使用命令性工具开发 管 Link WAN 购买LoRa认证网关 注册网关 创建凭证 分享网络 通过物联网平台关联LoRaWAN节点 物联网平台 创建产品 定义物模型 购买LoRa认证设备 边 创建边缘实例和网关 生成下载命令 本地登录网关,复制命令,一键下载配置并启动Link IoT Edge 边缘实例查看网关状态 子设备接入 函数计算 云端函数计算 边缘函数计算 边缘流数据分析 消息路由 场景联动

说说STM32的堆栈与内存

倖福魔咒の 提交于 2020-02-25 15:29:26
1.概念 这里所说的堆栈,是针对单片机所说的“堆”与“栈”,指的是内存中一片特殊用途的区域。而不是数据结构中的堆栈(虽然其实规则一样)。 这里所说的内存,是指RAM,RAM包括SRAM,DRAM等。而不是什么手机内存卡之类。 这里所说的flash,指的是用作为ROM的存储器,保存代码与常量数据。而不是动画制作。。。 栈的生长方向:指的是入栈方向,从高地址向低地址生长叫做向下生长,或逆向生长;反过来就叫向上生长,或正向生长。STM32的栈是向下生长。 2.内存中的堆栈安排 确切地说,是keil mdk根据STM32的特性,对stm32的RAM甚至flash进行部署。 编译工程后,在生成的.map文件里可以看到具体的安排。双击工程界面的工程根目录文件夹图标,可以打开.map文件。如果找不到文件,可以在option->listing->linker listing 里勾选 Memory map; map文件内的两部分Image Symbol Table与Memory Map of the image列出了RAM与ROM的内容,最后还有一些统计。 map文件跟下图有很大关系:(这里虽然我使用的是GD32,但跟STM32一样) 3.MAP文件与堆栈 网上你有可能会看到这些说法: (1)栈区(stack):由编译器自动分配和释放,存放函数的参数与返回值、局部变量等