1、了解BootLoader的基本概念和框架结构2、了解BootLoader引导操作系统的过程3、掌握bootloader程序的编译方法4、掌握BootLoader程序的使用方法(1)、BootLoader的阶段1通常主要包括以下步骤:硬件设备初始化;
拷贝BootLoader的程序到RAM空间中;
设置好堆栈;
跳转到阶段2的C入口点。
(2)、BootLoader的阶段2通常主要包括以下步骤:初始化本阶段要使用到的硬件设备;
系统内存映射(memorymap);
将kernel映像和根文件系统映像从Flash读到RAM空间中;
为内核设置启动参数;
调用内核…………………………………………………………
2023/8/20 8:45:09 188KB Bootloader 嵌入式 Linux
1
纯人工翻译中文版本,STM32CubeMX用户手册中文版,STM32CubeMX用户手册中文版UM1718-翻译版.菜鸟到高手,显得有些霸气哈,不过的确如此,官方带给我们一个比较实用的stm32的工具。
这个工具就是STM32CubeMX,昨天玩freeRTOS的时候就提到过。
说到freeRTOS,这里就多说两句。
全局变量,在任务间相互访问的时候也是需要临界保护的,不然可能会出现奇怪的问题。
不过我们可以关掉时间片调度,任务间可以访问全局变量而不用加保护(不等于菜鸟可以随意代码)。
关闭了时间片调度,只有发生vTaskDelay的时候才会上下文切换。
只要代码合理访问全局变量可以不加保护的。
因此代码也不是可以任意书写的,关于freeRTOS的问题,多看看源码,一切都会有答案。
源码较少,这里就不过多介绍。
关闭时间片不是网上说的configUSE_TIME_SLICING这个宏定义,老鸟发现这个宏压根没用哈,嘿嘿。
阅读源码可以找到相关宏配置。
不过不建议关闭,时间片调度也可以让一个任务在执行一定时间后切换到其他就绪任务去执行。
如果有freeRTOS相关问题,可以留言给我。
废话说多了点哈,继续我们的STM32CubeMX。
下面我们来讲讲这个工具的作用,讲完后,可以自己下载一个试试,挺简单不多介绍。
到官网下载STM32CubeMX,并安装。
1:芯片选型打开STM32CubeMX,我们点击newproject,我们就可以进行芯片选型,如果你下载了打开了这个工具,是不是很惊讶,stm32的所有产品型号都在里面,而且左下提供了资源勾选,比如你要以太网支持,勾选以太网选项,所有的支持以太网的stm32芯片才会被显示,旁边还有个max的栏目指示了芯片最多支持该功能的个数。
空白的一般默认只有一个。
下图是我勾选以太网的截图。
上图不仅提供了芯片,还提供了价格,是否在售,封装,存储,频率等一些列信息。
除了cpu资源可以选型外,上面还提供了脚多少,存储大小等非常灵活的选型方式。
我们选择其中一个的单片机后。
右上部分给我们提供了完美的支持。
第一个选项提供了改cpu的特性,我们可以大概的了解选中的cpu资源。
第二个选项提供该cpu框图,截图图片太大,这里就不截图了。
第三个选项提供了cpu文档,这个文档非常多也非常全面,基本不用在网上东找西找了,主要给硬件工程师用。
第四个选项提供了cpu的相关设计资源,软件编程文档,给软件工程师用,非常全面,包括网上很少用到的文档资料,比如系统移植相关的底层资料(堆栈,指令,汇编)。
第五个选项提供了芯片购买途径,这个每个人自己选择吧。
第六个选项开始工程,芯片选好了,就可以开始工程。
2:设定芯片。
芯片选好后,可以开始设定芯片。
这就是软件工程师的好帮手呀。
比如我要以太网功能,勾选上以太网即可,他就会自动分配出芯片对应的以太网接口。
如下图:上面我选了标准的MII接口。
很多人可能就不理解,你勾了个以太网,咋报错了。
老鸟告诉你为啥变红了,stm32有个复杂的功能就是io口复用,勾选mii后分配的io口和spi2以及iis口重合了,所以这个工具非常智能的提示了出来,非常神奇吧。
告诉你他们不能使用了。
还有些变黄了,说明他们可以选择性使用,真是太方便了,省去了查资料慢慢找io的痛苦。
比如我们还要给它个外部时钟。
我们勾选时钟即可,响应的时钟脚就会分配出来。
如果要将某个脚设置成输入输出那就更简单了,鼠标点选对应的io口选择对应功能即可,比如我单击PA6,它的所有功能可以轻松选择:软件使用比较简单,不过多解释,一看就明白,设置完芯片功能后,我们就设定系统各项功能时钟。
选择时钟设置页面(clockconfiguration)时钟轻松设定,如下图,简单明了,不过多解释了:时钟配置完成后,可以切换到configuration选项对功能进一步设定,里面参数都是常用的功能,设置较为简单。
就不多举例了,比如网络功能里面设置mac地址等。
3:生产初始化代码经过上面的图形化设定,我们可以直接生产初始化代码。
省去我们查阅资料慢慢配置的的环节,时间更多的利用在应用层设计。
点击project下面的生成代码选项。
输入工程名(根据你项目需要起名),这里我就随便输入一个名字。
设定好相关参数。
点击ok即可。
顺便说下,这个工具是配带教程的,我这里只是告诉大家有这样个工具可以加速开发,具体设置参考官方教程。
生成后打开文件夹内容如下:上图的inc和src文件夹里面是生成的主要代码,其他几个文件夹里面的东西,大家可以根据自己需要选择。
src文件夹文件如下:打开熟悉的ma
2023/8/19 21:31:32 11.41MB stm32 仿真
1
包含矩阵、算法、递归、二叉树、搜索树、图、堆栈等等
2023/8/18 16:32:34 868KB 山东大学 数据结构 实验报告
1
06-堆栈、队列.pdf
2023/8/13 6:23:14 1.53MB 算法
1
最近有项目要做一个高性能网络服务器,去网络上搜到到的都是C++版本而且是英文或者简单的DEMO,所以自己动手写了C#的DEMO。
网络上只写接收到的数据,没有说怎么处理缓冲区数据,本DEMO简单的介绍如何处理接收到的数据。
简单易用,希望对大家有用.1、在C#中,不用去面对完成端口的操作系统内核对象,Microsoft已经为我们提供了SocketAsyncEventArgs类,它封装了IOCP的使用。
请参考:http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socketasynceventargs.aspx?cs-save-lang=1&cs-lang=cpp#code-snippet-1。
2、我的SocketAsyncEventArgsPool类使用List对象来存储对客户端来通信的SocketAsyncEventArgs对象,它相当于直接使用内核对象时的IoContext。
我这样设计比用堆栈来实现的好处理是,我可以在SocketAsyncEventArgsPool池中找到任何一个与服务器连接的客户,主动向它发信息。
而用堆栈来实现的话,要主动给客户发信息,则还要设计一个结构来存储已连接上服务器的客户。
3、对每一个客户端不管还发送还是接收,我使用同一个SocketAsyncEventArgs对象,对每一个客户端来说,通信是同步进行的,也就是说服务器高度保证同一个客户连接上要么在投递发送请求,并等待;
或者是在投递接收请求,等待中。
本例只做echo服务器,还未考虑由服务器主动向客户发送信息。
4、SocketAsyncEventArgs的UserToken被直接设定为被接受的客户端Socket。
5、没有使用BufferManager类,因为我在初始化时给每一个SocketAsyncEventArgsPool中的对象分配一个缓冲区,发送时使用Arrary.Copy来进行字符拷贝,不去改变缓冲区的位置,只改变使用的长度,因此在下次投递接收请求时恢复缓冲区长度就可以了!如果要主动给客户发信息的话,可以new一个SocketAsyncEventArgs对象,或者在初始化中建立几个来专门用于主动发送信息,因为这种需求一般是进行信息群发,建立一个对象可以用于很多次信息发送,总体来看,这种花销不大,还减去了字符拷贝和消耗。
6、测试结果:(在我的笔记本上时行的,我的本本是T420I78G内存)100客户100,000(十万次)不间断的发送接收数据(发送和接收之间没有Sleep,就一个一循环,不断的发送与接收)耗时3004.6325秒完成总共10,000,000一千万次访问平均每分完成199,691.6次发送与接收平均每秒完成3,328.2次发送与接收整个运行过程中,内存消耗在开始两三分种后就保持稳定不再增涨。
看了一下对每个客户端的延迟最多不超过2秒。
2023/8/10 0:44:45 64KB C# IOCP TCP 完成端口
1
上海大学课程研讨,题目是举例说明汇编语言子程序递归调用过程中堆栈内容的变化过程。
上海大学课程研讨,题目是举例说明汇编语言子程序递归调用过程中堆栈内容的变化过程。
2023/7/30 5:40:46 23.41MB 递归 堆栈
1
c++使用堆栈实现中缀表达式转后缀表达式
2023/7/23 15:07:05 3KB c++ 后缀表达式 中缀表达式
1
dargaCode.github.io使我的旧网站前进以反映我当前的堆栈和开发实践:React打字稿SCSS笑话故事书Webpack去做:React钩搜索引擎优化CI/CD
2023/7/16 1:07:56 762KB react git typescript webpack
1
《C专家编程》,英文名《ExpertCProgramming》,作者:【美】PetervanderLinden,翻译:徐波。
出版社:人民邮电出版社,ISBN:9787115171801。
PDF格式,大小7.6MB。
内容简介:《c专家编程》展示了最优秀的c程序员所使用的编码技巧,并专门开辟了一章对c++的基础知识进行了介绍。
  书中c的历史、语言特性、声明、数组、指针、链接、运行时、内存以及如何进一步学习c++等问题进行了细致的讲解和深入的分析。
