Webserver+3d print

Dependents:   Nucleo

Committer:
Sergunb
Date:
Sat Feb 04 18:15:49 2017 +0000
Revision:
0:8918a71cdbe9
nothing else

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Sergunb 0:8918a71cdbe9 1 /**
Sergunb 0:8918a71cdbe9 2 * @file os_port_none.c
Sergunb 0:8918a71cdbe9 3 * @brief RTOS-less environment
Sergunb 0:8918a71cdbe9 4 *
Sergunb 0:8918a71cdbe9 5 * @section License
Sergunb 0:8918a71cdbe9 6 *
Sergunb 0:8918a71cdbe9 7 * Copyright (C) 2010-2017 Oryx Embedded SARL. All rights reserved.
Sergunb 0:8918a71cdbe9 8 *
Sergunb 0:8918a71cdbe9 9 * This program is free software; you can redistribute it and/or
Sergunb 0:8918a71cdbe9 10 * modify it under the terms of the GNU General Public License
Sergunb 0:8918a71cdbe9 11 * as published by the Free Software Foundation; either version 2
Sergunb 0:8918a71cdbe9 12 * of the License, or (at your option) any later version.
Sergunb 0:8918a71cdbe9 13 *
Sergunb 0:8918a71cdbe9 14 * This program is distributed in the hope that it will be useful,
Sergunb 0:8918a71cdbe9 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Sergunb 0:8918a71cdbe9 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Sergunb 0:8918a71cdbe9 17 * GNU General Public License for more details.
Sergunb 0:8918a71cdbe9 18 *
Sergunb 0:8918a71cdbe9 19 * You should have received a copy of the GNU General Public License
Sergunb 0:8918a71cdbe9 20 * along with this program; if not, write to the Free Software Foundation,
Sergunb 0:8918a71cdbe9 21 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Sergunb 0:8918a71cdbe9 22 *
Sergunb 0:8918a71cdbe9 23 * @author Oryx Embedded SARL (www.oryx-embedded.com)
Sergunb 0:8918a71cdbe9 24 * @version 1.7.6
Sergunb 0:8918a71cdbe9 25 **/
Sergunb 0:8918a71cdbe9 26
Sergunb 0:8918a71cdbe9 27 //Switch to the appropriate trace level
Sergunb 0:8918a71cdbe9 28 #define TRACE_LEVEL TRACE_LEVEL_OFF
Sergunb 0:8918a71cdbe9 29
Sergunb 0:8918a71cdbe9 30 //Dependencies
Sergunb 0:8918a71cdbe9 31 #include <stdio.h>
Sergunb 0:8918a71cdbe9 32 #include <stdlib.h>
Sergunb 0:8918a71cdbe9 33 #include "os_port.h"
Sergunb 0:8918a71cdbe9 34 #include "os_port_none.h"
Sergunb 0:8918a71cdbe9 35 #include "debug.h"
Sergunb 0:8918a71cdbe9 36
Sergunb 0:8918a71cdbe9 37 //Platform-specific dependencies
Sergunb 0:8918a71cdbe9 38 #if defined(__linux__) || defined(__FreeBSD__)
Sergunb 0:8918a71cdbe9 39 #include <sys/time.h>
Sergunb 0:8918a71cdbe9 40 #elif defined(_WIN32)
Sergunb 0:8918a71cdbe9 41 #include <windows.h>
Sergunb 0:8918a71cdbe9 42 #endif
Sergunb 0:8918a71cdbe9 43
Sergunb 0:8918a71cdbe9 44 //Tick count
Sergunb 0:8918a71cdbe9 45 systime_t systemTicks = 0;
Sergunb 0:8918a71cdbe9 46
Sergunb 0:8918a71cdbe9 47
Sergunb 0:8918a71cdbe9 48 /**
Sergunb 0:8918a71cdbe9 49 * @brief Kernel initialization
Sergunb 0:8918a71cdbe9 50 **/
Sergunb 0:8918a71cdbe9 51
Sergunb 0:8918a71cdbe9 52 void osInitKernel(void)
Sergunb 0:8918a71cdbe9 53 {
Sergunb 0:8918a71cdbe9 54 //Initialize tick count
Sergunb 0:8918a71cdbe9 55 systemTicks = 0;
Sergunb 0:8918a71cdbe9 56 }
Sergunb 0:8918a71cdbe9 57
Sergunb 0:8918a71cdbe9 58
Sergunb 0:8918a71cdbe9 59 /**
Sergunb 0:8918a71cdbe9 60 * @brief Start kernel
Sergunb 0:8918a71cdbe9 61 **/
Sergunb 0:8918a71cdbe9 62
Sergunb 0:8918a71cdbe9 63 void osStartKernel(void)
Sergunb 0:8918a71cdbe9 64 {
Sergunb 0:8918a71cdbe9 65 }
Sergunb 0:8918a71cdbe9 66
Sergunb 0:8918a71cdbe9 67
Sergunb 0:8918a71cdbe9 68 /**
Sergunb 0:8918a71cdbe9 69 * @brief Create a new task
Sergunb 0:8918a71cdbe9 70 * @param[in] name A name identifying the task
Sergunb 0:8918a71cdbe9 71 * @param[in] taskCode Pointer to the task entry function
Sergunb 0:8918a71cdbe9 72 * @param[in] params A pointer to a variable to be passed to the task
Sergunb 0:8918a71cdbe9 73 * @param[in] stackSize The initial size of the stack, in words
Sergunb 0:8918a71cdbe9 74 * @param[in] priority The priority at which the task should run
Sergunb 0:8918a71cdbe9 75 * @return If the function succeeds, the return value is a pointer to the
Sergunb 0:8918a71cdbe9 76 * new task. If the function fails, the return value is NULL
Sergunb 0:8918a71cdbe9 77 **/
Sergunb 0:8918a71cdbe9 78
Sergunb 0:8918a71cdbe9 79 OsTask *osCreateTask(const char_t *name, OsTaskCode taskCode,
Sergunb 0:8918a71cdbe9 80 void *params, size_t stackSize, int_t priority)
Sergunb 0:8918a71cdbe9 81 {
Sergunb 0:8918a71cdbe9 82 //Return a non-NULL pointer
Sergunb 0:8918a71cdbe9 83 return (OsTask *) (-1);
Sergunb 0:8918a71cdbe9 84 }
Sergunb 0:8918a71cdbe9 85
Sergunb 0:8918a71cdbe9 86
Sergunb 0:8918a71cdbe9 87 /**
Sergunb 0:8918a71cdbe9 88 * @brief Delete a task
Sergunb 0:8918a71cdbe9 89 * @param[in] task Pointer to the task to be deleted
Sergunb 0:8918a71cdbe9 90 **/
Sergunb 0:8918a71cdbe9 91
Sergunb 0:8918a71cdbe9 92 void osDeleteTask(OsTask *task)
Sergunb 0:8918a71cdbe9 93 {
Sergunb 0:8918a71cdbe9 94 }
Sergunb 0:8918a71cdbe9 95
Sergunb 0:8918a71cdbe9 96
Sergunb 0:8918a71cdbe9 97 /**
Sergunb 0:8918a71cdbe9 98 * @brief Delay routine
Sergunb 0:8918a71cdbe9 99 * @param[in] delay Amount of time for which the calling task should block
Sergunb 0:8918a71cdbe9 100 **/
Sergunb 0:8918a71cdbe9 101
Sergunb 0:8918a71cdbe9 102 void osDelayTask(systime_t delay)
Sergunb 0:8918a71cdbe9 103 {
Sergunb 0:8918a71cdbe9 104 }
Sergunb 0:8918a71cdbe9 105
Sergunb 0:8918a71cdbe9 106
Sergunb 0:8918a71cdbe9 107 /**
Sergunb 0:8918a71cdbe9 108 * @brief Yield control to the next task
Sergunb 0:8918a71cdbe9 109 **/
Sergunb 0:8918a71cdbe9 110
Sergunb 0:8918a71cdbe9 111 void osSwitchTask(void)
Sergunb 0:8918a71cdbe9 112 {
Sergunb 0:8918a71cdbe9 113 }
Sergunb 0:8918a71cdbe9 114
Sergunb 0:8918a71cdbe9 115
Sergunb 0:8918a71cdbe9 116 /**
Sergunb 0:8918a71cdbe9 117 * @brief Suspend scheduler activity
Sergunb 0:8918a71cdbe9 118 **/
Sergunb 0:8918a71cdbe9 119
Sergunb 0:8918a71cdbe9 120 void osSuspendAllTasks(void)
Sergunb 0:8918a71cdbe9 121 {
Sergunb 0:8918a71cdbe9 122 }
Sergunb 0:8918a71cdbe9 123
Sergunb 0:8918a71cdbe9 124
Sergunb 0:8918a71cdbe9 125 /**
Sergunb 0:8918a71cdbe9 126 * @brief Resume scheduler activity
Sergunb 0:8918a71cdbe9 127 **/
Sergunb 0:8918a71cdbe9 128
Sergunb 0:8918a71cdbe9 129 void osResumeAllTasks(void)
Sergunb 0:8918a71cdbe9 130 {
Sergunb 0:8918a71cdbe9 131 }
Sergunb 0:8918a71cdbe9 132
Sergunb 0:8918a71cdbe9 133
Sergunb 0:8918a71cdbe9 134 /**
Sergunb 0:8918a71cdbe9 135 * @brief Create an event object
Sergunb 0:8918a71cdbe9 136 * @param[in] event Pointer to the event object
Sergunb 0:8918a71cdbe9 137 * @return The function returns TRUE if the event object was successfully
Sergunb 0:8918a71cdbe9 138 * created. Otherwise, FALSE is returned
Sergunb 0:8918a71cdbe9 139 **/
Sergunb 0:8918a71cdbe9 140
Sergunb 0:8918a71cdbe9 141 bool_t osCreateEvent(OsEvent *event)
Sergunb 0:8918a71cdbe9 142 {
Sergunb 0:8918a71cdbe9 143 //Force the event to the nonsignaled state
Sergunb 0:8918a71cdbe9 144 *event = FALSE;
Sergunb 0:8918a71cdbe9 145 //Event successfully created
Sergunb 0:8918a71cdbe9 146 return TRUE;
Sergunb 0:8918a71cdbe9 147 }
Sergunb 0:8918a71cdbe9 148
Sergunb 0:8918a71cdbe9 149
Sergunb 0:8918a71cdbe9 150 /**
Sergunb 0:8918a71cdbe9 151 * @brief Delete an event object
Sergunb 0:8918a71cdbe9 152 * @param[in] event Pointer to the event object
Sergunb 0:8918a71cdbe9 153 **/
Sergunb 0:8918a71cdbe9 154
Sergunb 0:8918a71cdbe9 155 void osDeleteEvent(OsEvent *event)
Sergunb 0:8918a71cdbe9 156 {
Sergunb 0:8918a71cdbe9 157 }
Sergunb 0:8918a71cdbe9 158
Sergunb 0:8918a71cdbe9 159
Sergunb 0:8918a71cdbe9 160 /**
Sergunb 0:8918a71cdbe9 161 * @brief Set the specified event object to the signaled state
Sergunb 0:8918a71cdbe9 162 * @param[in] event Pointer to the event object
Sergunb 0:8918a71cdbe9 163 **/
Sergunb 0:8918a71cdbe9 164
Sergunb 0:8918a71cdbe9 165 void osSetEvent(OsEvent *event)
Sergunb 0:8918a71cdbe9 166 {
Sergunb 0:8918a71cdbe9 167 //Set the specified event to the signaled state
Sergunb 0:8918a71cdbe9 168 *event = TRUE;
Sergunb 0:8918a71cdbe9 169 }
Sergunb 0:8918a71cdbe9 170
Sergunb 0:8918a71cdbe9 171
Sergunb 0:8918a71cdbe9 172 /**
Sergunb 0:8918a71cdbe9 173 * @brief Set the specified event object to the nonsignaled state
Sergunb 0:8918a71cdbe9 174 * @param[in] event Pointer to the event object
Sergunb 0:8918a71cdbe9 175 **/
Sergunb 0:8918a71cdbe9 176
Sergunb 0:8918a71cdbe9 177 void osResetEvent(OsEvent *event)
Sergunb 0:8918a71cdbe9 178 {
Sergunb 0:8918a71cdbe9 179 //Force the specified event to the nonsignaled state
Sergunb 0:8918a71cdbe9 180 *event = FALSE;
Sergunb 0:8918a71cdbe9 181 }
Sergunb 0:8918a71cdbe9 182
Sergunb 0:8918a71cdbe9 183
Sergunb 0:8918a71cdbe9 184 /**
Sergunb 0:8918a71cdbe9 185 * @brief Wait until the specified event is in the signaled state
Sergunb 0:8918a71cdbe9 186 * @param[in] event Pointer to the event object
Sergunb 0:8918a71cdbe9 187 * @param[in] timeout Timeout interval
Sergunb 0:8918a71cdbe9 188 * @return The function returns TRUE if the state of the specified object is
Sergunb 0:8918a71cdbe9 189 * signaled. FALSE is returned if the timeout interval elapsed
Sergunb 0:8918a71cdbe9 190 **/
Sergunb 0:8918a71cdbe9 191
Sergunb 0:8918a71cdbe9 192 bool_t osWaitForEvent(OsEvent *event, systime_t timeout)
Sergunb 0:8918a71cdbe9 193 {
Sergunb 0:8918a71cdbe9 194 //Check whether the specified event is set
Sergunb 0:8918a71cdbe9 195 if(*event)
Sergunb 0:8918a71cdbe9 196 {
Sergunb 0:8918a71cdbe9 197 //Clear event
Sergunb 0:8918a71cdbe9 198 *event = FALSE;
Sergunb 0:8918a71cdbe9 199 //The event is in the signaled state
Sergunb 0:8918a71cdbe9 200 return TRUE;
Sergunb 0:8918a71cdbe9 201 }
Sergunb 0:8918a71cdbe9 202 else
Sergunb 0:8918a71cdbe9 203 {
Sergunb 0:8918a71cdbe9 204 //The event is not in the signaled state
Sergunb 0:8918a71cdbe9 205 return FALSE;
Sergunb 0:8918a71cdbe9 206 }
Sergunb 0:8918a71cdbe9 207 }
Sergunb 0:8918a71cdbe9 208
Sergunb 0:8918a71cdbe9 209
Sergunb 0:8918a71cdbe9 210 /**
Sergunb 0:8918a71cdbe9 211 * @brief Set an event object to the signaled state from an interrupt service routine
Sergunb 0:8918a71cdbe9 212 * @param[in] event Pointer to the event object
Sergunb 0:8918a71cdbe9 213 * @return TRUE if setting the event to signaled state caused a task to unblock
Sergunb 0:8918a71cdbe9 214 * and the unblocked task has a priority higher than the currently running task
Sergunb 0:8918a71cdbe9 215 **/
Sergunb 0:8918a71cdbe9 216
Sergunb 0:8918a71cdbe9 217 bool_t osSetEventFromIsr(OsEvent *event)
Sergunb 0:8918a71cdbe9 218 {
Sergunb 0:8918a71cdbe9 219 //Set the specified event to the signaled state
Sergunb 0:8918a71cdbe9 220 *event = TRUE;
Sergunb 0:8918a71cdbe9 221 //A higher priority task has been woken?
Sergunb 0:8918a71cdbe9 222 return FALSE;
Sergunb 0:8918a71cdbe9 223 }
Sergunb 0:8918a71cdbe9 224
Sergunb 0:8918a71cdbe9 225
Sergunb 0:8918a71cdbe9 226 /**
Sergunb 0:8918a71cdbe9 227 * @brief Create a semaphore object
Sergunb 0:8918a71cdbe9 228 * @param[in] semaphore Pointer to the semaphore object
Sergunb 0:8918a71cdbe9 229 * @param[in] count The maximum count for the semaphore object. This value
Sergunb 0:8918a71cdbe9 230 * must be greater than zero
Sergunb 0:8918a71cdbe9 231 * @return The function returns TRUE if the semaphore was successfully
Sergunb 0:8918a71cdbe9 232 * created. Otherwise, FALSE is returned
Sergunb 0:8918a71cdbe9 233 **/
Sergunb 0:8918a71cdbe9 234
Sergunb 0:8918a71cdbe9 235 bool_t osCreateSemaphore(OsSemaphore *semaphore, uint_t count)
Sergunb 0:8918a71cdbe9 236 {
Sergunb 0:8918a71cdbe9 237 //Create a semaphore
Sergunb 0:8918a71cdbe9 238 *semaphore = count;
Sergunb 0:8918a71cdbe9 239 //The semaphore was successfully created
Sergunb 0:8918a71cdbe9 240 return TRUE;
Sergunb 0:8918a71cdbe9 241 }
Sergunb 0:8918a71cdbe9 242
Sergunb 0:8918a71cdbe9 243
Sergunb 0:8918a71cdbe9 244 /**
Sergunb 0:8918a71cdbe9 245 * @brief Delete a semaphore object
Sergunb 0:8918a71cdbe9 246 * @param[in] semaphore Pointer to the semaphore object
Sergunb 0:8918a71cdbe9 247 **/
Sergunb 0:8918a71cdbe9 248
Sergunb 0:8918a71cdbe9 249 void osDeleteSemaphore(OsSemaphore *semaphore)
Sergunb 0:8918a71cdbe9 250 {
Sergunb 0:8918a71cdbe9 251 }
Sergunb 0:8918a71cdbe9 252
Sergunb 0:8918a71cdbe9 253
Sergunb 0:8918a71cdbe9 254 /**
Sergunb 0:8918a71cdbe9 255 * @brief Wait for the specified semaphore to be available
Sergunb 0:8918a71cdbe9 256 * @param[in] semaphore Pointer to the semaphore object
Sergunb 0:8918a71cdbe9 257 * @param[in] timeout Timeout interval
Sergunb 0:8918a71cdbe9 258 * @return The function returns TRUE if the semaphore is available. FALSE is
Sergunb 0:8918a71cdbe9 259 * returned if the timeout interval elapsed
Sergunb 0:8918a71cdbe9 260 **/
Sergunb 0:8918a71cdbe9 261
Sergunb 0:8918a71cdbe9 262 bool_t osWaitForSemaphore(OsSemaphore *semaphore, systime_t timeout)
Sergunb 0:8918a71cdbe9 263 {
Sergunb 0:8918a71cdbe9 264 //Check whether the specified semaphore is available
Sergunb 0:8918a71cdbe9 265 if(*semaphore > 0)
Sergunb 0:8918a71cdbe9 266 {
Sergunb 0:8918a71cdbe9 267 //Decrement semaphore value
Sergunb 0:8918a71cdbe9 268 *semaphore -= 1;
Sergunb 0:8918a71cdbe9 269 //The semaphore is available
Sergunb 0:8918a71cdbe9 270 return TRUE;
Sergunb 0:8918a71cdbe9 271 }
Sergunb 0:8918a71cdbe9 272 else
Sergunb 0:8918a71cdbe9 273 {
Sergunb 0:8918a71cdbe9 274 //The semaphore is not available
Sergunb 0:8918a71cdbe9 275 return FALSE;
Sergunb 0:8918a71cdbe9 276 }
Sergunb 0:8918a71cdbe9 277 }
Sergunb 0:8918a71cdbe9 278
Sergunb 0:8918a71cdbe9 279
Sergunb 0:8918a71cdbe9 280 /**
Sergunb 0:8918a71cdbe9 281 * @brief Release the specified semaphore object
Sergunb 0:8918a71cdbe9 282 * @param[in] semaphore Pointer to the semaphore object
Sergunb 0:8918a71cdbe9 283 **/
Sergunb 0:8918a71cdbe9 284
Sergunb 0:8918a71cdbe9 285 void osReleaseSemaphore(OsSemaphore *semaphore)
Sergunb 0:8918a71cdbe9 286 {
Sergunb 0:8918a71cdbe9 287 //Release the semaphore
Sergunb 0:8918a71cdbe9 288 *semaphore += 1;
Sergunb 0:8918a71cdbe9 289 }
Sergunb 0:8918a71cdbe9 290
Sergunb 0:8918a71cdbe9 291
Sergunb 0:8918a71cdbe9 292 /**
Sergunb 0:8918a71cdbe9 293 * @brief Create a mutex object
Sergunb 0:8918a71cdbe9 294 * @param[in] mutex Pointer to the mutex object
Sergunb 0:8918a71cdbe9 295 * @return The function returns TRUE if the mutex was successfully
Sergunb 0:8918a71cdbe9 296 * created. Otherwise, FALSE is returned
Sergunb 0:8918a71cdbe9 297 **/
Sergunb 0:8918a71cdbe9 298
Sergunb 0:8918a71cdbe9 299 bool_t osCreateMutex(OsMutex *mutex)
Sergunb 0:8918a71cdbe9 300 {
Sergunb 0:8918a71cdbe9 301 //The mutex was successfully created
Sergunb 0:8918a71cdbe9 302 return TRUE;
Sergunb 0:8918a71cdbe9 303 }
Sergunb 0:8918a71cdbe9 304
Sergunb 0:8918a71cdbe9 305
Sergunb 0:8918a71cdbe9 306 /**
Sergunb 0:8918a71cdbe9 307 * @brief Delete a mutex object
Sergunb 0:8918a71cdbe9 308 * @param[in] mutex Pointer to the mutex object
Sergunb 0:8918a71cdbe9 309 **/
Sergunb 0:8918a71cdbe9 310
Sergunb 0:8918a71cdbe9 311 void osDeleteMutex(OsMutex *mutex)
Sergunb 0:8918a71cdbe9 312 {
Sergunb 0:8918a71cdbe9 313 }
Sergunb 0:8918a71cdbe9 314
Sergunb 0:8918a71cdbe9 315
Sergunb 0:8918a71cdbe9 316 /**
Sergunb 0:8918a71cdbe9 317 * @brief Acquire ownership of the specified mutex object
Sergunb 0:8918a71cdbe9 318 * @param[in] mutex Pointer to the mutex object
Sergunb 0:8918a71cdbe9 319 **/
Sergunb 0:8918a71cdbe9 320
Sergunb 0:8918a71cdbe9 321 void osAcquireMutex(OsMutex *mutex)
Sergunb 0:8918a71cdbe9 322 {
Sergunb 0:8918a71cdbe9 323 }
Sergunb 0:8918a71cdbe9 324
Sergunb 0:8918a71cdbe9 325
Sergunb 0:8918a71cdbe9 326 /**
Sergunb 0:8918a71cdbe9 327 * @brief Release ownership of the specified mutex object
Sergunb 0:8918a71cdbe9 328 * @param[in] mutex Pointer to the mutex object
Sergunb 0:8918a71cdbe9 329 **/
Sergunb 0:8918a71cdbe9 330
Sergunb 0:8918a71cdbe9 331 void osReleaseMutex(OsMutex *mutex)
Sergunb 0:8918a71cdbe9 332 {
Sergunb 0:8918a71cdbe9 333 }
Sergunb 0:8918a71cdbe9 334
Sergunb 0:8918a71cdbe9 335
Sergunb 0:8918a71cdbe9 336 /**
Sergunb 0:8918a71cdbe9 337 * @brief Retrieve system time
Sergunb 0:8918a71cdbe9 338 * @return Number of milliseconds elapsed since the system was last started
Sergunb 0:8918a71cdbe9 339 **/
Sergunb 0:8918a71cdbe9 340
Sergunb 0:8918a71cdbe9 341 systime_t osGetSystemTime(void)
Sergunb 0:8918a71cdbe9 342 {
Sergunb 0:8918a71cdbe9 343 systime_t time;
Sergunb 0:8918a71cdbe9 344
Sergunb 0:8918a71cdbe9 345 #if defined(__linux__) || defined(__FreeBSD__)
Sergunb 0:8918a71cdbe9 346 struct timeval tv;
Sergunb 0:8918a71cdbe9 347 //Get current time
Sergunb 0:8918a71cdbe9 348 gettimeofday(&tv, NULL);
Sergunb 0:8918a71cdbe9 349 //Convert resulting value to milliseconds
Sergunb 0:8918a71cdbe9 350 time = (tv.tv_sec * 1000) + (tv.tv_usec / 1000);
Sergunb 0:8918a71cdbe9 351 #elif defined(_WIN32)
Sergunb 0:8918a71cdbe9 352 //Get current tick count
Sergunb 0:8918a71cdbe9 353 time = GetTickCount();
Sergunb 0:8918a71cdbe9 354 #else
Sergunb 0:8918a71cdbe9 355 //Get current tick count
Sergunb 0:8918a71cdbe9 356 time = systemTicks;
Sergunb 0:8918a71cdbe9 357 #endif
Sergunb 0:8918a71cdbe9 358
Sergunb 0:8918a71cdbe9 359 //Convert system ticks to milliseconds
Sergunb 0:8918a71cdbe9 360 return OS_SYSTICKS_TO_MS(time);
Sergunb 0:8918a71cdbe9 361 }
Sergunb 0:8918a71cdbe9 362
Sergunb 0:8918a71cdbe9 363
Sergunb 0:8918a71cdbe9 364 /**
Sergunb 0:8918a71cdbe9 365 * @brief Allocate a memory block
Sergunb 0:8918a71cdbe9 366 * @param[in] size Bytes to allocate
Sergunb 0:8918a71cdbe9 367 * @return A pointer to the allocated memory block or NULL if
Sergunb 0:8918a71cdbe9 368 * there is insufficient memory available
Sergunb 0:8918a71cdbe9 369 **/
Sergunb 0:8918a71cdbe9 370
Sergunb 0:8918a71cdbe9 371 void *osAllocMem(size_t size)
Sergunb 0:8918a71cdbe9 372 {
Sergunb 0:8918a71cdbe9 373 void *p;
Sergunb 0:8918a71cdbe9 374
Sergunb 0:8918a71cdbe9 375 //Allocate a memory block
Sergunb 0:8918a71cdbe9 376 p = malloc(size);
Sergunb 0:8918a71cdbe9 377
Sergunb 0:8918a71cdbe9 378 //Debug message
Sergunb 0:8918a71cdbe9 379 TRACE_DEBUG("Allocating %" PRIuSIZE " bytes at 0x%08" PRIXPTR "\r\n", size, (uintptr_t) p);
Sergunb 0:8918a71cdbe9 380
Sergunb 0:8918a71cdbe9 381 //Return a pointer to the newly allocated memory block
Sergunb 0:8918a71cdbe9 382 return p;
Sergunb 0:8918a71cdbe9 383 }
Sergunb 0:8918a71cdbe9 384
Sergunb 0:8918a71cdbe9 385
Sergunb 0:8918a71cdbe9 386 /**
Sergunb 0:8918a71cdbe9 387 * @brief Release a previously allocated memory block
Sergunb 0:8918a71cdbe9 388 * @param[in] p Previously allocated memory block to be freed
Sergunb 0:8918a71cdbe9 389 **/
Sergunb 0:8918a71cdbe9 390
Sergunb 0:8918a71cdbe9 391 void osFreeMem(void *p)
Sergunb 0:8918a71cdbe9 392 {
Sergunb 0:8918a71cdbe9 393 //Make sure the pointer is valid
Sergunb 0:8918a71cdbe9 394 if(p != NULL)
Sergunb 0:8918a71cdbe9 395 {
Sergunb 0:8918a71cdbe9 396 //Debug message
Sergunb 0:8918a71cdbe9 397 TRACE_DEBUG("Freeing memory at 0x%08" PRIXPTR "\r\n", (uintptr_t) p);
Sergunb 0:8918a71cdbe9 398
Sergunb 0:8918a71cdbe9 399 //Free memory block
Sergunb 0:8918a71cdbe9 400 free(p);
Sergunb 0:8918a71cdbe9 401 }
Sergunb 0:8918a71cdbe9 402 }
Sergunb 0:8918a71cdbe9 403