les commandes marchent, mais les moteurs non: probleme de puce selectionnée dasn l'IDE

This commit is contained in:
dimercur 2023-10-09 16:46:28 +02:00
parent 067fbef0fb
commit aa2c734535
11 changed files with 255 additions and 231 deletions

View file

@ -327,6 +327,18 @@
<outputType id="org.eclipse.cdt.managedbuilder.ui.rcbs.outputtype.1151842665.1610208999" name="Resource Custom Build Step Output Type"/> <outputType id="org.eclipse.cdt.managedbuilder.ui.rcbs.outputtype.1151842665.1610208999" name="Resource Custom Build Step Output Type"/>
</tool> </tool>
</fileInfo> </fileInfo>
<fileInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1504381080.727722516.1512822849" name="moteurs.c" rcbsApplicability="disable" resourcePath="Application/moteurs.c" toolsToInvoke="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1017015985.772184159">
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1017015985.772184159" name="MCU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1017015985">
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.1561927129" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.value.o0" valueType="enumerated"/>
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.786982597" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>
</tool>
<tool customBuildStep="true" id="org.eclipse.cdt.managedbuilder.ui.rcbs.1151549896" name="Resource Custom Build Step">
<inputType id="org.eclipse.cdt.managedbuilder.ui.rcbs.inputtype.1295176218" name="Resource Custom Build Step Input Type">
<additionalInput kind="additionalinputdependency" paths=""/>
</inputType>
<outputType id="org.eclipse.cdt.managedbuilder.ui.rcbs.outputtype.1189979175" name="Resource Custom Build Step Output Type"/>
</tool>
</fileInfo>
<fileInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1504381080.727722516.Application/application.c" name="application.c" rcbsApplicability="disable" resourcePath="Application/application.c" toolsToInvoke="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.983087978"> <fileInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1504381080.727722516.Application/application.c" name="application.c" rcbsApplicability="disable" resourcePath="Application/application.c" toolsToInvoke="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.983087978">
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.983087978" name="MCU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1017015985"> <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.983087978" name="MCU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1017015985">
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.606614377" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.value.o0" valueType="enumerated"/> <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.606614377" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.value.o0" valueType="enumerated"/>
@ -339,21 +351,9 @@
<outputType id="org.eclipse.cdt.managedbuilder.ui.rcbs.outputtype.1700687045.61103792" name="Resource Custom Build Step Output Type"/> <outputType id="org.eclipse.cdt.managedbuilder.ui.rcbs.outputtype.1700687045.61103792" name="Resource Custom Build Step Output Type"/>
</tool> </tool>
</fileInfo> </fileInfo>
<fileInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1504381080.727722516.662138057" name="leds.c" rcbsApplicability="disable" resourcePath="Application/leds.c" toolsToInvoke="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1017015985.1311312183">
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1017015985.1311312183" name="MCU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1017015985">
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.1291578589" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.value.o0" valueType="enumerated"/>
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.941552495" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>
</tool>
</fileInfo>
<fileInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1504381080.727722516.2090116280" name="xbee.c" rcbsApplicability="disable" resourcePath="Application/xbee.c" toolsToInvoke="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1017015985.704358328">
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1017015985.704358328" name="MCU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1017015985">
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.1774324656" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.value.o0" valueType="enumerated"/>
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.429048284" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>
</tool>
</fileInfo>
<fileInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1504381080.727722516.53808517" name="batterie.c" rcbsApplicability="disable" resourcePath="Application/batterie.c" toolsToInvoke="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1017015985.1171631638"> <fileInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1504381080.727722516.53808517" name="batterie.c" rcbsApplicability="disable" resourcePath="Application/batterie.c" toolsToInvoke="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1017015985.1171631638">
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1017015985.1171631638" name="MCU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1017015985"> <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1017015985.1171631638" name="MCU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1017015985">
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.2016549754" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.value.o0" valueType="enumerated"/> <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.2016549754" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.value.o0" valueType="enumerated"/>
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.457387693" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/> <inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.457387693" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>
</tool> </tool>
</fileInfo> </fileInfo>