全书撷取几十个实例进行讲解,对c程序员具有非常高的实用价值。
  本书可以帮助有一定经验的c程序员成为c编程方面的专家,对于具备相当的c语言基础的程序员,本书可以帮助他们站在c的高度了解和学习c++目录:第1章 c:穿越时空的迷雾  1.1 c语言的史前阶段  1.2 c语言的早期体验  1.3 标准i/o库和c预处理器 1.4 k&rc 1.5 今日之ansic 1.6 它很棒,但它符合标准吗  1.7 编译限制 1.8 ansic标准的结构  1.9 阅读ansic标准,寻找乐趣和裨益  1.10 “安静的改变”究竟有多少安静  1.11 轻松一下——由编译器定义的pragmas效果 第2章 这不是bug,而是语言特性  2.1 这关语言特性何事,在fortran里这就是bug呀  2.2 多做之过 2.3 误做之过  2.4 少做之过  2.5 轻松一下——有些特性确实就是bug  2.6 参考文献 第3章 分析c语言的声明 . 3.1 只有编译器才会喜欢的语法  3.2 声明是如何形成的  3.3 优先级规则  3.4 通过图表分析c语言的声明  3.5 typedef可以成为你的朋友  3.6 typedefintx[10]和#definexint[10]的区别  3.7 typedefstructfoo{...foo;}的含义  3.8 理解所有分析过程的代码段  3.9 轻松一下——驱动物理实体的软件 第4章 令人震惊的事实:数组和指针并不相同  4.1 数组并非指针  4.2 我的代码为什么无法运行  4.3 什么是声明,什么是定义  4.4 使声明与定义相匹配  4.5 数组和指针的其他区别  4.6 轻松一下——回文的乐趣 第5章 对链接的思考  5.1 函数库、链接和载入  5.2 动态链接的优点  5.3 函数库链接的5个特殊秘密  5.4 警惕interpositioning  5.5 产生链接器报告文件  5.6 轻松一下——看看谁在说话:挑战turing测验 第6章 运动的诗章:运行时数据结构  6.1 a.out及其传说  6.2 段  6.3 操作系统在a.out文件里干了些什么  6.4 c语言运行时系统在a.out里干了些什么  6.5 当函数被调用时发生了什么:过程活动记录  6.6 auto和static关键字  6.7 控制线程  6.8 setjmp和longjmp  6.9 unix中的堆栈段  6.10 ms-dos中的堆栈段  6.11 有用的c语言工具 6.12 轻松一下——卡耐基-梅隆大学的编程难题 6.13 只适用于高级学员阅读的材料第7章 对内存的思考第8章 为什么程序员无法分清万圣节和圣诞节第9章 再论数组 第10章 再论指针 第11章 你懂得c,所以c++不在话下附录a 程序员工作面试的秘密附录b 术语表
