timers.c.017i.build_ssa_passes 26 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370
  1. vTimerSetTimerNumber (struct tmrTimerControl * xTimer, UBaseType_t uxTimerNumber)
  2. {
  3. <bb 2> :
  4. # DEBUG BEGIN_STMT
  5. MEM[(struct Timer_t *)xTimer].uxTimerNumber = uxTimerNumber;
  6. return;
  7. }
  8. uxTimerGetTimerNumber (struct tmrTimerControl * xTimer)
  9. {
  10. UBaseType_t D.6791;
  11. <bb 2> :
  12. # DEBUG BEGIN_STMT
  13. D.6791 = MEM[(struct Timer_t *)xTimer].uxTimerNumber;
  14. return D.6791;
  15. }
  16. xTimerPendFunctionCall (void (*PendedFunction_t) (void *, uint32_t) xFunctionToPend, void * pvParameter1, uint32_t ulParameter2, TickType_t xTicksToWait)
  17. {
  18. BaseType_t xReturn;
  19. struct DaemonTaskMessage_t xMessage;
  20. BaseType_t D.6788;
  21. <bb 2> :
  22. # DEBUG BEGIN_STMT
  23. # DEBUG BEGIN_STMT
  24. # DEBUG BEGIN_STMT
  25. xTimerQueue.26_1 = xTimerQueue;
  26. if (xTimerQueue.26_1 == 0B)
  27. goto <bb 3>; [INV]
  28. else
  29. goto <bb 5>; [INV]
  30. <bb 3> :
  31. # DEBUG BEGIN_STMT
  32. vPortRaiseBASEPRI ();
  33. <bb 4> :
  34. # DEBUG BEGIN_STMT
  35. # DEBUG BEGIN_STMT
  36. # DEBUG BEGIN_STMT
  37. goto <bb 4>; [INV]
  38. <bb 5> :
  39. # DEBUG BEGIN_STMT
  40. # DEBUG BEGIN_STMT
  41. xMessage.xMessageID = -1;
  42. # DEBUG BEGIN_STMT
  43. xMessage.u.xCallbackParameters.pxCallbackFunction = xFunctionToPend;
  44. # DEBUG BEGIN_STMT
  45. xMessage.u.xCallbackParameters.pvParameter1 = pvParameter1;
  46. # DEBUG BEGIN_STMT
  47. xMessage.u.xCallbackParameters.ulParameter2 = ulParameter2;
  48. # DEBUG BEGIN_STMT
  49. xTimerQueue.27_2 = xTimerQueue;
  50. xReturn = xQueueGenericSend (xTimerQueue.27_2, &xMessage, xTicksToWait, 0);
  51. # DEBUG BEGIN_STMT
  52. # DEBUG BEGIN_STMT
  53. D.6788 = xReturn;
  54. xMessage = {CLOBBER};
  55. return D.6788;
  56. }
  57. xTimerPendFunctionCallFromISR (void (*PendedFunction_t) (void *, uint32_t) xFunctionToPend, void * pvParameter1, uint32_t ulParameter2, BaseType_t * pxHigherPriorityTaskWoken)
  58. {
  59. BaseType_t xReturn;
  60. struct DaemonTaskMessage_t xMessage;
  61. BaseType_t D.6783;
  62. <bb 2> :
  63. # DEBUG BEGIN_STMT
  64. # DEBUG BEGIN_STMT
  65. # DEBUG BEGIN_STMT
  66. xMessage.xMessageID = -2;
  67. # DEBUG BEGIN_STMT
  68. xMessage.u.xCallbackParameters.pxCallbackFunction = xFunctionToPend;
  69. # DEBUG BEGIN_STMT
  70. xMessage.u.xCallbackParameters.pvParameter1 = pvParameter1;
  71. # DEBUG BEGIN_STMT
  72. xMessage.u.xCallbackParameters.ulParameter2 = ulParameter2;
  73. # DEBUG BEGIN_STMT
  74. xTimerQueue.25_1 = xTimerQueue;
  75. xReturn = xQueueGenericSendFromISR (xTimerQueue.25_1, &xMessage, pxHigherPriorityTaskWoken, 0);
  76. # DEBUG BEGIN_STMT
  77. # DEBUG BEGIN_STMT
  78. D.6783 = xReturn;
  79. xMessage = {CLOBBER};
  80. return D.6783;
  81. }
  82. vTimerSetTimerID (struct tmrTimerControl * xTimer, void * pvNewID)
  83. {
  84. struct Timer_t * const pxTimer;
  85. <bb 2> :
  86. # DEBUG BEGIN_STMT
  87. pxTimer = xTimer;
  88. # DEBUG BEGIN_STMT
  89. if (xTimer == 0B)
  90. goto <bb 3>; [INV]
  91. else
  92. goto <bb 5>; [INV]
  93. <bb 3> :
  94. # DEBUG BEGIN_STMT
  95. vPortRaiseBASEPRI ();
  96. <bb 4> :
  97. # DEBUG BEGIN_STMT
  98. # DEBUG BEGIN_STMT
  99. # DEBUG BEGIN_STMT
  100. goto <bb 4>; [INV]
  101. <bb 5> :
  102. # DEBUG BEGIN_STMT
  103. # DEBUG BEGIN_STMT
  104. vPortEnterCritical ();
  105. # DEBUG BEGIN_STMT
  106. pxTimer->pvTimerID = pvNewID;
  107. # DEBUG BEGIN_STMT
  108. vPortExitCritical ();
  109. return;
  110. }
  111. pvTimerGetTimerID (struct tmrTimerControl * const xTimer)
  112. {
  113. void * pvReturn;
  114. struct Timer_t * const pxTimer;
  115. void * D.6779;
  116. <bb 2> :
  117. # DEBUG BEGIN_STMT
  118. pxTimer = xTimer;
  119. # DEBUG BEGIN_STMT
  120. # DEBUG BEGIN_STMT
  121. if (xTimer == 0B)
  122. goto <bb 3>; [INV]
  123. else
  124. goto <bb 5>; [INV]
  125. <bb 3> :
  126. # DEBUG BEGIN_STMT
  127. vPortRaiseBASEPRI ();
  128. <bb 4> :
  129. # DEBUG BEGIN_STMT
  130. # DEBUG BEGIN_STMT
  131. # DEBUG BEGIN_STMT
  132. goto <bb 4>; [INV]
  133. <bb 5> :
  134. # DEBUG BEGIN_STMT
  135. # DEBUG BEGIN_STMT
  136. vPortEnterCritical ();
  137. # DEBUG BEGIN_STMT
  138. pvReturn = pxTimer->pvTimerID;
  139. # DEBUG BEGIN_STMT
  140. vPortExitCritical ();
  141. # DEBUG BEGIN_STMT
  142. D.6779 = pvReturn;
  143. return D.6779;
  144. }
  145. xTimerIsTimerActive (struct tmrTimerControl * xTimer)
  146. {
  147. struct Timer_t * pxTimer;
  148. BaseType_t xReturn;
  149. BaseType_t D.6775;
  150. <bb 2> :
  151. # DEBUG BEGIN_STMT
  152. # DEBUG BEGIN_STMT
  153. pxTimer = xTimer;
  154. # DEBUG BEGIN_STMT
  155. if (xTimer == 0B)
  156. goto <bb 3>; [INV]
  157. else
  158. goto <bb 5>; [INV]
  159. <bb 3> :
  160. # DEBUG BEGIN_STMT
  161. vPortRaiseBASEPRI ();
  162. <bb 4> :
  163. # DEBUG BEGIN_STMT
  164. # DEBUG BEGIN_STMT
  165. # DEBUG BEGIN_STMT
  166. goto <bb 4>; [INV]
  167. <bb 5> :
  168. # DEBUG BEGIN_STMT
  169. # DEBUG BEGIN_STMT
  170. vPortEnterCritical ();
  171. # DEBUG BEGIN_STMT
  172. _1 = pxTimer->ucStatus;
  173. _2 = (int) _1;
  174. _3 = _2 & 1;
  175. if (_3 == 0)
  176. goto <bb 6>; [INV]
  177. else
  178. goto <bb 7>; [INV]
  179. <bb 6> :
  180. # DEBUG BEGIN_STMT
  181. xReturn = 0;
  182. goto <bb 8>; [INV]
  183. <bb 7> :
  184. # DEBUG BEGIN_STMT
  185. xReturn = 1;
  186. <bb 8> :
  187. # DEBUG BEGIN_STMT
  188. vPortExitCritical ();
  189. # DEBUG BEGIN_STMT
  190. D.6775 = xReturn;
  191. return D.6775;
  192. }
  193. prvCheckForValidListAndQueue ()
  194. {
  195. <bb 2> :
  196. # DEBUG BEGIN_STMT
  197. vPortEnterCritical ();
  198. # DEBUG BEGIN_STMT
  199. xTimerQueue.17_1 = xTimerQueue;
  200. if (xTimerQueue.17_1 == 0B)
  201. goto <bb 3>; [INV]
  202. else
  203. goto <bb 5>; [INV]
  204. <bb 3> :
  205. # DEBUG BEGIN_STMT
  206. vListInitialise (&xActiveTimerList1);
  207. # DEBUG BEGIN_STMT
  208. vListInitialise (&xActiveTimerList2);
  209. # DEBUG BEGIN_STMT
  210. pxCurrentTimerList = &xActiveTimerList1;
  211. # DEBUG BEGIN_STMT
  212. pxOverflowTimerList = &xActiveTimerList2;
  213. # DEBUG BEGIN_STMT
  214. _2 = xQueueGenericCreate (10, 16, 0);
  215. xTimerQueue = _2;
  216. # DEBUG BEGIN_STMT
  217. xTimerQueue.18_3 = xTimerQueue;
  218. if (xTimerQueue.18_3 != 0B)
  219. goto <bb 4>; [INV]
  220. else
  221. goto <bb 5>; [INV]
  222. <bb 4> :
  223. # DEBUG BEGIN_STMT
  224. xTimerQueue.19_4 = xTimerQueue;
  225. vQueueAddToRegistry (xTimerQueue.19_4, "TmrQ");
  226. <bb 5> :
  227. # DEBUG BEGIN_STMT
  228. # DEBUG BEGIN_STMT
  229. vPortExitCritical ();
  230. return;
  231. }
  232. prvSwitchTimerLists ()
  233. {
  234. struct List_t * pxTemp;
  235. TickType_t xNextExpireTime;
  236. <bb 2> :
  237. # DEBUG BEGIN_STMT
  238. # DEBUG BEGIN_STMT
  239. # DEBUG BEGIN_STMT
  240. goto <bb 4>; [INV]
  241. <bb 3> :
  242. # DEBUG BEGIN_STMT
  243. pxCurrentTimerList.10_1 = pxCurrentTimerList;
  244. _2 = pxCurrentTimerList.10_1->xListEnd.pxNext;
  245. xNextExpireTime = _2->xItemValue;
  246. # DEBUG BEGIN_STMT
  247. prvProcessExpiredTimer (xNextExpireTime, 4294967295);
  248. <bb 4> :
  249. # DEBUG BEGIN_STMT
  250. pxCurrentTimerList.11_3 = pxCurrentTimerList;
  251. _4 = pxCurrentTimerList.11_3->uxNumberOfItems;
  252. if (_4 != 0)
  253. goto <bb 3>; [INV]
  254. else
  255. goto <bb 5>; [INV]
  256. <bb 5> :
  257. # DEBUG BEGIN_STMT
  258. pxTemp = pxCurrentTimerList;
  259. # DEBUG BEGIN_STMT
  260. pxOverflowTimerList.12_5 = pxOverflowTimerList;
  261. pxCurrentTimerList = pxOverflowTimerList.12_5;
  262. # DEBUG BEGIN_STMT
  263. pxOverflowTimerList = pxTemp;
  264. return;
  265. }
  266. prvProcessReceivedCommands ()
  267. {
  268. const struct CallbackParameters_t * const pxCallback;
  269. TickType_t xTimeNow;
  270. BaseType_t xTimerListsWereSwitched;
  271. struct Timer_t * pxTimer;
  272. struct DaemonTaskMessage_t xMessage;
  273. <bb 2> :
  274. # DEBUG BEGIN_STMT
  275. # DEBUG BEGIN_STMT
  276. # DEBUG BEGIN_STMT
  277. # DEBUG BEGIN_STMT
  278. # DEBUG BEGIN_STMT
  279. goto <bb 25>; [INV]
  280. <bb 3> :
  281. # DEBUG BEGIN_STMT
  282. _1 = xMessage.xMessageID;
  283. if (_1 < 0)
  284. goto <bb 4>; [INV]
  285. else
  286. goto <bb 8>; [INV]
  287. <bb 4> :
  288. # DEBUG BEGIN_STMT
  289. pxCallback = &xMessage.u.xCallbackParameters;
  290. # DEBUG BEGIN_STMT
  291. if (pxCallback == 0B)
  292. goto <bb 5>; [INV]
  293. else
  294. goto <bb 7>; [INV]
  295. <bb 5> :
  296. # DEBUG BEGIN_STMT
  297. vPortRaiseBASEPRI ();
  298. <bb 6> :
  299. # DEBUG BEGIN_STMT
  300. # DEBUG BEGIN_STMT
  301. # DEBUG BEGIN_STMT
  302. goto <bb 6>; [INV]
  303. <bb 7> :
  304. # DEBUG BEGIN_STMT
  305. # DEBUG BEGIN_STMT
  306. _2 = pxCallback->pxCallbackFunction;
  307. _3 = pxCallback->pvParameter1;
  308. _4 = pxCallback->ulParameter2;
  309. _2 (_3, _4);
  310. <bb 8> :
  311. # DEBUG BEGIN_STMT
  312. # DEBUG BEGIN_STMT
  313. _5 = xMessage.xMessageID;
  314. if (_5 >= 0)
  315. goto <bb 9>; [INV]
  316. else
  317. goto <bb 25>; [INV]
  318. <bb 9> :
  319. # DEBUG BEGIN_STMT
  320. pxTimer = xMessage.u.xTimerParameters.pxTimer;
  321. # DEBUG BEGIN_STMT
  322. _6 = pxTimer->xTimerListItem.pvContainer;
  323. if (_6 != 0B)
  324. goto <bb 10>; [INV]
  325. else
  326. goto <bb 11>; [INV]
  327. <bb 10> :
  328. # DEBUG BEGIN_STMT
  329. _7 = &pxTimer->xTimerListItem;
  330. uxListRemove (_7);
  331. <bb 11> :
  332. # DEBUG BEGIN_STMT
  333. # DEBUG BEGIN_STMT
  334. # DEBUG BEGIN_STMT
  335. xTimeNow = prvSampleTimeNow (&xTimerListsWereSwitched);
  336. # DEBUG BEGIN_STMT
  337. _8 = xMessage.xMessageID;
  338. switch (_8) <default: <L37> [INV], case 1 ... 2: <L11> [INV], case 3: <L21> [INV], case 4: <L23> [INV], case 5: <L28> [INV], case 6 ... 7: <L11> [INV], case 8: <L21> [INV], case 9: <L23> [INV]>
  339. <bb 12> :
  340. <L11>:
  341. # DEBUG BEGIN_STMT
  342. _9 = pxTimer->ucStatus;
  343. _10 = _9 | 1;
  344. pxTimer->ucStatus = _10;
  345. # DEBUG BEGIN_STMT
  346. _11 = xMessage.u.xTimerParameters.xMessageValue;
  347. _12 = pxTimer->xTimerPeriodInTicks;
  348. _13 = _11 + _12;
  349. _14 = xMessage.u.xTimerParameters.xMessageValue;
  350. _15 = prvInsertTimerInActiveList (pxTimer, _13, xTimeNow, _14);
  351. if (_15 != 0)
  352. goto <bb 13>; [INV]
  353. else
  354. goto <bb 25>; [INV]
  355. <bb 13> :
  356. # DEBUG BEGIN_STMT
  357. _16 = pxTimer->ucStatus;
  358. _17 = (int) _16;
  359. _18 = _17 & 4;
  360. if (_18 != 0)
  361. goto <bb 14>; [INV]
  362. else
  363. goto <bb 15>; [INV]
  364. <bb 14> :
  365. # DEBUG BEGIN_STMT
  366. _19 = xMessage.u.xTimerParameters.xMessageValue;
  367. _20 = pxTimer->xTimerPeriodInTicks;
  368. _21 = _19 + _20;
  369. prvReloadTimer (pxTimer, _21, xTimeNow);
  370. goto <bb 16>; [INV]
  371. <bb 15> :
  372. # DEBUG BEGIN_STMT
  373. _22 = pxTimer->ucStatus;
  374. _23 = _22 & 254;
  375. pxTimer->ucStatus = _23;
  376. <bb 16> :
  377. # DEBUG BEGIN_STMT
  378. # DEBUG BEGIN_STMT
  379. _24 = pxTimer->pxCallbackFunction;
  380. _24 (pxTimer);
  381. goto <bb 25>; [INV]
  382. <bb 17> :
  383. <L21>:
  384. # DEBUG BEGIN_STMT
  385. _25 = pxTimer->ucStatus;
  386. _26 = _25 & 254;
  387. pxTimer->ucStatus = _26;
  388. # DEBUG BEGIN_STMT
  389. goto <bb 25>; [INV]
  390. <bb 18> :
  391. <L23>:
  392. # DEBUG BEGIN_STMT
  393. _27 = pxTimer->ucStatus;
  394. _28 = _27 | 1;
  395. pxTimer->ucStatus = _28;
  396. # DEBUG BEGIN_STMT
  397. _29 = xMessage.u.xTimerParameters.xMessageValue;
  398. pxTimer->xTimerPeriodInTicks = _29;
  399. # DEBUG BEGIN_STMT
  400. _30 = pxTimer->xTimerPeriodInTicks;
  401. if (_30 == 0)
  402. goto <bb 19>; [INV]
  403. else
  404. goto <bb 21>; [INV]
  405. <bb 19> :
  406. # DEBUG BEGIN_STMT
  407. vPortRaiseBASEPRI ();
  408. <bb 20> :
  409. # DEBUG BEGIN_STMT
  410. # DEBUG BEGIN_STMT
  411. # DEBUG BEGIN_STMT
  412. goto <bb 20>; [INV]
  413. <bb 21> :
  414. # DEBUG BEGIN_STMT
  415. # DEBUG BEGIN_STMT
  416. _31 = pxTimer->xTimerPeriodInTicks;
  417. _32 = xTimeNow + _31;
  418. prvInsertTimerInActiveList (pxTimer, _32, xTimeNow, xTimeNow);
  419. # DEBUG BEGIN_STMT
  420. goto <bb 25>; [INV]
  421. <bb 22> :
  422. <L28>:
  423. # DEBUG BEGIN_STMT
  424. _33 = pxTimer->ucStatus;
  425. _34 = (int) _33;
  426. _35 = _34 & 2;
  427. if (_35 == 0)
  428. goto <bb 23>; [INV]
  429. else
  430. goto <bb 24>; [INV]
  431. <bb 23> :
  432. # DEBUG BEGIN_STMT
  433. vPortFree (pxTimer);
  434. goto <bb 25>; [INV]
  435. <bb 24> :
  436. # DEBUG BEGIN_STMT
  437. _36 = pxTimer->ucStatus;
  438. _37 = _36 & 254;
  439. pxTimer->ucStatus = _37;
  440. <bb 25> :
  441. <L37>:
  442. # DEBUG BEGIN_STMT
  443. xTimerQueue.16_38 = xTimerQueue;
  444. _39 = xQueueReceive (xTimerQueue.16_38, &xMessage, 0);
  445. if (_39 != 0)
  446. goto <bb 3>; [INV]
  447. else
  448. goto <bb 26>; [INV]
  449. <bb 26> :
  450. xMessage = {CLOBBER};
  451. xTimerListsWereSwitched = {CLOBBER};
  452. return;
  453. }
  454. prvInsertTimerInActiveList (struct Timer_t * const pxTimer, const TickType_t xNextExpiryTime, const TickType_t xTimeNow, const TickType_t xCommandTime)
  455. {
  456. BaseType_t xProcessTimerNow;
  457. BaseType_t D.6690;
  458. <bb 2> :
  459. # DEBUG BEGIN_STMT
  460. xProcessTimerNow = 0;
  461. # DEBUG BEGIN_STMT
  462. pxTimer->xTimerListItem.xItemValue = xNextExpiryTime;
  463. # DEBUG BEGIN_STMT
  464. pxTimer->xTimerListItem.pvOwner = pxTimer;
  465. # DEBUG BEGIN_STMT
  466. if (xNextExpiryTime <= xTimeNow)
  467. goto <bb 3>; [INV]
  468. else
  469. goto <bb 6>; [INV]
  470. <bb 3> :
  471. # DEBUG BEGIN_STMT
  472. _1 = xTimeNow - xCommandTime;
  473. _2 = pxTimer->xTimerPeriodInTicks;
  474. if (_1 >= _2)
  475. goto <bb 4>; [INV]
  476. else
  477. goto <bb 5>; [INV]
  478. <bb 4> :
  479. # DEBUG BEGIN_STMT
  480. xProcessTimerNow = 1;
  481. goto <bb 10>; [INV]
  482. <bb 5> :
  483. # DEBUG BEGIN_STMT
  484. pxOverflowTimerList.14_3 = pxOverflowTimerList;
  485. _4 = &pxTimer->xTimerListItem;
  486. vListInsert (pxOverflowTimerList.14_3, _4);
  487. goto <bb 10>; [INV]
  488. <bb 6> :
  489. # DEBUG BEGIN_STMT
  490. if (xTimeNow < xCommandTime)
  491. goto <bb 7>; [INV]
  492. else
  493. goto <bb 9>; [INV]
  494. <bb 7> :
  495. if (xNextExpiryTime >= xCommandTime)
  496. goto <bb 8>; [INV]
  497. else
  498. goto <bb 9>; [INV]
  499. <bb 8> :
  500. # DEBUG BEGIN_STMT
  501. xProcessTimerNow = 1;
  502. goto <bb 10>; [INV]
  503. <bb 9> :
  504. # DEBUG BEGIN_STMT
  505. pxCurrentTimerList.15_5 = pxCurrentTimerList;
  506. _6 = &pxTimer->xTimerListItem;
  507. vListInsert (pxCurrentTimerList.15_5, _6);
  508. <bb 10> :
  509. # DEBUG BEGIN_STMT
  510. D.6690 = xProcessTimerNow;
  511. return D.6690;
  512. }
  513. prvSampleTimeNow (BaseType_t * const pxTimerListsWereSwitched)
  514. {
  515. static TickType_t xLastTime = 0;
  516. TickType_t xTimeNow;
  517. TickType_t D.6675;
  518. <bb 2> :
  519. # DEBUG BEGIN_STMT
  520. # DEBUG BEGIN_STMT
  521. # DEBUG BEGIN_STMT
  522. xTimeNow = xTaskGetTickCount ();
  523. # DEBUG BEGIN_STMT
  524. xLastTime.9_1 = xLastTime;
  525. if (xTimeNow < xLastTime.9_1)
  526. goto <bb 3>; [INV]
  527. else
  528. goto <bb 4>; [INV]
  529. <bb 3> :
  530. # DEBUG BEGIN_STMT
  531. prvSwitchTimerLists ();
  532. # DEBUG BEGIN_STMT
  533. *pxTimerListsWereSwitched = 1;
  534. goto <bb 5>; [INV]
  535. <bb 4> :
  536. # DEBUG BEGIN_STMT
  537. *pxTimerListsWereSwitched = 0;
  538. <bb 5> :
  539. # DEBUG BEGIN_STMT
  540. xLastTime = xTimeNow;
  541. # DEBUG BEGIN_STMT
  542. D.6675 = xTimeNow;
  543. return D.6675;
  544. }
  545. prvGetNextExpireTime (BaseType_t * const pxListWasEmpty)
  546. {
  547. TickType_t xNextExpireTime;
  548. TickType_t D.6654;
  549. long int iftmp.2;
  550. <bb 2> :
  551. # DEBUG BEGIN_STMT
  552. # DEBUG BEGIN_STMT
  553. pxCurrentTimerList.3_1 = pxCurrentTimerList;
  554. _2 = pxCurrentTimerList.3_1->uxNumberOfItems;
  555. if (_2 == 0)
  556. goto <bb 3>; [INV]
  557. else
  558. goto <bb 4>; [INV]
  559. <bb 3> :
  560. iftmp.2 = 1;
  561. goto <bb 5>; [INV]
  562. <bb 4> :
  563. iftmp.2 = 0;
  564. <bb 5> :
  565. *pxListWasEmpty = iftmp.2;
  566. # DEBUG BEGIN_STMT
  567. _3 = *pxListWasEmpty;
  568. if (_3 == 0)
  569. goto <bb 6>; [INV]
  570. else
  571. goto <bb 7>; [INV]
  572. <bb 6> :
  573. # DEBUG BEGIN_STMT
  574. pxCurrentTimerList.4_4 = pxCurrentTimerList;
  575. _5 = pxCurrentTimerList.4_4->xListEnd.pxNext;
  576. xNextExpireTime = _5->xItemValue;
  577. goto <bb 8>; [INV]
  578. <bb 7> :
  579. # DEBUG BEGIN_STMT
  580. xNextExpireTime = 0;
  581. <bb 8> :
  582. # DEBUG BEGIN_STMT
  583. D.6654 = xNextExpireTime;
  584. return D.6654;
  585. }
  586. prvProcessTimerOrBlockTask (const TickType_t xNextExpireTime, BaseType_t xListWasEmpty)
  587. {
  588. BaseType_t xTimerListsWereSwitched;
  589. TickType_t xTimeNow;
  590. long int iftmp.6;
  591. <bb 2> :
  592. # DEBUG BEGIN_STMT
  593. # DEBUG BEGIN_STMT
  594. # DEBUG BEGIN_STMT
  595. vTaskSuspendAll ();
  596. # DEBUG BEGIN_STMT
  597. xTimeNow = prvSampleTimeNow (&xTimerListsWereSwitched);
  598. # DEBUG BEGIN_STMT
  599. xTimerListsWereSwitched.5_1 = xTimerListsWereSwitched;
  600. if (xTimerListsWereSwitched.5_1 == 0)
  601. goto <bb 3>; [INV]
  602. else
  603. goto <bb 13>; [INV]
  604. <bb 3> :
  605. # DEBUG BEGIN_STMT
  606. if (xListWasEmpty == 0)
  607. goto <bb 4>; [INV]
  608. else
  609. goto <bb 6>; [INV]
  610. <bb 4> :
  611. if (xNextExpireTime <= xTimeNow)
  612. goto <bb 5>; [INV]
  613. else
  614. goto <bb 6>; [INV]
  615. <bb 5> :
  616. # DEBUG BEGIN_STMT
  617. xTaskResumeAll ();
  618. # DEBUG BEGIN_STMT
  619. prvProcessExpiredTimer (xNextExpireTime, xTimeNow);
  620. goto <bb 14>; [INV]
  621. <bb 6> :
  622. # DEBUG BEGIN_STMT
  623. if (xListWasEmpty != 0)
  624. goto <bb 7>; [INV]
  625. else
  626. goto <bb 11>; [INV]
  627. <bb 7> :
  628. # DEBUG BEGIN_STMT
  629. pxOverflowTimerList.7_2 = pxOverflowTimerList;
  630. _3 = pxOverflowTimerList.7_2->uxNumberOfItems;
  631. if (_3 == 0)
  632. goto <bb 8>; [INV]
  633. else
  634. goto <bb 9>; [INV]
  635. <bb 8> :
  636. iftmp.6 = 1;
  637. goto <bb 10>; [INV]
  638. <bb 9> :
  639. iftmp.6 = 0;
  640. <bb 10> :
  641. xListWasEmpty = iftmp.6;
  642. <bb 11> :
  643. # DEBUG BEGIN_STMT
  644. xTimerQueue.8_4 = xTimerQueue;
  645. _5 = xNextExpireTime - xTimeNow;
  646. vQueueWaitForMessageRestricted (xTimerQueue.8_4, _5, xListWasEmpty);
  647. # DEBUG BEGIN_STMT
  648. _6 = xTaskResumeAll ();
  649. if (_6 == 0)
  650. goto <bb 12>; [INV]
  651. else
  652. goto <bb 14>; [INV]
  653. <bb 12> :
  654. # DEBUG BEGIN_STMT
  655. _7 = 3758157060B;
  656. *_7 = 268435456;
  657. # DEBUG BEGIN_STMT
  658. __asm__ __volatile__("dsb" : : : "memory");
  659. # DEBUG BEGIN_STMT
  660. __asm__ __volatile__("isb");
  661. # DEBUG BEGIN_STMT
  662. goto <bb 14>; [INV]
  663. <bb 13> :
  664. # DEBUG BEGIN_STMT
  665. xTaskResumeAll ();
  666. <bb 14> :
  667. xTimerListsWereSwitched = {CLOBBER};
  668. return;
  669. }
  670. prvTimerTask (void * pvParameters)
  671. {
  672. BaseType_t xListWasEmpty;
  673. TickType_t xNextExpireTime;
  674. <bb 2> :
  675. # DEBUG BEGIN_STMT
  676. # DEBUG BEGIN_STMT
  677. # DEBUG BEGIN_STMT
  678. # DEBUG BEGIN_STMT
  679. # DEBUG BEGIN_STMT
  680. xNextExpireTime = prvGetNextExpireTime (&xListWasEmpty);
  681. # DEBUG BEGIN_STMT
  682. xListWasEmpty.1_1 = xListWasEmpty;
  683. prvProcessTimerOrBlockTask (xNextExpireTime, xListWasEmpty.1_1);
  684. # DEBUG BEGIN_STMT
  685. prvProcessReceivedCommands ();
  686. # DEBUG BEGIN_STMT
  687. goto <bb 2>; [INV]
  688. }
  689. prvProcessExpiredTimer (const TickType_t xNextExpireTime, const TickType_t xTimeNow)
  690. {
  691. struct Timer_t * const pxTimer;
  692. <bb 2> :
  693. # DEBUG BEGIN_STMT
  694. pxCurrentTimerList.13_1 = pxCurrentTimerList;
  695. _2 = pxCurrentTimerList.13_1->xListEnd.pxNext;
  696. pxTimer = _2->pvOwner;
  697. # DEBUG BEGIN_STMT
  698. _3 = &pxTimer->xTimerListItem;
  699. uxListRemove (_3);
  700. # DEBUG BEGIN_STMT
  701. _4 = pxTimer->ucStatus;
  702. _5 = (int) _4;
  703. _6 = _5 & 4;
  704. if (_6 != 0)
  705. goto <bb 3>; [INV]
  706. else
  707. goto <bb 4>; [INV]
  708. <bb 3> :
  709. # DEBUG BEGIN_STMT
  710. prvReloadTimer (pxTimer, xNextExpireTime, xTimeNow);
  711. goto <bb 5>; [INV]
  712. <bb 4> :
  713. # DEBUG BEGIN_STMT
  714. _7 = pxTimer->ucStatus;
  715. _8 = _7 & 254;
  716. pxTimer->ucStatus = _8;
  717. <bb 5> :
  718. # DEBUG BEGIN_STMT
  719. # DEBUG BEGIN_STMT
  720. _9 = pxTimer->pxCallbackFunction;
  721. _9 (pxTimer);
  722. return;
  723. }
  724. prvReloadTimer (struct Timer_t * const pxTimer, TickType_t xExpiredTime, const TickType_t xTimeNow)
  725. {
  726. <bb 2> :
  727. # DEBUG BEGIN_STMT
  728. goto <bb 4>; [INV]
  729. <bb 3> :
  730. # DEBUG BEGIN_STMT
  731. _1 = pxTimer->xTimerPeriodInTicks;
  732. xExpiredTime = xExpiredTime + _1;
  733. # DEBUG BEGIN_STMT
  734. # DEBUG BEGIN_STMT
  735. _2 = pxTimer->pxCallbackFunction;
  736. _2 (pxTimer);
  737. <bb 4> :
  738. # DEBUG BEGIN_STMT
  739. _3 = pxTimer->xTimerPeriodInTicks;
  740. _4 = xExpiredTime + _3;
  741. _5 = prvInsertTimerInActiveList (pxTimer, _4, xTimeNow, xExpiredTime);
  742. if (_5 != 0)
  743. goto <bb 3>; [INV]
  744. else
  745. goto <bb 5>; [INV]
  746. <bb 5> :
  747. return;
  748. }
  749. pcTimerGetName (struct tmrTimerControl * xTimer)
  750. {
  751. struct Timer_t * pxTimer;
  752. const char * D.6768;
  753. <bb 2> :
  754. # DEBUG BEGIN_STMT
  755. pxTimer = xTimer;
  756. # DEBUG BEGIN_STMT
  757. if (xTimer == 0B)
  758. goto <bb 3>; [INV]
  759. else
  760. goto <bb 5>; [INV]
  761. <bb 3> :
  762. # DEBUG BEGIN_STMT
  763. vPortRaiseBASEPRI ();
  764. <bb 4> :
  765. # DEBUG BEGIN_STMT
  766. # DEBUG BEGIN_STMT
  767. # DEBUG BEGIN_STMT
  768. goto <bb 4>; [INV]
  769. <bb 5> :
  770. # DEBUG BEGIN_STMT
  771. # DEBUG BEGIN_STMT
  772. D.6768 = pxTimer->pcTimerName;
  773. return D.6768;
  774. }
  775. xTimerGetExpiryTime (struct tmrTimerControl * xTimer)
  776. {
  777. TickType_t xReturn;
  778. struct Timer_t * pxTimer;
  779. TickType_t D.6764;
  780. <bb 2> :
  781. # DEBUG BEGIN_STMT
  782. pxTimer = xTimer;
  783. # DEBUG BEGIN_STMT
  784. # DEBUG BEGIN_STMT
  785. if (xTimer == 0B)
  786. goto <bb 3>; [INV]
  787. else
  788. goto <bb 5>; [INV]
  789. <bb 3> :
  790. # DEBUG BEGIN_STMT
  791. vPortRaiseBASEPRI ();
  792. <bb 4> :
  793. # DEBUG BEGIN_STMT
  794. # DEBUG BEGIN_STMT
  795. # DEBUG BEGIN_STMT
  796. goto <bb 4>; [INV]
  797. <bb 5> :
  798. # DEBUG BEGIN_STMT
  799. # DEBUG BEGIN_STMT
  800. xReturn = pxTimer->xTimerListItem.xItemValue;
  801. # DEBUG BEGIN_STMT
  802. D.6764 = xReturn;
  803. return D.6764;
  804. }
  805. uxTimerGetReloadMode (struct tmrTimerControl * xTimer)
  806. {
  807. UBaseType_t uxReturn;
  808. struct Timer_t * pxTimer;
  809. UBaseType_t D.6760;
  810. <bb 2> :
  811. # DEBUG BEGIN_STMT
  812. pxTimer = xTimer;
  813. # DEBUG BEGIN_STMT
  814. # DEBUG BEGIN_STMT
  815. if (xTimer == 0B)
  816. goto <bb 3>; [INV]
  817. else
  818. goto <bb 5>; [INV]
  819. <bb 3> :
  820. # DEBUG BEGIN_STMT
  821. vPortRaiseBASEPRI ();
  822. <bb 4> :
  823. # DEBUG BEGIN_STMT
  824. # DEBUG BEGIN_STMT
  825. # DEBUG BEGIN_STMT
  826. goto <bb 4>; [INV]
  827. <bb 5> :
  828. # DEBUG BEGIN_STMT
  829. # DEBUG BEGIN_STMT
  830. vPortEnterCritical ();
  831. # DEBUG BEGIN_STMT
  832. _1 = pxTimer->ucStatus;
  833. _2 = (int) _1;
  834. _3 = _2 & 4;
  835. if (_3 == 0)
  836. goto <bb 6>; [INV]
  837. else
  838. goto <bb 7>; [INV]
  839. <bb 6> :
  840. # DEBUG BEGIN_STMT
  841. uxReturn = 0;
  842. goto <bb 8>; [INV]
  843. <bb 7> :
  844. # DEBUG BEGIN_STMT
  845. uxReturn = 1;
  846. <bb 8> :
  847. # DEBUG BEGIN_STMT
  848. vPortExitCritical ();
  849. # DEBUG BEGIN_STMT
  850. D.6760 = uxReturn;
  851. return D.6760;
  852. }
  853. vTimerSetReloadMode (struct tmrTimerControl * xTimer, const UBaseType_t uxAutoReload)
  854. {
  855. struct Timer_t * pxTimer;
  856. <bb 2> :
  857. # DEBUG BEGIN_STMT
  858. pxTimer = xTimer;
  859. # DEBUG BEGIN_STMT
  860. if (xTimer == 0B)
  861. goto <bb 3>; [INV]
  862. else
  863. goto <bb 5>; [INV]
  864. <bb 3> :
  865. # DEBUG BEGIN_STMT
  866. vPortRaiseBASEPRI ();
  867. <bb 4> :
  868. # DEBUG BEGIN_STMT
  869. # DEBUG BEGIN_STMT
  870. # DEBUG BEGIN_STMT
  871. goto <bb 4>; [INV]
  872. <bb 5> :
  873. # DEBUG BEGIN_STMT
  874. # DEBUG BEGIN_STMT
  875. vPortEnterCritical ();
  876. # DEBUG BEGIN_STMT
  877. if (uxAutoReload != 0)
  878. goto <bb 6>; [INV]
  879. else
  880. goto <bb 7>; [INV]
  881. <bb 6> :
  882. # DEBUG BEGIN_STMT
  883. _1 = pxTimer->ucStatus;
  884. _2 = _1 | 4;
  885. pxTimer->ucStatus = _2;
  886. goto <bb 8>; [INV]
  887. <bb 7> :
  888. # DEBUG BEGIN_STMT
  889. _3 = pxTimer->ucStatus;
  890. _4 = _3 & 251;
  891. pxTimer->ucStatus = _4;
  892. <bb 8> :
  893. # DEBUG BEGIN_STMT
  894. vPortExitCritical ();
  895. return;
  896. }
  897. xTimerGetPeriod (struct tmrTimerControl * xTimer)
  898. {
  899. struct Timer_t * pxTimer;
  900. TickType_t D.6748;
  901. <bb 2> :
  902. # DEBUG BEGIN_STMT
  903. pxTimer = xTimer;
  904. # DEBUG BEGIN_STMT
  905. if (xTimer == 0B)
  906. goto <bb 3>; [INV]
  907. else
  908. goto <bb 5>; [INV]
  909. <bb 3> :
  910. # DEBUG BEGIN_STMT
  911. vPortRaiseBASEPRI ();
  912. <bb 4> :
  913. # DEBUG BEGIN_STMT
  914. # DEBUG BEGIN_STMT
  915. # DEBUG BEGIN_STMT
  916. goto <bb 4>; [INV]
  917. <bb 5> :
  918. # DEBUG BEGIN_STMT
  919. # DEBUG BEGIN_STMT
  920. D.6748 = pxTimer->xTimerPeriodInTicks;
  921. return D.6748;
  922. }
  923. xTimerGetTimerDaemonTaskHandle ()
  924. {
  925. struct tskTaskControlBlock * D.6744;
  926. <bb 2> :
  927. # DEBUG BEGIN_STMT
  928. xTimerTaskHandle.24_1 = xTimerTaskHandle;
  929. if (xTimerTaskHandle.24_1 == 0B)
  930. goto <bb 3>; [INV]
  931. else
  932. goto <bb 5>; [INV]
  933. <bb 3> :
  934. # DEBUG BEGIN_STMT
  935. vPortRaiseBASEPRI ();
  936. <bb 4> :
  937. # DEBUG BEGIN_STMT
  938. # DEBUG BEGIN_STMT
  939. # DEBUG BEGIN_STMT
  940. goto <bb 4>; [INV]
  941. <bb 5> :
  942. # DEBUG BEGIN_STMT
  943. # DEBUG BEGIN_STMT
  944. D.6744 = xTimerTaskHandle;
  945. return D.6744;
  946. }
  947. xTimerGenericCommand (struct tmrTimerControl * xTimer, const BaseType_t xCommandID, const TickType_t xOptionalValue, BaseType_t * const pxHigherPriorityTaskWoken, const TickType_t xTicksToWait)
  948. {
  949. struct DaemonTaskMessage_t xMessage;
  950. BaseType_t xReturn;
  951. BaseType_t D.6739;
  952. <bb 2> :
  953. # DEBUG BEGIN_STMT
  954. xReturn = 0;
  955. # DEBUG BEGIN_STMT
  956. # DEBUG BEGIN_STMT
  957. if (xTimer == 0B)
  958. goto <bb 3>; [INV]
  959. else
  960. goto <bb 5>; [INV]
  961. <bb 3> :
  962. # DEBUG BEGIN_STMT
  963. vPortRaiseBASEPRI ();
  964. <bb 4> :
  965. # DEBUG BEGIN_STMT
  966. # DEBUG BEGIN_STMT
  967. # DEBUG BEGIN_STMT
  968. goto <bb 4>; [INV]
  969. <bb 5> :
  970. # DEBUG BEGIN_STMT
  971. # DEBUG BEGIN_STMT
  972. xTimerQueue.20_1 = xTimerQueue;
  973. if (xTimerQueue.20_1 != 0B)
  974. goto <bb 6>; [INV]
  975. else
  976. goto <bb 11>; [INV]
  977. <bb 6> :
  978. # DEBUG BEGIN_STMT
  979. xMessage.xMessageID = xCommandID;
  980. # DEBUG BEGIN_STMT
  981. xMessage.u.xTimerParameters.xMessageValue = xOptionalValue;
  982. # DEBUG BEGIN_STMT
  983. xMessage.u.xTimerParameters.pxTimer = xTimer;
  984. # DEBUG BEGIN_STMT
  985. if (xCommandID <= 5)
  986. goto <bb 7>; [INV]
  987. else
  988. goto <bb 10>; [INV]
  989. <bb 7> :
  990. # DEBUG BEGIN_STMT
  991. _2 = xTaskGetSchedulerState ();
  992. if (_2 == 2)
  993. goto <bb 8>; [INV]
  994. else
  995. goto <bb 9>; [INV]
  996. <bb 8> :
  997. # DEBUG BEGIN_STMT
  998. xTimerQueue.21_3 = xTimerQueue;
  999. xReturn = xQueueGenericSend (xTimerQueue.21_3, &xMessage, xTicksToWait, 0);
  1000. goto <bb 11>; [INV]
  1001. <bb 9> :
  1002. # DEBUG BEGIN_STMT
  1003. xTimerQueue.22_4 = xTimerQueue;
  1004. xReturn = xQueueGenericSend (xTimerQueue.22_4, &xMessage, 0, 0);
  1005. goto <bb 11>; [INV]
  1006. <bb 10> :
  1007. # DEBUG BEGIN_STMT
  1008. xTimerQueue.23_5 = xTimerQueue;
  1009. xReturn = xQueueGenericSendFromISR (xTimerQueue.23_5, &xMessage, pxHigherPriorityTaskWoken, 0);
  1010. <bb 11> :
  1011. # DEBUG BEGIN_STMT
  1012. # DEBUG BEGIN_STMT
  1013. D.6739 = xReturn;
  1014. xMessage = {CLOBBER};
  1015. return D.6739;
  1016. }
  1017. prvInitialiseNewTimer (const char * const pcTimerName, const TickType_t xTimerPeriodInTicks, const UBaseType_t uxAutoReload, void * const pvTimerID, void (*TimerCallbackFunction_t) (struct tmrTimerControl *) pxCallbackFunction, struct Timer_t * pxNewTimer)
  1018. {
  1019. <bb 2> :
  1020. # DEBUG BEGIN_STMT
  1021. if (xTimerPeriodInTicks == 0)
  1022. goto <bb 3>; [INV]
  1023. else
  1024. goto <bb 5>; [INV]
  1025. <bb 3> :
  1026. # DEBUG BEGIN_STMT
  1027. vPortRaiseBASEPRI ();
  1028. <bb 4> :
  1029. # DEBUG BEGIN_STMT
  1030. # DEBUG BEGIN_STMT
  1031. # DEBUG BEGIN_STMT
  1032. goto <bb 4>; [INV]
  1033. <bb 5> :
  1034. # DEBUG BEGIN_STMT
  1035. # DEBUG BEGIN_STMT
  1036. prvCheckForValidListAndQueue ();
  1037. # DEBUG BEGIN_STMT
  1038. pxNewTimer->pcTimerName = pcTimerName;
  1039. # DEBUG BEGIN_STMT
  1040. pxNewTimer->xTimerPeriodInTicks = xTimerPeriodInTicks;
  1041. # DEBUG BEGIN_STMT
  1042. pxNewTimer->pvTimerID = pvTimerID;
  1043. # DEBUG BEGIN_STMT
  1044. pxNewTimer->pxCallbackFunction = pxCallbackFunction;
  1045. # DEBUG BEGIN_STMT
  1046. _1 = &pxNewTimer->xTimerListItem;
  1047. vListInitialiseItem (_1);
  1048. # DEBUG BEGIN_STMT
  1049. if (uxAutoReload != 0)
  1050. goto <bb 6>; [INV]
  1051. else
  1052. goto <bb 7>; [INV]
  1053. <bb 6> :
  1054. # DEBUG BEGIN_STMT
  1055. _2 = pxNewTimer->ucStatus;
  1056. _3 = _2 | 4;
  1057. pxNewTimer->ucStatus = _3;
  1058. <bb 7> :
  1059. # DEBUG BEGIN_STMT
  1060. return;
  1061. }
  1062. xTimerCreate (const char * const pcTimerName, const TickType_t xTimerPeriodInTicks, const UBaseType_t uxAutoReload, void * const pvTimerID, void (*TimerCallbackFunction_t) (struct tmrTimerControl *) pxCallbackFunction)
  1063. {
  1064. struct Timer_t * pxNewTimer;
  1065. struct tmrTimerControl * D.6722;
  1066. <bb 2> :
  1067. # DEBUG BEGIN_STMT
  1068. # DEBUG BEGIN_STMT
  1069. pxNewTimer = pvPortMalloc (44);
  1070. # DEBUG BEGIN_STMT
  1071. if (pxNewTimer != 0B)
  1072. goto <bb 3>; [INV]
  1073. else
  1074. goto <bb 4>; [INV]
  1075. <bb 3> :
  1076. # DEBUG BEGIN_STMT
  1077. pxNewTimer->ucStatus = 0;
  1078. # DEBUG BEGIN_STMT
  1079. prvInitialiseNewTimer (pcTimerName, xTimerPeriodInTicks, uxAutoReload, pvTimerID, pxCallbackFunction, pxNewTimer);
  1080. <bb 4> :
  1081. # DEBUG BEGIN_STMT
  1082. D.6722 = pxNewTimer;
  1083. return D.6722;
  1084. }
  1085. xTimerCreateTimerTask ()
  1086. {
  1087. BaseType_t xReturn;
  1088. BaseType_t D.6645;
  1089. <bb 2> :
  1090. # DEBUG BEGIN_STMT
  1091. xReturn = 0;
  1092. # DEBUG BEGIN_STMT
  1093. prvCheckForValidListAndQueue ();
  1094. # DEBUG BEGIN_STMT
  1095. xTimerQueue.0_1 = xTimerQueue;
  1096. if (xTimerQueue.0_1 != 0B)
  1097. goto <bb 3>; [INV]
  1098. else
  1099. goto <bb 4>; [INV]
  1100. <bb 3> :
  1101. # DEBUG BEGIN_STMT
  1102. xReturn = xTaskCreate (prvTimerTask, "Tmr Svc", 180, 0B, 2, &xTimerTaskHandle);
  1103. <bb 4> :
  1104. # DEBUG BEGIN_STMT
  1105. # DEBUG BEGIN_STMT
  1106. if (xReturn == 0)
  1107. goto <bb 5>; [INV]
  1108. else
  1109. goto <bb 7>; [INV]
  1110. <bb 5> :
  1111. # DEBUG BEGIN_STMT
  1112. vPortRaiseBASEPRI ();
  1113. <bb 6> :
  1114. # DEBUG BEGIN_STMT
  1115. # DEBUG BEGIN_STMT
  1116. # DEBUG BEGIN_STMT
  1117. goto <bb 6>; [INV]
  1118. <bb 7> :
  1119. # DEBUG BEGIN_STMT
  1120. # DEBUG BEGIN_STMT
  1121. D.6645 = xReturn;
  1122. return D.6645;
  1123. }
  1124. __attribute__((always_inline))
  1125. vPortRaiseBASEPRI ()
  1126. {
  1127. uint32_t ulNewBASEPRI;
  1128. <bb 2> :
  1129. # DEBUG BEGIN_STMT
  1130. # DEBUG BEGIN_STMT
  1131. __asm__ __volatile__(" mov %0, %1
  1132. msr basepri, %0
  1133. isb
  1134. dsb
  1135. " : "=r" ulNewBASEPRI : "i" 16 : "memory");
  1136. return;
  1137. }