View file

@ -125,8 +125,10 @@ void APPLICATION_MainThread(void* params) {
if (receivedCMD != NULL) { if (receivedCMD != NULL) {
decodedCmd = cmdDecode(receivedCMD,strlen(receivedCMD)); decodedCmd = cmdDecode(receivedCMD,strlen(receivedCMD));
if (decodedCmd==CMD_DECODE_UNKNOWN) if (decodedCmd->type==CMD_NONE)
cmdSendAnswer(ANS_UNKNOWN); cmdSendAnswer(ANS_UNKNOWN);
else if (decodedCmd->type == CMD_INVALID_CHECKSUM)
cmdSendAnswer(ANS_ERR);
else { else {
systemInfos.cmd = decodedCmd->type; systemInfos.cmd = decodedCmd->type;
systemTimeout.inactivityCnt = 0; systemTimeout.inactivityCnt = 0;
@ -164,8 +166,9 @@ void APPLICATION_MainThread(void* params) {
*/ */
break; break;
} }
free(decodedCmd);
} }
free(decodedCmd);
break; break;
default: default:

View file

@ -8,6 +8,7 @@
#include "commands.h" #include "commands.h"
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <stdio.h>
/* Definition des commandes */ /* Definition des commandes */
@ -75,7 +76,7 @@ char* cmdAddChecksum(const char* str) {
* Si celui-ci est bon, ll retournera 0 et supprimera le checksum de str * Si celui-ci est bon, ll retournera 0 et supprimera le checksum de str
* sinon il retournera 1 sans faire de modification. * sinon il retournera 1 sans faire de modification.
* @param None * @param None
* @retval 0 ou 1 * @retval 0 si le checksum est faux, 1 sinon
* *
*/ */
char cmdVerifyChecksum(char* str) { char cmdVerifyChecksum(char* str) {
@ -84,82 +85,76 @@ char cmdVerifyChecksum(char* str) {
unsigned char checksum=0; unsigned char checksum=0;
length = strlen(str); length = strlen(str);
for (j = 0; j < length - 2; j++) { /* Warning: str should be without ending CR (0x0D) character, so, a ping command should be
* received as "pp", 2 chars long
*
* in the loop after, ending length is length of the caommand string whithout last char, the checksum
* so, we have j<length-1
*/
for (j = 0; j<length-1; j++) {
checksum ^= str[j]; checksum ^= str[j];
} }
if (checksum == '\r') if (checksum == '\r')
checksum++; checksum++;
if (str[j] == checksum) { if (str[j] == checksum) {
str[length - 2] = 13; /*str[length - 2] = 13;
str[length - 1] = 0; str[length - 1] = 0;
str[length] = 0;*/
str[length - 1] = 0; /* we remove checksum char */
str[length] = 0; str[length] = 0;
return 0;
} else
return 1; return 1;
} else
return 0;
} }
/** /**
* @} * @}
*/ */
//CMD_Generic* cmdDecode(char* cmd, uint8_t length) {
// CMD_Generic* decodedCmd;
// char cmd_type = cmd[0];
//
// switch (cmd_type)
// {
// case CMD_MOVE:
// decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Move));
// decodedCmd->type = CMD_MOVE;
// ((CMD_Move*)decodedCmd)->distance = ((int16_t)cmd[1]<<8) + (int16_t)cmd[2];
// break;
//
// case CMD_TURN:
// decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Turn));
// decodedCmd->type = CMD_TURN;
// ((CMD_Turn*)decodedCmd)->turns = ((int16_t)cmd[1]<<8) + (int16_t)cmd[2];
// break;
//
// case CMD_PING:
// case CMD_RESET:
// case CMD_START_WITHOUT_WATCHDOG:
// case CMD_START_WITH_WATCHDOG:
// case CMD_RESET_WATCHDOG:
// case CMD_GET_BATTERY:
// case CMD_GET_BUSY_STATE:
// case CMD_GET_VERSION:
// case CMD_TEST:
// case CMD_DEBUG:
// case CMD_POWER_OFF:
// decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Generic));
// decodedCmd->type = cmd_type;
// break;
//
// default:
// decodedCmd = CMD_DECODE_UNKNOWN;
// }
//
// return decodedCmd;
//}
CMD_Generic* cmdDecode(char* cmd, uint8_t length) { CMD_Generic* cmdDecode(char* cmd, uint8_t length) {
CMD_Generic* decodedCmd; CMD_Generic* decodedCmd;
char cmd_type = cmd[0]; char cmd_type = cmd[0];
char *p;
/* First, verify checksum */
if (cmdVerifyChecksum(cmd)) {
switch (cmd_type) switch (cmd_type)
{ {
case MoveCMD: case MoveCMD:
decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Move)); decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Move));
decodedCmd->type = CMD_MOVE; decodedCmd->type = CMD_MOVE;
((CMD_Move*)decodedCmd)->distance = ((int16_t)cmd[1]<<8) + (int16_t)cmd[2]; //((CMD_Move*)decodedCmd)->distance = ((int16_t)cmd[1]<<8) + (int16_t)cmd[2];
/* verify that command start with "M=" */
if ((cmd[0]=='M')&&(cmd[1]=='=')) {
cmd = cmd+2; //cmd+2 for removing "M=" at start of the string
((CMD_Move*)decodedCmd)->distance=strtoul(cmd , &p, 10);
if (p==cmd)
decodedCmd->type = CMD_NONE; /* missing number value xxxxx in "M=xxxxx" */
} else
decodedCmd->type = CMD_NONE; /* misformed command (should start with "M=" */
break; break;
case TurnCMD: case TurnCMD:
decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Turn)); decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Turn));
decodedCmd->type = CMD_TURN; decodedCmd->type = CMD_TURN;
((CMD_Turn*)decodedCmd)->turns = ((int16_t)cmd[1]<<8) + (int16_t)cmd[2]; //((CMD_Turn*)decodedCmd)->turns = ((int16_t)cmd[1]<<8) + (int16_t)cmd[2];
//if (!sscanf(cmd,"T=%hd",&((CMD_Turn*)decodedCmd)->turns ))
// decodedCmd->type = CMD_NONE;
/* verify that command start with "T=" */
if ((cmd[0]=='T')&&(cmd[1]=='=')) {
cmd = cmd+2; //cmd+2 for removing "T=" at start of the string
((CMD_Turn*)decodedCmd)->turns=strtoul(cmd , &p, 10);
if (p==cmd)
decodedCmd->type = CMD_NONE; /* missing number value xxxxx in "T=xxxxx" */
} else
decodedCmd->type = CMD_NONE; /* misformed command (should start with "T=" */
break; break;
case PingCMD: case PingCMD:
@ -208,7 +203,12 @@ CMD_Generic* cmdDecode(char* cmd, uint8_t length) {
break; break;
default: default:
decodedCmd = CMD_DECODE_UNKNOWN; decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Generic));
decodedCmd->type = CMD_NONE;
}
} else { /* Checksum is wrong*/
decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Generic));
decodedCmd->type = CMD_INVALID_CHECKSUM;
} }
return decodedCmd; return decodedCmd;

