0%

安装

FreeMASTER 下载
下载FreeMaster 2.5版本,安装时记得选择Custom,在插件里面勾选CMSIS-DAP和Jlink的插件,否则后续可能无法使用对应调试器
图片

项目基础配置

打开FreeMASTER,选Project下的Option,在Common选卡里面选Plug-in Module,下拉列表里面选调试器类型。正点原子的无线调试器是CMSIS DAP,Jlink OB就选Jlink。选完后点Configure,按左下角的Test Connection检查调试器是否正常连接。
图片
如果是Jlink的话在Configure窗口里选Core Type为Cortex-M4(STM32F4就是用Cortex-M4的)再Test Connection即可,如果选CPU Type可能会因为是非NXP芯片而被拒绝
图片
配置完调试器后,在Option窗口里面选MAP Files选卡,Default symbol写Keil生成的axf文件的路径,File format选ELF。可以点下面的View检查是否读取到变量的地址
图片
配置完成调试器和axf文件后,在主界面的Project里面选Variables,点New,在弹出来的窗口里的Address里直接输入你想查看的变量名(同代码写法),如果地址非空则说明识别成功,同时不要忘记配置你的变量类型和长度。变量显示的名称可以在Variable里面改。点确定即可
图片
或者可以点Generate在弹出的列表里选择你想要的变量,点Generate Single Variable,或者如果是连续数组元素的话点Generate array for symbol
图片
这些配好的变量可以在接下来的过程里面使用

这里完成配置之后请保存一次项目到工程的文件夹里,以免配置丢失

阅读全文 »

需求

在我们早期调试里,通常用一个如Jlink或者STLink调试器就可以完成功能调试。但是后期比如说要进行参数调节(PID)或者单片机想要报告数据给上位机就有些麻烦,主要遇到的问题是

  • 写死参数的话,改参数再烧录程序费时费力
  • 目前所有的有线调试器都不可能在机器人快速运动的时候调试,最好是有无线的方案
  • 我们没有合适的工具连续采集机器人的数据,包括静止的和运动

可选方案

以前调参数的方法是插着有线调试器在Keil里面开Watch修改变量,显然这样的方法能用但不可靠。于是在网上找了一圈后,解决方案无非以下两种:

阅读全文 »

校电赛结束了,今年校内赛的题目大多都是前年的国电题目,有将近一个月的时间完成。可以拿来练练手,为后面的比赛做准备。下面介绍一下我们的选题以及对应方案。

选题

校电赛选的题目无非几类,传统电源题(做的人非常少),控制题,仪器仪表题以及最近新兴的视觉/智能题。高频/通信题因为知识水平的问题在校赛里不会出现。而我们队的选题是常规的仪器仪表题:放大器非线性失真研究装置。

img

当时选的具体理由不记得了,大概是选了一圈下来可能觉得信号处理的题目相对简单。

阅读全文 »

ROP基本思路

1.存在栈溢出(如gets,read)至少能写入到执行至retn时的栈顶处
2.获取shell的函数选择(system,execve,syscall)
3.获取对应函数的地址(看导入表中有无对应函数,如果无,需要通过write或puts等函数泄露相对地址),泄露地址可以通过DynELF实现
4.在栈上布置调用函数所需要的非指针参数(入寄存器的参数通过多次执行含pop寄存器的gadgets实现)
5.指针参数如字符串“/bin/sh”可以采用直接搜索(在ELF中,已知相对地址可在libc中),或者在程序可写的数据段(.bss)中写入。
6.写出若干payload(泄漏地址+布置参数调用起shell函数),注意架构的区别,不能确定调用指令用gcc -S汇编.c文件测试

x64与x86 ROP的区别

首先,x64下的地址长度为8byte,而x86下为4byte
其次,x86中的read,write,system函数都是通过栈传递参数的,因此只要能在栈上写入参数即可。但是x64中则是通过rdx,rsi,rdi(edx,edi,esi)三个寄存器(或三个中的部分)传递参数,因此需要使用ROPgadget或pwntool中的ROP.find_gadget搜索pop相应寄存器的片段,通过栈上保存的参数写入寄存器再调用。

1
2
3
read(fd:edi,*buf:rsi,len:edx)
write(fd:edi,*buf:rsi,len:edx)
puts(*buf:rdi)
阅读全文 »

本文与 0xFFFF论坛:记录下折腾香橙派过程中踩过的坑 同步

开始使用

几个月之前入手了一块Orange PI One Plus开发板,实际用途是想拿来做个机顶盒(玩的)

本文虽然主要讨论的是One Plus,但很多软件操作同样适用于Orange PI 3

简单说一下硬件资源,这块开发板CPU是全志H6,带4K硬件解码,开发板本身带HDMI,红外,麦克风以及一个千兆网口,详细资料看这里。 其实如果把这块开发板的硬件与树莓派3甚至4比,它的优势是很明显的,毕竟4K硬件解码也是到了4才有,但是软件开发支持不怎么友好。

阅读全文 »

RTOS中常用的调度方法

  1. 抢占式调度:总是在任务切换时进入就绪态的最高优先级任务执行,若该任务挂起(延时,等待信号量)则进入仅次于该任务优先级的任务,直到该挂起任务等待完成。该调度方式要求每个任务都需要有自己的优先级,能够保证任务的高实时性,但是每次切换保存上下文增加了CPU和内存的负担。
  2. 时间片调度:每各一段时间进行一次任务切换,每个任务在执行满一段指定的时间之后即切换到另一个任务(确定下一个任务的算法各异),如果任务挂起则提前切换。该调度方式可与抢占式一起使用,适用于不要求任务实时响应的情况。
  3. 合作式调度:每次执行完一个任务后从任务列表(函数指针数组)中取出下一个任务执行,通过CPU在主循环里轮询完成。这种调度方式实时性低,并且当前执行任务不能被打断,但是调度算法简单,只需要使用一个Timer定时刷新任务状态,调度开销低。

PCB设计目标考虑项

  1. 实现功能(电源管理,信号处理)
  2. 硬件兼容性(接口是否广泛使用、容易获取,是否为现有线路板的接口,考虑Robomaster官方电气零件接口)
  3. 机械结构兼容性(考虑机械安装位置,统一螺丝尺寸与孔位,考虑大型接口用螺丝紧固)
  4. 硬件复用性,多功能(实现其他冗余功能,同一块板不同用途,可通过飞线或者不焊接元件改变功能)

PCB设计衡量指标

  1. 稳定性(电源去耦,信号完整性,散热良好,接口可靠)
  2. 选型合理(实际使用远低于极限指标,器件封装易手工焊,参考设计成熟,低成本)
  3. 布局合理(走线最短,板面积最小,容易焊接)
  4. 保护性(防反接,防过流,防静电,缓启动)

PCB设计规范

阅读全文 »