Removed timers use from 1wire, timers disabled, fixed overflow bug
This commit is contained in:
+1
-1
@@ -110,7 +110,7 @@ extern uint32_t SystemCoreClock;
|
||||
#define configCHECK_FOR_STACK_OVERFLOW 2
|
||||
#define configENABLE_BACKWARD_COMPATIBILITY 0
|
||||
|
||||
#define configUSE_TIMERS 1
|
||||
#define configUSE_TIMERS 0
|
||||
#define configTIMER_TASK_PRIORITY TSK_TIMERS_PRIO // above normal
|
||||
#define configTIMER_TASK_STACK_DEPTH TSK_STACK_TIMERS //128
|
||||
#define configTIMER_QUEUE_LENGTH 4
|
||||
|
||||
+3
-1
@@ -13,8 +13,10 @@
|
||||
|
||||
void SysTick_Handler(void)
|
||||
{
|
||||
GEX_MsTick();
|
||||
// OS first, avoids jitter
|
||||
osSystickHandler();
|
||||
// GEX periodic updates
|
||||
GEX_MsTick();
|
||||
}
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -147,7 +147,7 @@ void MX_FREERTOS_Init(void) {
|
||||
stackmon_register("Main", mainTaskStack, sizeof(mainTaskStack));
|
||||
stackmon_register("Job+Msg", msgJobQueTaskStack, sizeof(msgJobQueTaskStack));
|
||||
stackmon_register("Idle", xIdleStack, sizeof(xIdleStack));
|
||||
stackmon_register("Timers", xTimersStack, sizeof(xTimersStack));
|
||||
// stackmon_register("Timers", xTimersStack, sizeof(xTimersStack));
|
||||
/* USER CODE END Init */
|
||||
|
||||
/* Create the mutex(es) */
|
||||
|
||||
@@ -14,15 +14,6 @@ error_t OW_preInit(Unit *unit)
|
||||
struct priv *priv = unit->data = calloc_ck(1, sizeof(struct priv));
|
||||
if (priv == NULL) return E_OUT_OF_MEM;
|
||||
|
||||
// the timer is not started until needed
|
||||
priv->busyWaitTimer = xTimerCreate("1w_tim", // name
|
||||
750, // interval (will be changed when starting it)
|
||||
true, // periodic (we use this only for the polling variant, the one-shot will stop the timer in the CB)
|
||||
unit, // user data
|
||||
OW_TimerCb); // callback
|
||||
|
||||
if (priv->busyWaitTimer == NULL) return E_OUT_OF_MEM;
|
||||
|
||||
// some defaults
|
||||
priv->pin_number = 0;
|
||||
priv->port_name = 'A';
|
||||
@@ -63,9 +54,6 @@ void OW_deInit(Unit *unit)
|
||||
// Release all resources
|
||||
rsc_teardown(unit);
|
||||
|
||||
// Delete the software timer
|
||||
assert_param(pdPASS == xTimerDelete(priv->busyWaitTimer, 1000));
|
||||
|
||||
// Free memory
|
||||
free_ck(unit->data);
|
||||
}
|
||||
|
||||
+14
-11
@@ -38,12 +38,13 @@ static void OW_TimerRespCb(Job *job)
|
||||
*
|
||||
* @param xTimer
|
||||
*/
|
||||
void OW_TimerCb(TimerHandle_t xTimer)
|
||||
void OW_tickHandler(Unit *unit)
|
||||
{
|
||||
Unit *unit = pvTimerGetTimerID(xTimer);
|
||||
assert_param(unit);
|
||||
struct priv *priv = unit->data;
|
||||
assert_param(priv->busy);
|
||||
if(!priv->busy) {
|
||||
dbg("ow tick should be disabled now!");
|
||||
return;
|
||||
}
|
||||
|
||||
if (priv->parasitic) {
|
||||
// this is the end of the 750ms measurement time
|
||||
@@ -56,7 +57,8 @@ void OW_TimerCb(TimerHandle_t xTimer)
|
||||
|
||||
uint32_t time = PTIM_GetTime();
|
||||
if (time - priv->busyStart > 1000) {
|
||||
xTimerStop(xTimer, 100);
|
||||
unit->tick_interval = 0;
|
||||
unit->_tick_cnt = 0;
|
||||
|
||||
Job j = {
|
||||
.unit = unit,
|
||||
@@ -69,7 +71,8 @@ void OW_TimerCb(TimerHandle_t xTimer)
|
||||
|
||||
return;
|
||||
halt_ok:
|
||||
xTimerStop(xTimer, 100);
|
||||
unit->tick_interval = 0;
|
||||
unit->_tick_cnt = 0;
|
||||
|
||||
Job j = {
|
||||
.unit = unit,
|
||||
@@ -79,7 +82,6 @@ halt_ok:
|
||||
scheduleJob(&j);
|
||||
}
|
||||
|
||||
|
||||
enum PinCmd_ {
|
||||
CMD_CHECK_PRESENCE = 0, // simply tests that any devices are attached
|
||||
CMD_SEARCH_ADDR = 1, // perform a scan of the bus, retrieving all found device ROMs
|
||||
@@ -120,13 +122,13 @@ static error_t OW_handleRequest(Unit *unit, TF_ID frame_id, uint8_t command, Pay
|
||||
*/
|
||||
case CMD_POLL_FOR_1:
|
||||
// This can't be exposed via the UU API, due to being async
|
||||
unit->_tick_cnt = 0;
|
||||
unit->tick_interval = 750;
|
||||
if (priv->parasitic) {
|
||||
assert_param(pdPASS == xTimerChangePeriod(priv->busyWaitTimer, 750, 100));
|
||||
unit->tick_interval = 750;
|
||||
} else {
|
||||
// every 10 ticks
|
||||
assert_param(pdPASS == xTimerChangePeriod(priv->busyWaitTimer, 10, 100));
|
||||
unit->tick_interval = 10;
|
||||
}
|
||||
assert_param(pdPASS == xTimerStart(priv->busyWaitTimer, 100));
|
||||
priv->busy = true;
|
||||
priv->busyStart = PTIM_GetTime();
|
||||
priv->busyRequestId = frame_id;
|
||||
@@ -242,4 +244,5 @@ const UnitDriver UNIT_1WIRE = {
|
||||
.deInit = OW_deInit,
|
||||
// Function
|
||||
.handleRequest = OW_handleRequest,
|
||||
.updateTick = OW_tickHandler,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user