improved debugging output
This commit is contained in:
parent
af62e48103
commit
ddef6c6b76
@ -127,7 +127,7 @@ public class ContikiMoteType implements MoteType {
|
|||||||
public enum NetworkStack {
|
public enum NetworkStack {
|
||||||
DEFAULT, MANUAL;
|
DEFAULT, MANUAL;
|
||||||
public String manualHeader = "netstack-conf-example.h";
|
public String manualHeader = "netstack-conf-example.h";
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
if (this == DEFAULT) {
|
if (this == DEFAULT) {
|
||||||
return "Default (from contiki-conf.h)";
|
return "Default (from contiki-conf.h)";
|
||||||
@ -427,7 +427,7 @@ public class ContikiMoteType implements MoteType {
|
|||||||
readonlySectionAddr = -1;
|
readonlySectionAddr = -1;
|
||||||
readonlySectionSize = -1;
|
readonlySectionSize = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
/* Parse command output */
|
/* Parse command output */
|
||||||
if (mapFile == null ||
|
if (mapFile == null ||
|
||||||
@ -459,28 +459,28 @@ public class ContikiMoteType implements MoteType {
|
|||||||
if (dataSectionAddr >= 0) {
|
if (dataSectionAddr >= 0) {
|
||||||
logger.info(getContikiFirmwareFile().getName() +
|
logger.info(getContikiFirmwareFile().getName() +
|
||||||
": data section at 0x" + Integer.toHexString(dataSectionAddr) +
|
": data section at 0x" + Integer.toHexString(dataSectionAddr) +
|
||||||
" (" + dataSectionSize + " bytes)");
|
" (" + dataSectionSize + " == 0x" + Integer.toHexString(dataSectionSize) + " bytes)");
|
||||||
} else {
|
} else {
|
||||||
logger.fatal(getContikiFirmwareFile().getName() + ": no data section found");
|
logger.fatal(getContikiFirmwareFile().getName() + ": no data section found");
|
||||||
}
|
}
|
||||||
if (bssSectionAddr >= 0) {
|
if (bssSectionAddr >= 0) {
|
||||||
logger.info(getContikiFirmwareFile().getName() +
|
logger.info(getContikiFirmwareFile().getName() +
|
||||||
": BSS section at 0x" + Integer.toHexString(bssSectionAddr) +
|
": BSS section at 0x" + Integer.toHexString(bssSectionAddr) +
|
||||||
" (" + bssSectionSize + " bytes)");
|
" (" + bssSectionSize + " == 0x" + Integer.toHexString(bssSectionSize) + " bytes)");
|
||||||
} else {
|
} else {
|
||||||
logger.fatal(getContikiFirmwareFile().getName() + ": no BSS section found");
|
logger.fatal(getContikiFirmwareFile().getName() + ": no BSS section found");
|
||||||
}
|
}
|
||||||
if (commonSectionAddr >= 0) {
|
if (commonSectionAddr >= 0) {
|
||||||
logger.info(getContikiFirmwareFile().getName() +
|
logger.info(getContikiFirmwareFile().getName() +
|
||||||
": common section at 0x" + Integer.toHexString(commonSectionAddr) +
|
": common section at 0x" + Integer.toHexString(commonSectionAddr) +
|
||||||
" (" + commonSectionSize + " bytes)");
|
" (" + commonSectionSize + " == 0x" + Integer.toHexString(commonSectionSize) + " bytes)");
|
||||||
} else {
|
} else {
|
||||||
logger.info(getContikiFirmwareFile().getName() + ": no common section found");
|
logger.info(getContikiFirmwareFile().getName() + ": no common section found");
|
||||||
}
|
}
|
||||||
if (readonlySectionAddr >= 0) {
|
if (readonlySectionAddr >= 0) {
|
||||||
logger.info(getContikiFirmwareFile().getName() +
|
logger.info(getContikiFirmwareFile().getName() +
|
||||||
": readonly section at 0x" + Integer.toHexString(readonlySectionAddr) +
|
": readonly section at 0x" + Integer.toHexString(readonlySectionAddr) +
|
||||||
" (" + readonlySectionSize + " bytes)");
|
" (" + readonlySectionSize + " == 0x" + Integer.toHexString(readonlySectionSize) + " bytes)");
|
||||||
} else {
|
} else {
|
||||||
logger.warn(getContikiFirmwareFile().getName() + ": no readonly section found");
|
logger.warn(getContikiFirmwareFile().getName() + ": no readonly section found");
|
||||||
}
|
}
|
||||||
@ -494,18 +494,18 @@ public class ContikiMoteType implements MoteType {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
/* Relative <-> absolute addresses offset */
|
/* Relative <-> absolute addresses offset */
|
||||||
int referenceVar = (Integer) addresses.get("referenceVar");
|
int referenceVar = addresses.get("referenceVar");
|
||||||
myCoreComm.setReferenceAddress(referenceVar);
|
myCoreComm.setReferenceAddress(referenceVar);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw (MoteTypeCreationException) new MoteTypeCreationException(
|
throw (MoteTypeCreationException) new MoteTypeCreationException(
|
||||||
"JNI call error: " + e.getMessage()).initCause(e);
|
"JNI call error: " + e.getMessage()).initCause(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We first need the value of Contiki's referenceVar, which tells us the
|
/* We first need the value of Contiki's referenceVar, which tells us the
|
||||||
* memory offset between Contiki's variable and the relative addresses that
|
* memory offset between Contiki's variable and the relative addresses that
|
||||||
* were calculated directly from the library file.
|
* were calculated directly from the library file.
|
||||||
*
|
*
|
||||||
* This offset will be used in Cooja in the memory abstraction to match
|
* This offset will be used in Cooja in the memory abstraction to match
|
||||||
* Contiki's and Cooja's address spaces */
|
* Contiki's and Cooja's address spaces */
|
||||||
int offset;
|
int offset;
|
||||||
{
|
{
|
||||||
@ -521,24 +521,24 @@ public class ContikiMoteType implements MoteType {
|
|||||||
logger.info(getContikiFirmwareFile().getName() +
|
logger.info(getContikiFirmwareFile().getName() +
|
||||||
": offsetting Contiki mote address space: " + offset);
|
": offsetting Contiki mote address space: " + offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create initial memory: data+bss+optional common */
|
/* Create initial memory: data+bss+optional common */
|
||||||
initialMemory = new SectionMoteMemory(addresses, offset);
|
initialMemory = new SectionMoteMemory(addresses, offset);
|
||||||
|
|
||||||
byte[] initialDataSection = new byte[dataSectionSize];
|
byte[] initialDataSection = new byte[dataSectionSize];
|
||||||
getCoreMemory(dataSectionAddr, dataSectionSize, initialDataSection);
|
getCoreMemory(dataSectionAddr, dataSectionSize, initialDataSection);
|
||||||
initialMemory.setMemorySegmentNative(dataSectionAddr, initialDataSection);
|
initialMemory.setMemorySegmentNative(dataSectionAddr, initialDataSection);
|
||||||
|
|
||||||
byte[] initialBssSection = new byte[bssSectionSize];
|
byte[] initialBssSection = new byte[bssSectionSize];
|
||||||
getCoreMemory(bssSectionAddr, bssSectionSize, initialBssSection);
|
getCoreMemory(bssSectionAddr, bssSectionSize, initialBssSection);
|
||||||
initialMemory.setMemorySegmentNative(bssSectionAddr, initialBssSection);
|
initialMemory.setMemorySegmentNative(bssSectionAddr, initialBssSection);
|
||||||
|
|
||||||
if (commonSectionAddr >= 0 && commonSectionSize > 0) {
|
if (commonSectionAddr >= 0 && commonSectionSize > 0) {
|
||||||
byte[] initialCommonSection = new byte[commonSectionSize];
|
byte[] initialCommonSection = new byte[commonSectionSize];
|
||||||
getCoreMemory(commonSectionAddr, commonSectionSize, initialCommonSection);
|
getCoreMemory(commonSectionAddr, commonSectionSize, initialCommonSection);
|
||||||
initialMemory.setMemorySegmentNative(commonSectionAddr, initialCommonSection);
|
initialMemory.setMemorySegmentNative(commonSectionAddr, initialCommonSection);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Read "read-only" memory */
|
/* Read "read-only" memory */
|
||||||
if (readonlySectionAddr >= 0 && readonlySectionSize > 0) {
|
if (readonlySectionAddr >= 0 && readonlySectionSize > 0) {
|
||||||
byte[] readonlySection = new byte[readonlySectionSize];
|
byte[] readonlySection = new byte[readonlySectionSize];
|
||||||
@ -619,7 +619,7 @@ public class ContikiMoteType implements MoteType {
|
|||||||
public static boolean parseCommandData(String[] output, HashMap<String, Integer> addresses) {
|
public static boolean parseCommandData(String[] output, HashMap<String, Integer> addresses) {
|
||||||
int nrNew = 0, nrOld = 0, nrMismatch = 0;
|
int nrNew = 0, nrOld = 0, nrMismatch = 0;
|
||||||
|
|
||||||
Pattern pattern =
|
Pattern pattern =
|
||||||
Pattern.compile(GUI.getExternalToolsSetting("COMMAND_VAR_NAME_ADDRESS"));
|
Pattern.compile(GUI.getExternalToolsSetting("COMMAND_VAR_NAME_ADDRESS"));
|
||||||
|
|
||||||
for (String line : output) {
|
for (String line : output) {
|
||||||
@ -634,7 +634,7 @@ public class ContikiMoteType implements MoteType {
|
|||||||
nrNew++;
|
nrNew++;
|
||||||
addresses.put(symbol, new Integer(address));
|
addresses.put(symbol, new Integer(address));
|
||||||
} else {
|
} else {
|
||||||
int oldAddress = (Integer) addresses.get(symbol);
|
int oldAddress = addresses.get(symbol);
|
||||||
if (oldAddress != address) {
|
if (oldAddress != address) {
|
||||||
/*logger.warn("Warning, command response not matching previous entry of: "
|
/*logger.warn("Warning, command response not matching previous entry of: "
|
||||||
+ varName);*/
|
+ varName);*/
|
||||||
@ -827,8 +827,8 @@ public class ContikiMoteType implements MoteType {
|
|||||||
|
|
||||||
protected int getVariableSize(Vector<String> lines, String varName) {
|
protected int getVariableSize(Vector<String> lines, String varName) {
|
||||||
Pattern pattern = Pattern.compile(
|
Pattern pattern = Pattern.compile(
|
||||||
GUI.getExternalToolsSetting("MAPFILE_VAR_SIZE_1") +
|
GUI.getExternalToolsSetting("MAPFILE_VAR_SIZE_1") +
|
||||||
varName +
|
varName +
|
||||||
GUI.getExternalToolsSetting("MAPFILE_VAR_SIZE_2"));
|
GUI.getExternalToolsSetting("MAPFILE_VAR_SIZE_2"));
|
||||||
for (int i = 0; i < lines.size(); i++) {
|
for (int i = 0; i < lines.size(); i++) {
|
||||||
Matcher matcher = pattern.matcher(lines.get(i));
|
Matcher matcher = pattern.matcher(lines.get(i));
|
||||||
@ -840,7 +840,7 @@ public class ContikiMoteType implements MoteType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static int parseFirstHexInt(String regexp, String[] data) {
|
private static int parseFirstHexInt(String regexp, String[] data) {
|
||||||
String retString =
|
String retString =
|
||||||
getFirstMatchGroup(data, regexp, 1);
|
getFirstMatchGroup(data, regexp, 1);
|
||||||
|
|
||||||
if (retString != null) {
|
if (retString != null) {
|
||||||
@ -962,7 +962,7 @@ public class ContikiMoteType implements MoteType {
|
|||||||
}
|
}
|
||||||
return end - start;
|
return end - start;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int parseCommandReadonlySectionAddr(String[] output) {
|
private static int parseCommandReadonlySectionAddr(String[] output) {
|
||||||
return parseFirstHexInt("^([0-9A-Fa-f]*)[ \t]t[ \t].text$", output);
|
return parseFirstHexInt("^([0-9A-Fa-f]*)[ \t]t[ \t].text$", output);
|
||||||
}
|
}
|
||||||
@ -971,7 +971,7 @@ public class ContikiMoteType implements MoteType {
|
|||||||
if (start < 0) {
|
if (start < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Extract the last specified address, assuming that the interval covers all the memory */
|
/* Extract the last specified address, assuming that the interval covers all the memory */
|
||||||
String last = output[output.length-1];
|
String last = output[output.length-1];
|
||||||
int lastAddress = Integer.parseInt(last.split("[ \t]")[0],16);
|
int lastAddress = Integer.parseInt(last.split("[ \t]")[0],16);
|
||||||
@ -979,9 +979,9 @@ public class ContikiMoteType implements MoteType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static int getRelVarAddr(String mapFileData[], String varName) {
|
private static int getRelVarAddr(String mapFileData[], String varName) {
|
||||||
String regExp =
|
String regExp =
|
||||||
GUI.getExternalToolsSetting("MAPFILE_VAR_ADDRESS_1") +
|
GUI.getExternalToolsSetting("MAPFILE_VAR_ADDRESS_1") +
|
||||||
varName +
|
varName +
|
||||||
GUI.getExternalToolsSetting("MAPFILE_VAR_ADDRESS_2");
|
GUI.getExternalToolsSetting("MAPFILE_VAR_ADDRESS_2");
|
||||||
String retString = getFirstMatchGroup(mapFileData, regExp, 1);
|
String retString = getFirstMatchGroup(mapFileData, regExp, 1);
|
||||||
|
|
||||||
@ -1016,14 +1016,14 @@ public class ContikiMoteType implements MoteType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Prepare command */
|
/* Prepare command */
|
||||||
command = command.replace("$(LIBFILE)",
|
command = command.replace("$(LIBFILE)",
|
||||||
libraryFile.getName().replace(File.separatorChar, '/'));
|
libraryFile.getName().replace(File.separatorChar, '/'));
|
||||||
|
|
||||||
/* Execute command, read response */
|
/* Execute command, read response */
|
||||||
String line;
|
String line;
|
||||||
Process p = Runtime.getRuntime().exec(
|
Process p = Runtime.getRuntime().exec(
|
||||||
command.split(" "),
|
command.split(" "),
|
||||||
null,
|
null,
|
||||||
libraryFile.getParentFile()
|
libraryFile.getParentFile()
|
||||||
);
|
);
|
||||||
BufferedReader input = new BufferedReader(
|
BufferedReader input = new BufferedReader(
|
||||||
|
Loading…
Reference in New Issue
Block a user