View file

@ -24,7 +24,8 @@ typedef enum {
CMD_GET_BUSY_STATE, CMD_GET_BUSY_STATE,
CMD_TEST, CMD_TEST,
CMD_DEBUG, CMD_DEBUG,
CMD_POWER_OFF CMD_POWER_OFF,
CMD_INVALID_CHECKSUM=0xFF
} CMD_CommandsType; } CMD_CommandsType;
typedef enum { typedef enum {
@ -77,9 +78,6 @@ typedef struct __attribute__((packed)) {
uint8_t state; uint8_t state;
} ANS_Busy_State; } ANS_Busy_State;
#define CMD_DECODE_INVALID ((CMD_Generic*)NULL)
#define CMD_DECODE_UNKNOWN ((CMD_Generic*)UINT32_MAX)
CMD_Generic* cmdDecode(char* cmd, uint8_t length); CMD_Generic* cmdDecode(char* cmd, uint8_t length);
void cmdSendAnswer(uint8_t ans); void cmdSendAnswer(uint8_t ans);
void cmdSendString(char* str); void cmdSendString(char* str);

View file

@ -105,15 +105,21 @@ void MOTEURS_Init(void) {
void MOTEURS_Avance(uint32_t distance) { void MOTEURS_Avance(uint32_t distance) {
static uint32_t dist; static uint32_t dist;
if (distance) {
dist = distance; dist = distance;
MESSAGE_SendMailbox(MOTEURS_Mailbox, MSG_ID_MOTEURS_MOVE, APPLICATION_Mailbox, (void*)dist); MESSAGE_SendMailbox(MOTEURS_Mailbox, MSG_ID_MOTEURS_MOVE, APPLICATION_Mailbox, (void*)&dist);
} else
MOTEURS_Stop();
} }
void MOTEURS_Tourne(uint32_t tours) { void MOTEURS_Tourne(uint32_t tours) {
static uint32_t turns; static uint32_t turns;
if (tours) {
turns = tours; turns = tours;
MESSAGE_SendMailbox(MOTEURS_Mailbox, MSG_ID_MOTEURS_TURN, APPLICATION_Mailbox, (void*)turns); MESSAGE_SendMailbox(MOTEURS_Mailbox, MSG_ID_MOTEURS_TURN, APPLICATION_Mailbox, (void*)&turns);
} else
MOTEURS_Stop();
} }
void MOTEURS_Stop(void) { void MOTEURS_Stop(void) {

View file

@ -131,15 +131,15 @@ int XBEE_SendData(char* data) {
int status = XBEE_OK; int status = XBEE_OK;
// Prevents successive calls to overlap // Prevents successive calls to overlap
//state = xSemaphoreTake(xHandleSemaphoreTX, pdMS_TO_TICKS(XBEE_TX_SEMAPHORE_WAIT)); // wait max 500 ms (to avoid interlocking) state = xSemaphoreTake(xHandleSemaphoreTX, pdMS_TO_TICKS(XBEE_TX_SEMAPHORE_WAIT)); // wait max 500 ms (to avoid interlocking)
//if (state != pdFALSE) { /* test semaphore take answer if (state != pdFALSE) { /* test semaphore take answer
// if answer is false, it means timeout appends if answer is false, it means timeout appends
// We should probably reset something in "else" branch */ We should probably reset something in "else" branch */
while (LL_USART_IsEnabledIT_TXE(hlpuart1.Instance)) { // while (LL_USART_IsEnabledIT_TXE(hlpuart1.Instance)) {
vTaskDelay(pdMS_TO_TICKS(1)); // vTaskDelay(pdMS_TO_TICKS(1));
} // }
strncpy((char*)txBuffer,data,XBEE_TX_BUFFER_MAX_LENGTH-1); strncpy((char*)txBuffer,data,XBEE_TX_BUFFER_MAX_LENGTH-1);
txBuffer[XBEE_TX_BUFFER_MAX_LENGTH-1]=0; txBuffer[XBEE_TX_BUFFER_MAX_LENGTH-1]=0;
@ -152,7 +152,7 @@ int XBEE_SendData(char* data) {
LL_USART_TransmitData8(hlpuart1.Instance, txBuffer[0]); LL_USART_TransmitData8(hlpuart1.Instance, txBuffer[0]);
LL_USART_EnableIT_TXE(hlpuart1.Instance); // enable TX Interrupt LL_USART_EnableIT_TXE(hlpuart1.Instance); // enable TX Interrupt
} }
//} else status= XBEE_TX_TIMEOUT; } else status= XBEE_TX_TIMEOUT;
return status; return status;
} }
@ -162,7 +162,7 @@ void XBEE_TX_IRQHandler(void) {
if (txRemainingData==0) { // No more data, disable TXE bit if (txRemainingData==0) { // No more data, disable TXE bit
LL_USART_DisableIT_TXE(hlpuart1.Instance); LL_USART_DisableIT_TXE(hlpuart1.Instance);
//xSemaphoreGiveFromISR( xHandleSemaphoreTX, &xHigherPriorityTaskWoken ); xSemaphoreGiveFromISR( xHandleSemaphoreTX, &xHigherPriorityTaskWoken );
} else { } else {
LL_USART_TransmitData8(hlpuart1.Instance, txBuffer[txIndex]); LL_USART_TransmitData8(hlpuart1.Instance, txBuffer[txIndex]);
txIndex++; txIndex++;

View file

@ -181,7 +181,7 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
HAL_NVIC_SetPriority(LPUART1_IRQn, 3, 0); HAL_NVIC_SetPriority(LPUART1_IRQn, 3, 0);
HAL_NVIC_EnableIRQ(LPUART1_IRQn); HAL_NVIC_EnableIRQ(LPUART1_IRQn);
/* USER CODE BEGIN LPUART1_MspInit 1 */ /* USER CODE BEGIN LPUART1_MspInit 1 */
//HAL_NVIC_SetPriority(LPUART1_IRQn, 3, 0); //HAL_NVIC_SetPriority(LPUART1_IRQn, 2, 0);
/* USER CODE END LPUART1_MspInit 1 */ /* USER CODE END LPUART1_MspInit 1 */
} }

View file

@ -39,10 +39,11 @@ extern int __io_getchar(void) __attribute__((weak));
extern uint8_t ucHeap[ configTOTAL_HEAP_SIZE ]; extern uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];
char *__env[1] = { 0 }; char *__env[1] = { 0 };
char **environ = __env; char **environ = __env;
uint32_t Counter_Malloc=0;
uint32_t Counter_Free=0;
/* Functions */ /* Functions */
void* malloc(size_t size) void* malloc(size_t size)
@ -53,6 +54,7 @@ void* malloc(size_t size)
{ {
// We simply wrap the FreeRTOS call into a standard form // We simply wrap the FreeRTOS call into a standard form
ptr = pvPortMalloc(size); ptr = pvPortMalloc(size);
Counter_Malloc++;
} // else NULL if there was an error } // else NULL if there was an error
return ptr; return ptr;
@ -65,6 +67,7 @@ void free(void* ptr)
if ((ptr>=(void*)ucHeap) && (ptr<=(void*)ucHeap+configTOTAL_HEAP_SIZE)) { if ((ptr>=(void*)ucHeap) && (ptr<=(void*)ucHeap+configTOTAL_HEAP_SIZE)) {
// We simply wrap the FreeRTOS call into a standard form // We simply wrap the FreeRTOS call into a standard form
vPortFree(ptr); vPortFree(ptr);
Counter_Free++;
} }
} }
} }