2023/7/15 18:17:40 7.48MB C专家 C专家编程 C精通 C深入
1
权杖关于Scepter是驱动的工具。
它可以自动执行平凡,重复和容易出错的任务,使您能够专注于构建更好的基础架构。
产品特点通过分离Stack的模板及其配置来重用代码支持以JSON,YAML,Jinja2或PythonDSL(例如Troposphere)编写的模板通过将堆栈输出传递到相关堆栈的参数来进行依赖性解析通过将相关堆栈捆绑为逻辑组(例如,开发人员和生产人员)来支持堆栈组堆栈组级别的命令,例如使用单个命令创建多个堆栈快速,高度并行化的构建内置支持在多个AWS账户和区域中使用Stacks具有元操作(例如堆栈查询保护)的基础架构可见性支持通过可自定义的解析器在模板中插入动态值支持在Stack构建之前/之后将任意代码作为Hooks运行好处将云原生基础架构用作代码引擎(CloudFormation)您不需要管理状态使用流行模板语法的简单模板-Yaml&Jinja使用成熟的编程语言的强大灵活性-Python使用Hooks易于集成为CI/CD管道的一部分简单的CLI和API不受质疑-Sceptre不会强制执行特定的项目结构安装使用点
2023/7/11 0:09:14 209KB python infrastructure aws devops
1
共 172 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