mirror of
https://github.com/yoboujon/dumber.git
synced 2025-06-08 05:40:49 +02:00
les commandes marchent, mais les moteurs non: probleme de puce selectionnée dasn l'IDE
This commit is contained in:
parent
067fbef0fb
commit
aa2c734535
11 changed files with 255 additions and 231 deletions
|
@ -327,6 +327,18 @@
|
|||
<outputType id="org.eclipse.cdt.managedbuilder.ui.rcbs.outputtype.1151842665.1610208999" name="Resource Custom Build Step Output Type"/>
|
||||
</tool>
|
||||
</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">
|
||||
<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"/>
|
||||
|
@ -339,21 +351,9 @@
|
|||
<outputType id="org.eclipse.cdt.managedbuilder.ui.rcbs.outputtype.1700687045.61103792" name="Resource Custom Build Step Output Type"/>
|
||||
</tool>
|
||||
</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">
|
||||
<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"/>
|
||||
</tool>
|
||||
</fileInfo>
|
||||
|
|
|
@ -125,8 +125,10 @@ void APPLICATION_MainThread(void* params) {
|
|||
if (receivedCMD != NULL) {
|
||||
decodedCmd = cmdDecode(receivedCMD,strlen(receivedCMD));
|
||||
|
||||
if (decodedCmd==CMD_DECODE_UNKNOWN)
|
||||
if (decodedCmd->type==CMD_NONE)
|
||||
cmdSendAnswer(ANS_UNKNOWN);
|
||||
else if (decodedCmd->type == CMD_INVALID_CHECKSUM)
|
||||
cmdSendAnswer(ANS_ERR);
|
||||
else {
|
||||
systemInfos.cmd = decodedCmd->type;
|
||||
systemTimeout.inactivityCnt = 0;
|
||||
|
@ -164,8 +166,9 @@ void APPLICATION_MainThread(void* params) {
|
|||
*/
|
||||
break;
|
||||
}
|
||||
free(decodedCmd);
|
||||
}
|
||||
|
||||
free(decodedCmd);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#include "commands.h"
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
/* 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
|
||||
* sinon il retournera 1 sans faire de modification.
|
||||
* @param None
|
||||
* @retval 0 ou 1
|
||||
* @retval 0 si le checksum est faux, 1 sinon
|
||||
*
|
||||
*/
|
||||
char cmdVerifyChecksum(char* str) {
|
||||
|
@ -84,131 +85,130 @@ char cmdVerifyChecksum(char* str) {
|
|||
unsigned char checksum=0;
|
||||
|
||||
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];
|
||||
}
|
||||
|
||||
if (checksum == '\r')
|
||||
checksum++;
|
||||
|
||||
if (str[j] == checksum) {
|
||||
str[length - 2] = 13;
|
||||
/*str[length - 2] = 13;
|
||||
str[length - 1] = 0;
|
||||
str[length] = 0;*/
|
||||
|
||||
str[length - 1] = 0; /* we remove checksum char */
|
||||
str[length] = 0;
|
||||
|
||||
return 0;
|
||||
} else
|
||||
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* decodedCmd;
|
||||
char cmd_type = cmd[0];
|
||||
char *p;
|
||||
|
||||
switch (cmd_type)
|
||||
{
|
||||
case MoveCMD:
|
||||
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;
|
||||
/* First, verify checksum */
|
||||
if (cmdVerifyChecksum(cmd)) {
|
||||
switch (cmd_type)
|
||||
{
|
||||
case MoveCMD:
|
||||
decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Move));
|
||||
decodedCmd->type = CMD_MOVE;
|
||||
//((CMD_Move*)decodedCmd)->distance = ((int16_t)cmd[1]<<8) + (int16_t)cmd[2];
|
||||
|
||||
case TurnCMD:
|
||||
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;
|
||||
/* 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;
|
||||
|
||||
case PingCMD:
|
||||
decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Generic));
|
||||
decodedCmd->type = CMD_PING;
|
||||
break;
|
||||
case ResetCMD:
|
||||
decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Generic));
|
||||
decodedCmd->type = CMD_RESET;
|
||||
break;
|
||||
case StartWWatchDogCMD:
|
||||
decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Generic));
|
||||
decodedCmd->type = CMD_START_WITH_WATCHDOG;
|
||||
break;
|
||||
case StartWithoutWatchCMD:
|
||||
decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Generic));
|
||||
decodedCmd->type = CMD_START_WITHOUT_WATCHDOG;
|
||||
break;
|
||||
case ResetWatchdogCMD:
|
||||
decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Generic));
|
||||
decodedCmd->type = CMD_RESET_WATCHDOG;
|
||||
break;
|
||||
case GetBatteryVoltageCMD:
|
||||
decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Generic));
|
||||
decodedCmd->type = CMD_GET_BATTERY;
|
||||
break;
|
||||
case GetVersionCMD:
|
||||
decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Generic));
|
||||
decodedCmd->type = CMD_GET_VERSION;
|
||||
break;
|
||||
case BusyStateCMD:
|
||||
decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Generic));
|
||||
decodedCmd->type = CMD_GET_BUSY_STATE;
|
||||
break;
|
||||
case TestCMD:
|
||||
decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Generic));
|
||||
decodedCmd->type = CMD_TEST;
|
||||
break;
|
||||
case DebugCMD:
|
||||
decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Generic));
|
||||
decodedCmd->type = CMD_DEBUG;
|
||||
break;
|
||||
case PowerOffCMD:
|
||||
decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Generic));
|
||||
decodedCmd->type = CMD_POWER_OFF;
|
||||
break;
|
||||
case TurnCMD:
|
||||
decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Turn));
|
||||
decodedCmd->type = CMD_TURN;
|
||||
//((CMD_Turn*)decodedCmd)->turns = ((int16_t)cmd[1]<<8) + (int16_t)cmd[2];
|
||||
|
||||
default:
|
||||
decodedCmd = CMD_DECODE_UNKNOWN;
|
||||
//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;
|
||||
|
||||
case PingCMD:
|
||||
decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Generic));
|
||||
decodedCmd->type = CMD_PING;
|
||||
break;
|
||||
case ResetCMD:
|
||||
decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Generic));
|
||||
decodedCmd->type = CMD_RESET;
|
||||
break;
|
||||
case StartWWatchDogCMD:
|
||||
decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Generic));
|
||||
decodedCmd->type = CMD_START_WITH_WATCHDOG;
|
||||
break;
|
||||
case StartWithoutWatchCMD:
|
||||
decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Generic));
|
||||
decodedCmd->type = CMD_START_WITHOUT_WATCHDOG;
|
||||
break;
|
||||
case ResetWatchdogCMD:
|
||||
decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Generic));
|
||||
decodedCmd->type = CMD_RESET_WATCHDOG;
|
||||
break;
|
||||
case GetBatteryVoltageCMD:
|
||||
decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Generic));
|
||||
decodedCmd->type = CMD_GET_BATTERY;
|
||||
break;
|
||||
case GetVersionCMD:
|
||||
decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Generic));
|
||||
decodedCmd->type = CMD_GET_VERSION;
|
||||
break;
|
||||
case BusyStateCMD:
|
||||
decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Generic));
|
||||
decodedCmd->type = CMD_GET_BUSY_STATE;
|
||||
break;
|
||||
case TestCMD:
|
||||
decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Generic));
|
||||
decodedCmd->type = CMD_TEST;
|
||||
break;
|
||||
case DebugCMD:
|
||||
decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Generic));
|
||||
decodedCmd->type = CMD_DEBUG;
|
||||
break;
|
||||
case PowerOffCMD:
|
||||
decodedCmd = (CMD_Generic*)malloc(sizeof(CMD_Generic));
|
||||
decodedCmd->type = CMD_POWER_OFF;
|
||||
break;
|
||||
|
||||
default:
|
||||
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;
|
||||
|
|
|
@ -24,7 +24,8 @@ typedef enum {
|
|||
CMD_GET_BUSY_STATE,
|
||||
CMD_TEST,
|
||||
CMD_DEBUG,
|
||||
CMD_POWER_OFF
|
||||
CMD_POWER_OFF,
|
||||
CMD_INVALID_CHECKSUM=0xFF
|
||||
} CMD_CommandsType;
|
||||
|
||||
typedef enum {
|
||||
|
@ -77,9 +78,6 @@ typedef struct __attribute__((packed)) {
|
|||
uint8_t 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);
|
||||
void cmdSendAnswer(uint8_t ans);
|
||||
void cmdSendString(char* str);
|
||||
|
|
|
@ -105,15 +105,21 @@ void MOTEURS_Init(void) {
|
|||
void MOTEURS_Avance(uint32_t distance) {
|
||||
static uint32_t dist;
|
||||
|
||||
dist = distance;
|
||||
MESSAGE_SendMailbox(MOTEURS_Mailbox, MSG_ID_MOTEURS_MOVE, APPLICATION_Mailbox, (void*)dist);
|
||||
if (distance) {
|
||||
dist = distance;
|
||||
MESSAGE_SendMailbox(MOTEURS_Mailbox, MSG_ID_MOTEURS_MOVE, APPLICATION_Mailbox, (void*)&dist);
|
||||
} else
|
||||
MOTEURS_Stop();
|
||||
}
|
||||
|
||||
void MOTEURS_Tourne(uint32_t tours) {
|
||||
static uint32_t turns;
|
||||
|
||||
turns = tours;
|
||||
MESSAGE_SendMailbox(MOTEURS_Mailbox, MSG_ID_MOTEURS_TURN, APPLICATION_Mailbox, (void*)turns);
|
||||
if (tours) {
|
||||
turns = tours;
|
||||
MESSAGE_SendMailbox(MOTEURS_Mailbox, MSG_ID_MOTEURS_TURN, APPLICATION_Mailbox, (void*)&turns);
|
||||
} else
|
||||
MOTEURS_Stop();
|
||||
}
|
||||
|
||||
void MOTEURS_Stop(void) {
|
||||
|
|
|
@ -131,28 +131,28 @@ int XBEE_SendData(char* data) {
|
|||
int status = XBEE_OK;
|
||||
|
||||
// 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 answer is false, it means timeout appends
|
||||
// We should probably reset something in "else" branch */
|
||||
if (state != pdFALSE) { /* test semaphore take answer
|
||||
if answer is false, it means timeout appends
|
||||
We should probably reset something in "else" branch */
|
||||
|
||||
while (LL_USART_IsEnabledIT_TXE(hlpuart1.Instance)) {
|
||||
vTaskDelay(pdMS_TO_TICKS(1));
|
||||
}
|
||||
// while (LL_USART_IsEnabledIT_TXE(hlpuart1.Instance)) {
|
||||
// vTaskDelay(pdMS_TO_TICKS(1));
|
||||
// }
|
||||
|
||||
strncpy((char*)txBuffer,data,XBEE_TX_BUFFER_MAX_LENGTH-1);
|
||||
txBuffer[XBEE_TX_BUFFER_MAX_LENGTH-1]=0;
|
||||
txRemainingData = strlen((char*)txBuffer);
|
||||
strncpy((char*)txBuffer,data,XBEE_TX_BUFFER_MAX_LENGTH-1);
|
||||
txBuffer[XBEE_TX_BUFFER_MAX_LENGTH-1]=0;
|
||||
txRemainingData = strlen((char*)txBuffer);
|
||||
|
||||
if (txRemainingData!=0) {
|
||||
txIndex =1;
|
||||
txRemainingData=txRemainingData-1;
|
||||
if (txRemainingData!=0) {
|
||||
txIndex =1;
|
||||
txRemainingData=txRemainingData-1;
|
||||
|
||||
LL_USART_TransmitData8(hlpuart1.Instance, txBuffer[0]);
|
||||
LL_USART_EnableIT_TXE(hlpuart1.Instance); // enable TX Interrupt
|
||||
}
|
||||
//} else status= XBEE_TX_TIMEOUT;
|
||||
LL_USART_TransmitData8(hlpuart1.Instance, txBuffer[0]);
|
||||
LL_USART_EnableIT_TXE(hlpuart1.Instance); // enable TX Interrupt
|
||||
}
|
||||
} else status= XBEE_TX_TIMEOUT;
|
||||
|
||||
return status;
|
||||
}
|
||||
|
@ -162,7 +162,7 @@ void XBEE_TX_IRQHandler(void) {
|
|||
|
||||
if (txRemainingData==0) { // No more data, disable TXE bit
|
||||
LL_USART_DisableIT_TXE(hlpuart1.Instance);
|
||||
//xSemaphoreGiveFromISR( xHandleSemaphoreTX, &xHigherPriorityTaskWoken );
|
||||
xSemaphoreGiveFromISR( xHandleSemaphoreTX, &xHigherPriorityTaskWoken );
|
||||
} else {
|
||||
LL_USART_TransmitData8(hlpuart1.Instance, txBuffer[txIndex]);
|
||||
txIndex++;
|
||||
|
|
|
@ -181,7 +181,7 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
|
|||
HAL_NVIC_SetPriority(LPUART1_IRQn, 3, 0);
|
||||
HAL_NVIC_EnableIRQ(LPUART1_IRQn);
|
||||
/* 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 */
|
||||
}
|
||||
|
||||
|
|
|
@ -39,10 +39,11 @@ extern int __io_getchar(void) __attribute__((weak));
|
|||
|
||||
extern uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];
|
||||
|
||||
|
||||
char *__env[1] = { 0 };
|
||||
char **environ = __env;
|
||||
|
||||
uint32_t Counter_Malloc=0;
|
||||
uint32_t Counter_Free=0;
|
||||
|
||||
/* Functions */
|
||||
void* malloc(size_t size)
|
||||
|
@ -53,6 +54,7 @@ void* malloc(size_t size)
|
|||
{
|
||||
// We simply wrap the FreeRTOS call into a standard form
|
||||
ptr = pvPortMalloc(size);
|
||||
Counter_Malloc++;
|
||||
} // else NULL if there was an error
|
||||
|
||||
return ptr;
|
||||
|
@ -65,6 +67,7 @@ void free(void* ptr)
|
|||
if ((ptr>=(void*)ucHeap) && (ptr<=(void*)ucHeap+configTOTAL_HEAP_SIZE)) {
|
||||
// We simply wrap the FreeRTOS call into a standard form
|
||||
vPortFree(ptr);
|
||||
Counter_Free++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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="{"fItems":[{"fIsFromMainTab":true,"fPath":"Debug/Dumber3.elf","fProjectName":"Dumber3","fPerformBuild":true,"fDownload":true,"fLoadSymbols":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="{"fVersion":1,"fItems":[{"fDisplayName":"Reset","fIsSuppressible":false,"fResetAttribute":"Software system reset","fResetStrategies":[{"fDisplayName":"Software system reset","fLaunchAttribute":"system_reset","fGdbCommands":["monitor reset\n"],"fCmdOptions":["-g"]},{"fDisplayName":"Hardware reset","fLaunchAttribute":"hardware_reset","fGdbCommands":["monitor reset hardware\n"],"fCmdOptions":["-g"]},{"fDisplayName":"Core reset","fLaunchAttribute":"core_reset","fGdbCommands":["monitor reset core\n"],"fCmdOptions":["-g"]},{"fDisplayName":"None","fLaunchAttribute":"no_reset","fGdbCommands":[],"fCmdOptions":["-g"]}],"fGdbCommandGroup":{"name":"Additional commands","commands":[]},"fStartApplication":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="<?xml version="1.0" encoding="UTF-8" standalone="no"?><memoryBlockExpressionList context="reserved-for-future-use"><gdbmemoryBlockExpression address="536875216" label="rxBuffer"/><gdbmemoryBlockExpression address="536875132" label="txBuffer"/></memoryBlockExpressionList>"/>
|
||||
<stringAttribute key="process_factory_id" value="com.st.stm32cube.ide.mcu.debug.launch.HardwareDebugProcessFactory"/>
|
||||
<stringAttribute key="saved_expressions<seperator>Unknown" value="rxBuffer"/>
|
||||
</launchConfiguration>
|
|
@ -35,7 +35,7 @@ typedef enum {
|
|||
MISC_Tests
|
||||
} 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);
|
||||
|
||||
|
@ -171,12 +171,12 @@ void TESTS_BasicTests(void* params) {
|
|||
break;
|
||||
case CMD_MOVE:
|
||||
|
||||
snprintf(str, 99, "MOVE received\r");
|
||||
snprintf(str, 99, "MOVE received (dist=%hd)\r",((CMD_Move*)cmd)->distance);
|
||||
cmdSendAnswer(ANS_OK);
|
||||
break;
|
||||
case CMD_TURN:
|
||||
|
||||
snprintf(str, 99, "TURN received\r");
|
||||
snprintf(str, 99, "TURN received (turns=%hd)\r",((CMD_Turn*)cmd)->turns);
|
||||
cmdSendAnswer(ANS_OK);
|
||||
break;
|
||||
case CMD_GET_BUSY_STATE:
|
||||
|
@ -199,14 +199,22 @@ void TESTS_BasicTests(void* params) {
|
|||
snprintf(str, 99, "POWER_OFF received\r");
|
||||
cmdSendAnswer(ANS_OK);
|
||||
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");
|
||||
cmdSendAnswer(ANS_UNKNOWN);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
free(cmd);
|
||||
MESSAGE_SendMailbox(XBEE_Mailbox, MSG_ID_XBEE_ANS, APPLICATION_Mailbox, (void*)str);
|
||||
}
|
||||
}
|
||||
|
@ -246,6 +254,40 @@ void TESTS_BasicTests(void* params) {
|
|||
break;
|
||||
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;
|
||||
case MISC_Tests: // test du bouton on/off
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<data>
|
||||
<loop>false</loop>
|
||||
<loop>true</loop>
|
||||
<repeat_times>1</repeat_times>
|
||||
<repeat_period>500</repeat_period>
|
||||
<packets_list>
|
||||
|
@ -11,5 +11,56 @@
|
|||
<packet name="Reset">
|
||||
<payload>72720D</payload>
|
||||
</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>
|
||||
</data>
|
||||
|
|
Loading…
Add table
Reference in a new issue