View file

@ -1,79 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="com.st.stm32cube.ide.mcu.debug.launch.launchConfigurationType">
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.access_port_id" value="0"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.cubeprog_external_loaders" value="[]"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.enable_live_expr" value="true"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.enable_swv" value="false"/>
<intAttribute key="com.st.stm32cube.ide.mcu.debug.launch.formatVersion" value="2"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.ip_address_local" value="localhost"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.limit_swo_clock.enabled" value="false"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.limit_swo_clock.value" value=""/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.loadList" value="{&quot;fItems&quot;:[{&quot;fIsFromMainTab&quot;:true,&quot;fPath&quot;:&quot;Debug/Dumber3.elf&quot;,&quot;fProjectName&quot;:&quot;Dumber3&quot;,&quot;fPerformBuild&quot;:true,&quot;fDownload&quot;:true,&quot;fLoadSymbols&quot;:true}]}"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.override_start_address_mode" value="default"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.remoteCommand" value="target remote"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.startServer" value="true"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.startuptab.exception.divby0" value="true"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.startuptab.exception.unaligned" value="false"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.startuptab.haltonexception" value="true"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.swd_mode" value="true"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.swv_port" value="61235"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.swv_trace_hclk" value="16000000"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.useRemoteTarget" value="true"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.vector_table" value=""/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.verify_flash_download" value="true"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.cti_allow_halt" value="false"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.cti_signal_halt" value="false"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.enable_logging" value="false"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.enable_max_halt_delay" value="false"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.enable_shared_stlink" value="false"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.frequency" value="0"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.halt_all_on_reset" value="false"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.log_file" value="/home/dimercur/Travail/git/dumber/software/dumber3/Debug/st-link_gdbserver_log.txt"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.low_power_debug" value="enable"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.max_halt_delay" value="2"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.reset_strategy" value="connect_under_reset"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.stlink_check_serial_number" value="true"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.stlink_txt_serial_number" value="49FF67064970535516370687"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.watchdog_config" value="none"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlinkenable_rtos" value="true"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlinkrestart_configurations" value="{&quot;fVersion&quot;:1,&quot;fItems&quot;:[{&quot;fDisplayName&quot;:&quot;Reset&quot;,&quot;fIsSuppressible&quot;:false,&quot;fResetAttribute&quot;:&quot;Software system reset&quot;,&quot;fResetStrategies&quot;:[{&quot;fDisplayName&quot;:&quot;Software system reset&quot;,&quot;fLaunchAttribute&quot;:&quot;system_reset&quot;,&quot;fGdbCommands&quot;:[&quot;monitor reset\n&quot;],&quot;fCmdOptions&quot;:[&quot;-g&quot;]},{&quot;fDisplayName&quot;:&quot;Hardware reset&quot;,&quot;fLaunchAttribute&quot;:&quot;hardware_reset&quot;,&quot;fGdbCommands&quot;:[&quot;monitor reset hardware\n&quot;],&quot;fCmdOptions&quot;:[&quot;-g&quot;]},{&quot;fDisplayName&quot;:&quot;Core reset&quot;,&quot;fLaunchAttribute&quot;:&quot;core_reset&quot;,&quot;fGdbCommands&quot;:[&quot;monitor reset core\n&quot;],&quot;fCmdOptions&quot;:[&quot;-g&quot;]},{&quot;fDisplayName&quot;:&quot;None&quot;,&quot;fLaunchAttribute&quot;:&quot;no_reset&quot;,&quot;fGdbCommands&quot;:[],&quot;fCmdOptions&quot;:[&quot;-g&quot;]}],&quot;fGdbCommandGroup&quot;:{&quot;name&quot;:&quot;Additional commands&quot;,&quot;commands&quot;:[]},&quot;fStartApplication&quot;:true}]}"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.rtosproxy.enableRtosProxy" value="true"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.rtosproxy.rtosProxyCustomProperties" value=""/>
<stringAttribute key="com.st.stm32cube.ide.mcu.rtosproxy.rtosProxyDriver" value="freertos"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.rtosproxy.rtosProxyDriverAuto" value="false"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.rtosproxy.rtosProxyDriverPort" value="ARM_CM0"/>
<intAttribute key="com.st.stm32cube.ide.mcu.rtosproxy.rtosProxyPort" value="60000"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.doHalt" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.doReset" value="false"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.initCommands" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.ipAddress" value="localhost"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.jtagDeviceId" value="com.st.stm32cube.ide.mcu.debug.stlink"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.pcRegister" value=""/>
<intAttribute key="org.eclipse.cdt.debug.gdbjtag.core.portNumber" value="61234"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.runCommands" value=""/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setPcRegister" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setResume" value="true"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setStopAt" value="true"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.stopAt" value="main"/>
<stringAttribute key="org.eclipse.cdt.dsf.gdb.DEBUG_NAME" value="arm-none-eabi-gdb"/>
<booleanAttribute key="org.eclipse.cdt.dsf.gdb.NON_STOP" value="false"/>
<booleanAttribute key="org.eclipse.cdt.dsf.gdb.UPDATE_THREADLIST_ON_SUSPEND" value="false"/>
<intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="2"/>
<stringAttribute key="org.eclipse.cdt.launch.COREFILE_PATH" value=""/>
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_START_MODE" value="remote"/>
<booleanAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN" value="true"/>
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN_SYMBOL" value="main"/>
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="Debug/Dumber3.elf"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="Dumber3"/>
<booleanAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_AUTO_ATTR" value="true"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_ID_ATTR" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1504381080"/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/Dumber3"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/>
</listAttribute>
<stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&lt;memoryBlockExpressionList context=&quot;reserved-for-future-use&quot;&gt;&lt;gdbmemoryBlockExpression address=&quot;536875216&quot; label=&quot;rxBuffer&quot;/&gt;&lt;gdbmemoryBlockExpression address=&quot;536875132&quot; label=&quot;txBuffer&quot;/&gt;&lt;/memoryBlockExpressionList&gt;"/>
<stringAttribute key="process_factory_id" value="com.st.stm32cube.ide.mcu.debug.launch.HardwareDebugProcessFactory"/>
<stringAttribute key="saved_expressions&lt;seperator&gt;Unknown" value="rxBuffer"/>
</launchConfiguration>

