• 大小: 15KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-01
  • 语言: C/C++
  • 标签: JLinkARM  

资源简介

可以实现运行时读写Cortex-m系列cpu的存储, 也可实现jlink rtt功能

资源截图

代码片段和文件信息


#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#ifndef uint8_t
#define uint8_t unsigned char
#endif
#ifndef bool
#define bool int
#endif

#define _CALL

#pragma pack(push)
#pragma pack(1)
struct TRAD_T
{
uint32_t flag;
uint32_t data;
};
struct TRAD_CB
{
TRAD_T tx;
TRAD_T rx;
uint8_t txbuf[128];
uint8_t rxbuf[128];
};
#pragma pack(pop)

#define TRAD_OFFSET(m) (trad_addr+offsetof(TRAD_CBm))

bool(*JlinkARM_IsHalted)(void);
bool(*JlinkARM_Halt)(void);
void (*JlinkARM_Open)(void);
void(*JlinkARM_Close)(void);
bool (*JlinkARM_IsOpen)(void);
uint32_t (*JlinkARM_GetSN)(void);
uint32_t (*JlinkARM_GetId)(void);
uint32_t (*JlinkARM_GetDLLVersion)(void);
uint32_t (*JlinkARM_GetSpeed)(void);
uint32_t (*JlinkARM_ReadDCC)(uint32_t *buf uint32_t size int32_t timeout);
uint32_t (*JlinkARM_WriteDCC)(const uint32_t *buf uint32_t size int32_t timeout);
uint32_t (*JlinkARM_ReadDCCFast)(uint32_t *buf uint32_t size int32_t timeout);
uint32_t (*JlinkARM_WriteDCCFast)(const uint32_t *buf uint32_t size int32_t timeout);
uint32_t (*JlinkARM_WaitDCCRead)(uint32_t timeout);
void (*JlinkARM_SetSpeed)(uint32_t spd);
uint32_t(*JlinkARM_ExecCommand)(const char* cmduint32_t auint32_t b);

void(*JlinkARM_WriteU8)(uint32_t addr uint8_t dat);
void(*JlinkARM_WriteU16)(uint32_t addr uint16_t dat);
void(*JlinkARM_WriteU32)(uint32_t addr uint32_t dat);
uint32_t(*JlinkARM_ReadMemU8)(uint32_t addr uint32_t leng uint8_t *buf uint8_t *status);
uint32_t(*JlinkARM_ReadMemU16)(uint32_t addr uint32_t leng uint16_t *buf uint8_t *status);
uint32_t (*JlinkARM_ReadMemU32)(uint32_t addr uint32_t leng uint32_t *buf uint8_t *status);
void(*JlinkARM_ReadMemHW)(uint32_t addr uint32_t leng uint8_t *buf);
uint32_t (_CALL *Jlink_TIF_Select)(uint32_t tif);
uint32_t(_CALL*Jlink_Connect)(void);
uint32_t(_CALL*Jlink_IsConnected)(void);
void(*JlinkARM_ReadMem)(uint32_t addr uint32_t leng uint8_t *buf);
void(*Jlink_ReadMemU8)(uint32_t addr uint32_t leng uint8_t *buf uint8_t *status);
uint32_t (*Jlink_GetMemZones)(uint32_t a uint32_t b);
void(*JlinkARM_Go)(void);

uint32_t JlinkARM_WriteMenU8(uint32_t addr uint32_t leng uint8_t *buf)
{
if (leng == 1)
{
JlinkARM_WriteU8(addr buf[0]);
}
else if (leng == 2)
{
uint16_t dat = buf[0];
dat <<= 8;
dat |= buf[1];
JlinkARM_WriteU16(addr dat);
}
else if (leng == 3)
{
JlinkARM_WriteU8(addr buf[0]);
uint16_t dat = buf[1];
dat <<= 8;
dat |= buf[2];
JlinkARM_WriteU16(addr dat);
}
else
{
for (int i = 0; i < leng; i+=4)
{
int l = leng - i;
if (l >= 4) 
{
uint32_t dat = buf[i+0];
dat <<= 8;
dat |= buf[i+1];
dat <<= 8;
dat |= buf[i+2];
dat <<= 8;
dat |= buf[i+3];
JlinkARM_WriteU32(addr dat);
}
else
{
for (int j = i; j < l; j++) {
JlinkARM_WriteU8(addr bu

评论

共有 条评论

相关资源