semihost server example program
Dependencies: SWD mbed USBLocalFileSystem BaseDAP USBDAP
Semihost.h
00001 // Semihost.h 2014/5/3 00002 #pragma once 00003 #include "Target2.h" 00004 #include "USBLocalFileSystem.h" 00005 #include "mydebug.h" 00006 00007 /** Semihosting 00008 */ 00009 class Semihost { 00010 public: 00011 Semihost(Target2* target, Serial* usbpc, USBLocalFileSystem* usb); 00012 void mount(const char* dirpath); 00013 int poll(); 00014 enum Reason { 00015 SYS_NONE = 0, 00016 SYS_EXIT = 0x18, 00017 }; 00018 int readable(); 00019 int getc(); 00020 00021 private: 00022 int exec(uint32_t reason, uint32_t arg); 00023 00024 int sys_open(uint32_t arg); // 0x01 00025 int sys_close(uint32_t arg); // 0x02 00026 int sys_writec(uint32_t arg); // 0x03 00027 int sys_write0(uint32_t arg); // 0x04 00028 int sys_write(uint32_t arg); // 0x05 00029 int sys_read(uint32_t arg); // 0x06 00030 int sys_readc(uint32_t arg); // 0x07 00031 int sys_istty(uint32_t arg); // 0x09 00032 int sys_fseek(uint32_t arg); // 0x0a 00033 int sys_ensure(uint32_t arg); // 0x0b 00034 int sys_flen(uint32_t arg); // 0x0c 00035 int sys_remove(uint32_t arg); // 0x0e 00036 int sys_rename(uint32_t arg); // 0x0f 00037 int sys_exit(uint32_t arg); // 0x18 00038 00039 int usr_xffind(uint32_t arg); // 0x100 00040 int usr_uid(uint32_t arg); // 0x101 00041 int usr_reset(uint32_t arg); // 0x102 00042 int usr_vbus(uint32_t arg); // 0x103 00043 int usr_powerdown(uint32_t arg); // 0x104 00044 int usr_disabledebug(uint32_t arg);// 0x105 00045 00046 void _build_name(char* buf, int size, uint32_t arg1, uint32_t arg2); 00047 00048 template<typename T> 00049 void wr(uint32_t addr, T data) { 00050 TEST_ASSERT(addr <= 0x10001fff); 00051 for(int i = 0; i < sizeof(T); i++) { 00052 _target->writeMemory8(addr+i, data); 00053 data >>= 8; 00054 } 00055 } 00056 00057 template<typename T> 00058 T rd(uint32_t addr) { 00059 TEST_ASSERT(addr <= 0x10001fff); 00060 T data = 0; 00061 for(int i = sizeof(T)-1; i >= 0; i--) { 00062 data <<= 8; 00063 data |= _target->readMemory8(addr+i); 00064 } 00065 return data; 00066 } 00067 00068 protected: 00069 Target2* _target; 00070 Serial* _pc; 00071 USBLocalFileSystem* _usb; 00072 char* _dirpath; 00073 int _writec_buf; 00074 };
Generated on Wed Jul 13 2022 16:56:23 by 1.7.2