View file

@ -35,7 +35,7 @@ typedef enum {
MISC_Tests MISC_Tests
} TESTS_Type; } TESTS_Type;
TESTS_Type TESTS_Nbr=COMMANDS_Tests; // Number indicating which test is being run TESTS_Type TESTS_Nbr=MOTEURS_Tests; // Number indicating which test is being run
void TESTS_BasicTests(void* params); void TESTS_BasicTests(void* params);
@ -171,12 +171,12 @@ void TESTS_BasicTests(void* params) {
break; break;
case CMD_MOVE: case CMD_MOVE:
snprintf(str, 99, "MOVE received\r"); snprintf(str, 99, "MOVE received (dist=%hd)\r",((CMD_Move*)cmd)->distance);
cmdSendAnswer(ANS_OK); cmdSendAnswer(ANS_OK);
break; break;
case CMD_TURN: case CMD_TURN:
snprintf(str, 99, "TURN received\r"); snprintf(str, 99, "TURN received (turns=%hd)\r",((CMD_Turn*)cmd)->turns);
cmdSendAnswer(ANS_OK); cmdSendAnswer(ANS_OK);
break; break;
case CMD_GET_BUSY_STATE: case CMD_GET_BUSY_STATE:
@ -199,14 +199,22 @@ void TESTS_BasicTests(void* params) {
snprintf(str, 99, "POWER_OFF received\r"); snprintf(str, 99, "POWER_OFF received\r");
cmdSendAnswer(ANS_OK); cmdSendAnswer(ANS_OK);
break; break;
default: case CMD_NONE:
snprintf(str, 99, "Unknown command\r");
cmdSendAnswer(ANS_UNKNOWN);
break;
case CMD_INVALID_CHECKSUM:
snprintf(str, 99, "Invalid checksum\r");
cmdSendAnswer(ANS_ERR);
break;
default:
snprintf(str, 99, "Unknown command\r"); snprintf(str, 99, "Unknown command\r");
cmdSendAnswer(ANS_UNKNOWN); cmdSendAnswer(ANS_UNKNOWN);
break; break;
} }
free(cmd);
MESSAGE_SendMailbox(XBEE_Mailbox, MSG_ID_XBEE_ANS, APPLICATION_Mailbox, (void*)str); MESSAGE_SendMailbox(XBEE_Mailbox, MSG_ID_XBEE_ANS, APPLICATION_Mailbox, (void*)str);
} }
} }
@ -246,6 +254,40 @@ void TESTS_BasicTests(void* params) {
break; break;
case MOTEURS_Tests: case MOTEURS_Tests:
while (1) {
msg = MESSAGE_ReadMailbox(APPLICATION_Mailbox); // Wait for a message from Xbee
if (msg.id == MSG_ID_XBEE_CMD) {
cmd = cmdDecode((char*)msg.data, strlen((char*)msg.data));
free(msg.data);
str[0]=0;
switch (cmd->type) {
case CMD_RESET:
snprintf(str, 99, "RESET received (stop motors)\r");
cmdSendAnswer(ANS_OK);
MOTEURS_Stop();
break;
case CMD_MOVE:
snprintf(str, 99, "MOVE received (dist=%hd)\r",((CMD_Move*)cmd)->distance);
cmdSendAnswer(ANS_OK);
MOTEURS_Avance(((CMD_Move*)cmd)->distance);
break;
case CMD_TURN:
snprintf(str, 99, "TURN received (turns=%hd)\r",((CMD_Turn*)cmd)->turns);
cmdSendAnswer(ANS_OK);
MOTEURS_Tourne(((CMD_Turn*)cmd)->turns);
break;
default:
snprintf(str, 99, "Motor test: cmd M or T et R only\r");
cmdSendAnswer(ANS_ERR);
break;
}
free(cmd);
MESSAGE_SendMailbox(XBEE_Mailbox, MSG_ID_XBEE_ANS, APPLICATION_Mailbox, (void*)str);
}
}
break; break;
case MISC_Tests: // test du bouton on/off case MISC_Tests: // test du bouton on/off

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<data> <data>
<loop>false</loop> <loop>true</loop>
<repeat_times>1</repeat_times> <repeat_times>1</repeat_times>
<repeat_period>500</repeat_period> <repeat_period>500</repeat_period>
<packets_list> <packets_list>
@ -11,5 +11,56 @@
<packet name="Reset"> <packet name="Reset">
<payload>72720D</payload> <payload>72720D</payload>
</packet> </packet>
<packet name="Start With Watchdog">
<payload>57570D</payload>
</packet>
<packet name="Reset Watchdog">
<payload>77770D</payload>
</packet>
<packet name="Start Without Watchdog">
<payload>75750D</payload>
</packet>
<packet name="Move forward">
<payload>4D3D3230720D</payload>
</packet>
<packet name="Move backward">
<payload>4D3D2D32305F0D</payload>
</packet>
<packet name="Turn Left">
<payload>543D3930600D</payload>
</packet>
<packet name="Turn Right">
<payload>543D2D39304D0D</payload>
</packet>
<packet name="Get battery">
<payload>76760D</payload>
</packet>
<packet name="Get version">
<payload>56560D</payload>
</packet>
<packet name="Get busy state">
<payload>62620D</payload>
</packet>
<packet name="Test">
<payload>74740D</payload>
</packet>
<packet name="Debug">
<payload>61610D</payload>
</packet>
<packet name="Poweroff">
<payload>7A7A0D</payload>
</packet>
<packet name="Unknown command">
<payload>4A4A0D</payload>
</packet>
<packet name="Invalid Checksum">
<payload>543D2D39303D0D</payload>
</packet>
<packet name="Turn Right - Extreme">
<payload>543D2D3332373637730D</payload>
</packet>
<packet name="Move backward - Extreme">
<payload>4D3D2D33323736376A0D</payload>
</packet>
</packets_list> </packets_list>
</data> </data>