| Index: emcore/trunk/tools/libemcore.py | 
| — | — | @@ -820,6 +820,37 @@ | 
| 821 | 821 | raise DeviceError("disk_unmount(volume=%d) failed with RC=0x%08X, errno=%d" % (volume, result.rc, self.errno())) | 
| 822 | 822 | return result.rc | 
| 823 | 823 |  | 
|  | 824 | +    @command() | 
|  | 825 | +    def malloc(self, size): | 
|  | 826 | +        """ Allocates 'size' bytes and returns a pointer to the allocated memory """ | 
|  | 827 | +        result = self.lib.monitorcommand(struct.pack("IIII", 52, size, 0, 0), "III", ("ptr", None, None)) | 
|  | 828 | +        return result.ptr | 
|  | 829 | + | 
|  | 830 | +    @command() | 
|  | 831 | +    def memalign(self, align, size): | 
|  | 832 | +        """ Allocates 'size' bytes aligned to 'align' and returns a pointer to the allocated memory """ | 
|  | 833 | +        result = self.lib.monitorcommand(struct.pack("IIII", 53, align, size, 0), "III", ("ptr", None, None)) | 
|  | 834 | +        return result.ptr | 
|  | 835 | + | 
|  | 836 | +    @command() | 
|  | 837 | +    def realloc(self, ptr, size): | 
|  | 838 | +        """ The size of the memory block pointed to by 'ptr' is changed to the 'size' bytes, | 
|  | 839 | +            expanding or reducing the amount of memory available in the block. | 
|  | 840 | +            Returns a pointer to the reallocated memory. | 
|  | 841 | +        """ | 
|  | 842 | +        result = self.lib.monitorcommand(struct.pack("IIII", 54, ptr, size, 0), "III", ("ptr", None, None)) | 
|  | 843 | +        return result.ptr | 
|  | 844 | + | 
|  | 845 | +    @command() | 
|  | 846 | +    def reownalloc(self, ptr, owner): | 
|  | 847 | +        """ Changes the owner of the memory allocation 'ptr' to the thread struct at addr 'owner' """ | 
|  | 848 | +        return self.lib.monitorcommand(struct.pack("IIII", 55, ptr, owner, 0), "III", (None, None, None)) | 
|  | 849 | + | 
|  | 850 | +    @command() | 
|  | 851 | +    def free(self, ptr): | 
|  | 852 | +        """ Frees the memory space pointed to by 'ptr' """ | 
|  | 853 | +        return self.lib.monitorcommand(struct.pack("IIII", 56, addr, 0, 0), "III", (None, None, None)) | 
|  | 854 | + | 
| 824 | 855 |  | 
| 825 | 856 | class Lib(object): | 
| 826 | 857 | def __init__(self, logger): | 
| — | — | @@ -1024,4 +1055,20 @@ | 
| 1025 | 1056 | if getattr(value, 'func', False): | 
| 1026 | 1057 | if getattr(value.func, '_command', False): | 
| 1027 | 1058 | cmddict[value.func.__name__] = value | 
| 1028 |  | -        logger.log(gendoc(cmddict)) | 
| \ No newline at end of file | 
|  | 1059 | +        logger.log(gendoc(cmddict)) | 
|  | 1060 | + | 
|  | 1061 | +    elif sys.argv[1] == "malloctest": | 
|  | 1062 | +        emcore = Emcore() | 
|  | 1063 | +        logger.log("Allocating 200 bytes of memory: ") | 
|  | 1064 | +        addr = emcore.malloc(200) | 
|  | 1065 | +        logger.log("0x%x\n" % addr) | 
|  | 1066 | +        logger.log("Reallocating to 2000 bytes: ") | 
|  | 1067 | +        addr = emcore.realloc(addr, 2000) | 
|  | 1068 | +        logger.log("0x%x\n" % addr) | 
|  | 1069 | +        logger.log("Freeing 0x%x\n" % addr) | 
|  | 1070 | +        emcore.free(addr) | 
|  | 1071 | +        logger.log("Allocating 1000 bytes of memory aligned to 100 bytes: ") | 
|  | 1072 | +        addr = emcore.memalign(100, 1000) | 
|  | 1073 | +        logger.log("0x%x\n" % addr) | 
|  | 1074 | +        logger.log("Freeing 0x%x\n" % addr) | 
|  | 1075 | +        emcore.free(addr) | 
| \ No newline at end of file |