event_groups.c.068i.whole-program 29 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241
  1. Marking local functions:
  2. Marking externally visible functions: vEventGroupSetNumber uxEventGroupGetNumber xEventGroupSetBitsFromISR vEventGroupClearBitsCallback vEventGroupSetBitsCallback vEventGroupDelete xEventGroupSetBits xEventGroupGetBitsFromISR xEventGroupClearBitsFromISR xEventGroupClearBits xEventGroupWaitBits xEventGroupSync xEventGroupCreate
  3. Marking externally visible variables:
  4. Reclaiming functions:
  5. Reclaiming variables:
  6. Clearing address taken flags:
  7. Symbol table:
  8. vPortFree/29 (vPortFree) @06c66b60
  9. Type: function
  10. Visibility: external public
  11. References:
  12. Referring:
  13. Availability: not_available
  14. Function flags:
  15. Called by: vEventGroupDelete/11
  16. Calls:
  17. vTaskRemoveFromUnorderedEventList/28 (vTaskRemoveFromUnorderedEventList) @06c669a0
  18. Type: function
  19. Visibility: external public
  20. References:
  21. Referring:
  22. Availability: not_available
  23. Function flags:
  24. Called by: vEventGroupDelete/11 xEventGroupSetBits/10
  25. Calls:
  26. xTimerPendFunctionCallFromISR/27 (xTimerPendFunctionCallFromISR) @06c66460
  27. Type: function
  28. Visibility: external public
  29. References:
  30. Referring:
  31. Availability: not_available
  32. Function flags:
  33. Called by: xEventGroupSetBitsFromISR/15 xEventGroupClearBitsFromISR/8
  34. Calls:
  35. vPortExitCritical/26 (vPortExitCritical) @06c3ce00
  36. Type: function
  37. Visibility: external public
  38. References:
  39. Referring:
  40. Availability: not_available
  41. Function flags:
  42. Called by: xEventGroupWaitBits/6 xEventGroupSync/5 xEventGroupClearBits/7
  43. Calls:
  44. vPortEnterCritical/25 (vPortEnterCritical) @06c3cd20
  45. Type: function
  46. Visibility: external public
  47. References:
  48. Referring:
  49. Availability: not_available
  50. Function flags:
  51. Called by: xEventGroupWaitBits/6 xEventGroupSync/5 xEventGroupClearBits/7
  52. Calls:
  53. uxTaskResetEventItemValue/24 (uxTaskResetEventItemValue) @06c3cc40
  54. Type: function
  55. Visibility: external public
  56. References:
  57. Referring:
  58. Availability: not_available
  59. Function flags:
  60. Called by: xEventGroupWaitBits/6 xEventGroupSync/5
  61. Calls:
  62. xTaskResumeAll/23 (xTaskResumeAll) @06c3cb60
  63. Type: function
  64. Visibility: external public
  65. References:
  66. Referring:
  67. Availability: not_available
  68. Function flags:
  69. Called by: xEventGroupWaitBits/6 vEventGroupDelete/11 xEventGroupSync/5 xEventGroupSetBits/10
  70. Calls:
  71. vTaskPlaceOnUnorderedEventList/22 (vTaskPlaceOnUnorderedEventList) @06c3ca80
  72. Type: function
  73. Visibility: external public
  74. References:
  75. Referring:
  76. Availability: not_available
  77. Function flags:
  78. Called by: xEventGroupWaitBits/6 xEventGroupSync/5
  79. Calls:
  80. vTaskSuspendAll/21 (vTaskSuspendAll) @06c3c9a0
  81. Type: function
  82. Visibility: external public
  83. References:
  84. Referring:
  85. Availability: not_available
  86. Function flags:
  87. Called by: xEventGroupWaitBits/6 vEventGroupDelete/11 xEventGroupSync/5 xEventGroupSetBits/10
  88. Calls:
  89. xTaskGetSchedulerState/20 (xTaskGetSchedulerState) @06c3c8c0
  90. Type: function
  91. Visibility: external public
  92. References:
  93. Referring:
  94. Availability: not_available
  95. Function flags:
  96. Called by: xEventGroupWaitBits/6 xEventGroupSync/5
  97. Calls:
  98. vListInitialise/19 (vListInitialise) @06c3c540
  99. Type: function
  100. Visibility: external public
  101. References:
  102. Referring:
  103. Availability: not_available
  104. Function flags:
  105. Called by: xEventGroupCreate/4
  106. Calls:
  107. pvPortMalloc/18 (pvPortMalloc) @06c3c460
  108. Type: function
  109. Visibility: external public
  110. References:
  111. Referring:
  112. Availability: not_available
  113. Function flags:
  114. Called by: xEventGroupCreate/4
  115. Calls:
  116. vEventGroupSetNumber/17 (vEventGroupSetNumber) @06c3c000
  117. Type: function definition analyzed
  118. Visibility: force_output externally_visible no_reorder public
  119. References:
  120. Referring:
  121. Availability: available
  122. Function flags: body
  123. Called by:
  124. Calls:
  125. uxEventGroupGetNumber/16 (uxEventGroupGetNumber) @06c32a80
  126. Type: function definition analyzed
  127. Visibility: force_output externally_visible no_reorder public
  128. References:
  129. Referring:
  130. Availability: available
  131. Function flags: body
  132. Called by:
  133. Calls:
  134. xEventGroupSetBitsFromISR/15 (xEventGroupSetBitsFromISR) @06c32460
  135. Type: function definition analyzed
  136. Visibility: force_output externally_visible no_reorder public
  137. References: vEventGroupSetBitsCallback/12 (addr)
  138. Referring:
  139. Availability: available
  140. Function flags: body
  141. Called by:
  142. Calls: xTimerPendFunctionCallFromISR/27
  143. prvTestWaitCondition/14 (prvTestWaitCondition) @06c32ee0
  144. Type: function definition analyzed
  145. Visibility: force_output no_reorder prevailing_def_ironly
  146. References:
  147. Referring:
  148. Availability: available
  149. Function flags: body
  150. Called by: xEventGroupWaitBits/6 xEventGroupWaitBits/6
  151. Calls:
  152. vEventGroupClearBitsCallback/13 (vEventGroupClearBitsCallback) @06c32c40
  153. Type: function definition analyzed
  154. Visibility: force_output externally_visible no_reorder public
  155. Address is taken.
  156. References:
  157. Referring: xEventGroupClearBitsFromISR/8 (addr)
  158. Availability: available
  159. Function flags: body
  160. Called by:
  161. Calls: xEventGroupClearBits/7
  162. vEventGroupSetBitsCallback/12 (vEventGroupSetBitsCallback) @06c329a0
  163. Type: function definition analyzed
  164. Visibility: force_output externally_visible no_reorder public
  165. Address is taken.
  166. References:
  167. Referring: xEventGroupSetBitsFromISR/15 (addr)
  168. Availability: available
  169. Function flags: body
  170. Called by:
  171. Calls: xEventGroupSetBits/10
  172. vEventGroupDelete/11 (vEventGroupDelete) @06c32700
  173. Type: function definition analyzed
  174. Visibility: force_output externally_visible no_reorder public
  175. References:
  176. Referring:
  177. Availability: available
  178. Function flags: body
  179. Called by:
  180. Calls: xTaskResumeAll/23 vPortFree/29 vTaskRemoveFromUnorderedEventList/28 vTaskSuspendAll/21
  181. xEventGroupSetBits/10 (xEventGroupSetBits) @06c32380
  182. Type: function definition analyzed
  183. Visibility: force_output externally_visible no_reorder public
  184. References:
  185. Referring:
  186. Availability: available
  187. Function flags: body
  188. Called by: vEventGroupSetBitsCallback/12 xEventGroupSync/5
  189. Calls: xTaskResumeAll/23 vTaskRemoveFromUnorderedEventList/28 vTaskSuspendAll/21
  190. xEventGroupGetBitsFromISR/9 (xEventGroupGetBitsFromISR) @06befc40
  191. Type: function definition analyzed
  192. Visibility: force_output externally_visible no_reorder public
  193. References:
  194. Referring:
  195. Availability: available
  196. Function flags: body
  197. Called by:
  198. Calls:
  199. xEventGroupClearBitsFromISR/8 (xEventGroupClearBitsFromISR) @06bef2a0
  200. Type: function definition analyzed
  201. Visibility: force_output externally_visible no_reorder public
  202. References: vEventGroupClearBitsCallback/13 (addr)
  203. Referring:
  204. Availability: available
  205. Function flags: body
  206. Called by:
  207. Calls: xTimerPendFunctionCallFromISR/27
  208. xEventGroupClearBits/7 (xEventGroupClearBits) @06befee0
  209. Type: function definition analyzed
  210. Visibility: force_output externally_visible no_reorder public
  211. References:
  212. Referring:
  213. Availability: available
  214. Function flags: body
  215. Called by: vEventGroupClearBitsCallback/13
  216. Calls: vPortExitCritical/26 vPortEnterCritical/25
  217. xEventGroupWaitBits/6 (xEventGroupWaitBits) @06befb60
  218. Type: function definition analyzed
  219. Visibility: force_output externally_visible no_reorder public
  220. References:
  221. Referring:
  222. Availability: available
  223. Function flags: body
  224. Called by:
  225. Calls: vPortExitCritical/26 prvTestWaitCondition/14 vPortEnterCritical/25 uxTaskResetEventItemValue/24 xTaskResumeAll/23 vTaskPlaceOnUnorderedEventList/22 prvTestWaitCondition/14 vTaskSuspendAll/21 xTaskGetSchedulerState/20
  226. xEventGroupSync/5 (xEventGroupSync) @06bef620
  227. Type: function definition analyzed
  228. Visibility: force_output externally_visible no_reorder public
  229. References:
  230. Referring:
  231. Availability: available
  232. Function flags: body
  233. Called by:
  234. Calls: vPortExitCritical/26 vPortEnterCritical/25 uxTaskResetEventItemValue/24 xTaskResumeAll/23 vTaskPlaceOnUnorderedEventList/22 xEventGroupSetBits/10 vTaskSuspendAll/21 xTaskGetSchedulerState/20
  235. xEventGroupCreate/4 (xEventGroupCreate) @06bef1c0
  236. Type: function definition analyzed
  237. Visibility: force_output externally_visible no_reorder public
  238. References:
  239. Referring:
  240. Availability: available
  241. Function flags: body
  242. Called by:
  243. Calls: vListInitialise/19 pvPortMalloc/18
  244. vEventGroupSetNumber (void * xEventGroup, UBaseType_t uxEventGroupNumber)
  245. {
  246. <bb 2> :
  247. MEM[(struct EventGroup_t *)xEventGroup_2(D)].uxEventGroupNumber = uxEventGroupNumber_3(D);
  248. return;
  249. }
  250. uxEventGroupGetNumber (void * xEventGroup)
  251. {
  252. const struct EventGroup_t * pxEventBits;
  253. UBaseType_t xReturn;
  254. UBaseType_t D.6567;
  255. UBaseType_t _7;
  256. <bb 2> :
  257. pxEventBits_3 = xEventGroup_2(D);
  258. if (xEventGroup_2(D) == 0B)
  259. goto <bb 3>; [INV]
  260. else
  261. goto <bb 4>; [INV]
  262. <bb 3> :
  263. xReturn_6 = 0;
  264. goto <bb 5>; [INV]
  265. <bb 4> :
  266. xReturn_5 = pxEventBits_3->uxEventGroupNumber;
  267. <bb 5> :
  268. # xReturn_1 = PHI <xReturn_6(3), xReturn_5(4)>
  269. _7 = xReturn_1;
  270. <bb 6> :
  271. <L3>:
  272. return _7;
  273. }
  274. xEventGroupSetBitsFromISR (struct EventGroupDef_t * xEventGroup, const EventBits_t uxBitsToSet, BaseType_t * pxHigherPriorityTaskWoken)
  275. {
  276. BaseType_t xReturn;
  277. BaseType_t D.6562;
  278. BaseType_t _7;
  279. <bb 2> :
  280. xReturn_6 = xTimerPendFunctionCallFromISR (vEventGroupSetBitsCallback, xEventGroup_2(D), uxBitsToSet_3(D), pxHigherPriorityTaskWoken_4(D));
  281. _7 = xReturn_6;
  282. <bb 3> :
  283. <L0>:
  284. return _7;
  285. }
  286. prvTestWaitCondition (const EventBits_t uxCurrentEventBits, const EventBits_t uxBitsToWaitFor, const BaseType_t xWaitForAllBits)
  287. {
  288. BaseType_t xWaitConditionMet;
  289. BaseType_t D.6560;
  290. long unsigned int _1;
  291. long unsigned int _2;
  292. BaseType_t _10;
  293. <bb 2> :
  294. xWaitConditionMet_4 = 0;
  295. if (xWaitForAllBits_5(D) == 0)
  296. goto <bb 3>; [INV]
  297. else
  298. goto <bb 5>; [INV]
  299. <bb 3> :
  300. _1 = uxCurrentEventBits_6(D) & uxBitsToWaitFor_7(D);
  301. if (_1 != 0)
  302. goto <bb 4>; [INV]
  303. else
  304. goto <bb 7>; [INV]
  305. <bb 4> :
  306. xWaitConditionMet_9 = 1;
  307. goto <bb 7>; [INV]
  308. <bb 5> :
  309. _2 = uxCurrentEventBits_6(D) & uxBitsToWaitFor_7(D);
  310. if (uxBitsToWaitFor_7(D) == _2)
  311. goto <bb 6>; [INV]
  312. else
  313. goto <bb 7>; [INV]
  314. <bb 6> :
  315. xWaitConditionMet_8 = 1;
  316. <bb 7> :
  317. # xWaitConditionMet_3 = PHI <xWaitConditionMet_9(4), xWaitConditionMet_4(5), xWaitConditionMet_8(6), xWaitConditionMet_4(3)>
  318. _10 = xWaitConditionMet_3;
  319. <bb 8> :
  320. <L9>:
  321. return _10;
  322. }
  323. vEventGroupClearBitsCallback (void * pvEventGroup, const uint32_t ulBitsToClear)
  324. {
  325. <bb 2> :
  326. xEventGroupClearBits (pvEventGroup_2(D), ulBitsToClear_3(D));
  327. return;
  328. }
  329. vEventGroupSetBitsCallback (void * pvEventGroup, const uint32_t ulBitsToSet)
  330. {
  331. <bb 2> :
  332. xEventGroupSetBits (pvEventGroup_2(D), ulBitsToSet_3(D));
  333. return;
  334. }
  335. vEventGroupDelete (struct EventGroupDef_t * xEventGroup)
  336. {
  337. uint32_t ulNewBASEPRI;
  338. uint32_t ulNewBASEPRI;
  339. const struct List_t * pxTasksWaitingForBits;
  340. struct EventGroup_t * pxEventBits;
  341. struct xLIST_ITEM * _1;
  342. const struct MiniListItem_t * _2;
  343. struct xLIST_ITEM * _3;
  344. long unsigned int _4;
  345. <bb 2> :
  346. if (xEventGroup_6(D) == 0B)
  347. goto <bb 3>; [INV]
  348. else
  349. goto <bb 6>; [INV]
  350. <bb 3> :
  351. __asm__ __volatile__(" mov %0, %1
  352. msr basepri, %0
  353. isb
  354. dsb
  355. " : "=r" ulNewBASEPRI_14 : "i" 16 : "memory");
  356. <bb 4> :
  357. <bb 5> :
  358. goto <bb 5>; [INV]
  359. <bb 6> :
  360. pxEventBits_7 = xEventGroup_6(D);
  361. pxTasksWaitingForBits_8 = &pxEventBits_7->xTasksWaitingForBits;
  362. vTaskSuspendAll ();
  363. goto <bb 12>; [INV]
  364. <bb 7> :
  365. _1 = pxTasksWaitingForBits_8->xListEnd.pxNext;
  366. _2 = &pxTasksWaitingForBits_8->xListEnd;
  367. if (_1 == _2)
  368. goto <bb 8>; [INV]
  369. else
  370. goto <bb 11>; [INV]
  371. <bb 8> :
  372. __asm__ __volatile__(" mov %0, %1
  373. msr basepri, %0
  374. isb
  375. dsb
  376. " : "=r" ulNewBASEPRI_15 : "i" 16 : "memory");
  377. <bb 9> :
  378. <bb 10> :
  379. goto <bb 10>; [INV]
  380. <bb 11> :
  381. _3 = pxTasksWaitingForBits_8->xListEnd.pxNext;
  382. vTaskRemoveFromUnorderedEventList (_3, 33554432);
  383. <bb 12> :
  384. _4 ={v} pxTasksWaitingForBits_8->uxNumberOfItems;
  385. if (_4 != 0)
  386. goto <bb 7>; [INV]
  387. else
  388. goto <bb 13>; [INV]
  389. <bb 13> :
  390. vPortFree (pxEventBits_7);
  391. xTaskResumeAll ();
  392. return;
  393. }
  394. xEventGroupSetBits (struct EventGroupDef_t * xEventGroup, const EventBits_t uxBitsToSet)
  395. {
  396. uint32_t ulNewBASEPRI;
  397. uint32_t ulNewBASEPRI;
  398. BaseType_t xMatchFound;
  399. struct EventGroup_t * pxEventBits;
  400. EventBits_t uxControlBits;
  401. EventBits_t uxBitsWaitedFor;
  402. EventBits_t uxBitsToClear;
  403. const struct List_t * pxList;
  404. const struct ListItem_t * pxListEnd;
  405. struct ListItem_t * pxNext;
  406. struct ListItem_t * pxListItem;
  407. EventBits_t D.6545;
  408. long unsigned int _1;
  409. long unsigned int _2;
  410. long unsigned int _3;
  411. long unsigned int _4;
  412. long unsigned int _5;
  413. long unsigned int _6;
  414. long unsigned int _7;
  415. long unsigned int _8;
  416. long unsigned int _9;
  417. long unsigned int _10;
  418. long unsigned int _11;
  419. long unsigned int _12;
  420. long unsigned int _13;
  421. long unsigned int _14;
  422. EventBits_t _35;
  423. <bb 2> :
  424. uxBitsToClear_22 = 0;
  425. pxEventBits_24 = xEventGroup_23(D);
  426. xMatchFound_25 = 0;
  427. if (xEventGroup_23(D) == 0B)
  428. goto <bb 3>; [INV]
  429. else
  430. goto <bb 6>; [INV]
  431. <bb 3> :
  432. __asm__ __volatile__(" mov %0, %1
  433. msr basepri, %0
  434. isb
  435. dsb
  436. " : "=r" ulNewBASEPRI_46 : "i" 16 : "memory");
  437. <bb 4> :
  438. <bb 5> :
  439. goto <bb 5>; [INV]
  440. <bb 6> :
  441. _1 = uxBitsToSet_26(D) & 4278190080;
  442. if (_1 != 0)
  443. goto <bb 7>; [INV]
  444. else
  445. goto <bb 10>; [INV]
  446. <bb 7> :
  447. __asm__ __volatile__(" mov %0, %1
  448. msr basepri, %0
  449. isb
  450. dsb
  451. " : "=r" ulNewBASEPRI_47 : "i" 16 : "memory");
  452. <bb 8> :
  453. <bb 9> :
  454. goto <bb 9>; [INV]
  455. <bb 10> :
  456. pxList_27 = &pxEventBits_24->xTasksWaitingForBits;
  457. pxListEnd_28 = &pxList_27->xListEnd;
  458. vTaskSuspendAll ();
  459. pxListItem_31 = pxList_27->xListEnd.pxNext;
  460. _2 = pxEventBits_24->uxEventBits;
  461. _3 = uxBitsToSet_26(D) | _2;
  462. pxEventBits_24->uxEventBits = _3;
  463. goto <bb 21>; [INV]
  464. <bb 11> :
  465. pxNext_36 = pxListItem_15->pxNext;
  466. uxBitsWaitedFor_37 = pxListItem_15->xItemValue;
  467. xMatchFound_38 = 0;
  468. uxControlBits_39 = uxBitsWaitedFor_37 & 4278190080;
  469. uxBitsWaitedFor_40 = uxBitsWaitedFor_37 & 16777215;
  470. _4 = uxControlBits_39 & 67108864;
  471. if (_4 == 0)
  472. goto <bb 12>; [INV]
  473. else
  474. goto <bb 14>; [INV]
  475. <bb 12> :
  476. _5 = pxEventBits_24->uxEventBits;
  477. _6 = uxBitsWaitedFor_40 & _5;
  478. if (_6 != 0)
  479. goto <bb 13>; [INV]
  480. else
  481. goto <bb 16>; [INV]
  482. <bb 13> :
  483. xMatchFound_42 = 1;
  484. goto <bb 16>; [INV]
  485. <bb 14> :
  486. _7 = pxEventBits_24->uxEventBits;
  487. _8 = uxBitsWaitedFor_40 & _7;
  488. if (uxBitsWaitedFor_40 == _8)
  489. goto <bb 15>; [INV]
  490. else
  491. goto <bb 16>; [INV]
  492. <bb 15> :
  493. xMatchFound_41 = 1;
  494. <bb 16> :
  495. # xMatchFound_19 = PHI <xMatchFound_42(13), xMatchFound_38(14), xMatchFound_41(15), xMatchFound_38(12)>
  496. if (xMatchFound_19 != 0)
  497. goto <bb 17>; [INV]
  498. else
  499. goto <bb 20>; [INV]
  500. <bb 17> :
  501. _9 = uxControlBits_39 & 16777216;
  502. if (_9 != 0)
  503. goto <bb 18>; [INV]
  504. else
  505. goto <bb 19>; [INV]
  506. <bb 18> :
  507. uxBitsToClear_43 = uxBitsToClear_18 | uxBitsWaitedFor_40;
  508. <bb 19> :
  509. # uxBitsToClear_16 = PHI <uxBitsToClear_18(17), uxBitsToClear_43(18)>
  510. _10 = pxEventBits_24->uxEventBits;
  511. _11 = _10 | 33554432;
  512. vTaskRemoveFromUnorderedEventList (pxListItem_15, _11);
  513. <bb 20> :
  514. # uxBitsToClear_17 = PHI <uxBitsToClear_18(16), uxBitsToClear_16(19)>
  515. pxListItem_45 = pxNext_36;
  516. <bb 21> :
  517. # pxListItem_15 = PHI <pxListItem_31(10), pxListItem_45(20)>
  518. # uxBitsToClear_18 = PHI <uxBitsToClear_22(10), uxBitsToClear_17(20)>
  519. if (pxListItem_15 != pxListEnd_28)
  520. goto <bb 11>; [INV]
  521. else
  522. goto <bb 22>; [INV]
  523. <bb 22> :
  524. _12 = pxEventBits_24->uxEventBits;
  525. _13 = ~uxBitsToClear_18;
  526. _14 = _12 & _13;
  527. pxEventBits_24->uxEventBits = _14;
  528. xTaskResumeAll ();
  529. _35 = pxEventBits_24->uxEventBits;
  530. <bb 23> :
  531. <L23>:
  532. return _35;
  533. }
  534. xEventGroupGetBitsFromISR (struct EventGroupDef_t * xEventGroup)
  535. {
  536. uint32_t D.6592;
  537. uint32_t ulOriginalBASEPRI;
  538. uint32_t ulNewBASEPRI;
  539. uint32_t D.6591;
  540. uint32_t ulNewMaskValue;
  541. EventBits_t uxReturn;
  542. const struct EventGroup_t * const pxEventBits;
  543. UBaseType_t uxSavedInterruptStatus;
  544. EventBits_t D.6523;
  545. EventBits_t _6;
  546. long unsigned int _10;
  547. <bb 2> :
  548. pxEventBits_2 = xEventGroup_1(D);
  549. __asm__ __volatile__(" mrs %0, basepri
  550. mov %1, %2
  551. msr basepri, %1
  552. isb
  553. dsb
  554. " : "=r" ulOriginalBASEPRI_8, "=r" ulNewBASEPRI_9 : "i" 16 : "memory");
  555. _10 = ulOriginalBASEPRI_8;
  556. <bb 3> :
  557. <L1>:
  558. _12 = _10;
  559. <bb 4> :
  560. uxSavedInterruptStatus_4 = _12;
  561. uxReturn_5 = pxEventBits_2->uxEventBits;
  562. ulNewMaskValue_7 = uxSavedInterruptStatus_4;
  563. __asm__ __volatile__(" msr basepri, %0 " : : "r" ulNewMaskValue_7 : "memory");
  564. <bb 5> :
  565. _6 = uxReturn_5;
  566. <bb 6> :
  567. <L0>:
  568. return _6;
  569. }
  570. xEventGroupClearBitsFromISR (struct EventGroupDef_t * xEventGroup, const EventBits_t uxBitsToClear)
  571. {
  572. BaseType_t xReturn;
  573. BaseType_t D.6521;
  574. BaseType_t _6;
  575. <bb 2> :
  576. xReturn_5 = xTimerPendFunctionCallFromISR (vEventGroupClearBitsCallback, xEventGroup_2(D), uxBitsToClear_3(D), 0B);
  577. _6 = xReturn_5;
  578. <bb 3> :
  579. <L0>:
  580. return _6;
  581. }
  582. xEventGroupClearBits (struct EventGroupDef_t * xEventGroup, const EventBits_t uxBitsToClear)
  583. {
  584. uint32_t ulNewBASEPRI;
  585. uint32_t ulNewBASEPRI;
  586. EventBits_t uxReturn;
  587. struct EventGroup_t * pxEventBits;
  588. EventBits_t D.6519;
  589. long unsigned int _1;
  590. long unsigned int _2;
  591. long unsigned int _3;
  592. long unsigned int _4;
  593. EventBits_t _13;
  594. <bb 2> :
  595. pxEventBits_6 = xEventGroup_5(D);
  596. if (xEventGroup_5(D) == 0B)
  597. goto <bb 3>; [INV]
  598. else
  599. goto <bb 6>; [INV]
  600. <bb 3> :
  601. __asm__ __volatile__(" mov %0, %1
  602. msr basepri, %0
  603. isb
  604. dsb
  605. " : "=r" ulNewBASEPRI_14 : "i" 16 : "memory");
  606. <bb 4> :
  607. <bb 5> :
  608. goto <bb 5>; [INV]
  609. <bb 6> :
  610. _1 = uxBitsToClear_7(D) & 4278190080;
  611. if (_1 != 0)
  612. goto <bb 7>; [INV]
  613. else
  614. goto <bb 10>; [INV]
  615. <bb 7> :
  616. __asm__ __volatile__(" mov %0, %1
  617. msr basepri, %0
  618. isb
  619. dsb
  620. " : "=r" ulNewBASEPRI_15 : "i" 16 : "memory");
  621. <bb 8> :
  622. <bb 9> :
  623. goto <bb 9>; [INV]
  624. <bb 10> :
  625. vPortEnterCritical ();
  626. uxReturn_10 = pxEventBits_6->uxEventBits;
  627. _2 = pxEventBits_6->uxEventBits;
  628. _3 = ~uxBitsToClear_7(D);
  629. _4 = _2 & _3;
  630. pxEventBits_6->uxEventBits = _4;
  631. vPortExitCritical ();
  632. _13 = uxReturn_10;
  633. <bb 11> :
  634. <L6>:
  635. return _13;
  636. }
  637. xEventGroupWaitBits (struct EventGroupDef_t * xEventGroup, const EventBits_t uxBitsToWaitFor, const BaseType_t xClearOnExit, const BaseType_t xWaitForAllBits, TickType_t xTicksToWait)
  638. {
  639. uint32_t ulNewBASEPRI;
  640. uint32_t ulNewBASEPRI;
  641. uint32_t ulNewBASEPRI;
  642. uint32_t ulNewBASEPRI;
  643. const EventBits_t uxCurrentEventBits;
  644. BaseType_t xTimeoutOccurred;
  645. BaseType_t xAlreadyYielded;
  646. BaseType_t xWaitConditionMet;
  647. EventBits_t uxControlBits;
  648. EventBits_t uxReturn;
  649. struct EventGroup_t * pxEventBits;
  650. EventBits_t D.6513;
  651. int iftmp.1;
  652. long unsigned int _1;
  653. long int _2;
  654. long unsigned int _3;
  655. long unsigned int _4;
  656. long unsigned int _5;
  657. struct List_t * _6;
  658. long unsigned int _7;
  659. volatile uint32_t * _8;
  660. long unsigned int _9;
  661. long int _10;
  662. long unsigned int _11;
  663. long unsigned int _12;
  664. long unsigned int _13;
  665. int iftmp.1_20;
  666. int iftmp.1_34;
  667. int iftmp.1_35;
  668. EventBits_t _65;
  669. <bb 2> :
  670. pxEventBits_27 = xEventGroup_26(D);
  671. uxControlBits_28 = 0;
  672. xTimeoutOccurred_29 = 0;
  673. if (xEventGroup_26(D) == 0B)
  674. goto <bb 3>; [INV]
  675. else
  676. goto <bb 6>; [INV]
  677. <bb 3> :
  678. __asm__ __volatile__(" mov %0, %1
  679. msr basepri, %0
  680. isb
  681. dsb
  682. " : "=r" ulNewBASEPRI_66 : "i" 16 : "memory");
  683. <bb 4> :
  684. <bb 5> :
  685. goto <bb 5>; [INV]
  686. <bb 6> :
  687. _1 = uxBitsToWaitFor_30(D) & 4278190080;
  688. if (_1 != 0)
  689. goto <bb 7>; [INV]
  690. else
  691. goto <bb 10>; [INV]
  692. <bb 7> :
  693. __asm__ __volatile__(" mov %0, %1
  694. msr basepri, %0
  695. isb
  696. dsb
  697. " : "=r" ulNewBASEPRI_67 : "i" 16 : "memory");
  698. <bb 8> :
  699. <bb 9> :
  700. goto <bb 9>; [INV]
  701. <bb 10> :
  702. if (uxBitsToWaitFor_30(D) == 0)
  703. goto <bb 11>; [INV]
  704. else
  705. goto <bb 14>; [INV]
  706. <bb 11> :
  707. __asm__ __volatile__(" mov %0, %1
  708. msr basepri, %0
  709. isb
  710. dsb
  711. " : "=r" ulNewBASEPRI_68 : "i" 16 : "memory");
  712. <bb 12> :
  713. <bb 13> :
  714. goto <bb 13>; [INV]
  715. <bb 14> :
  716. _2 = xTaskGetSchedulerState ();
  717. if (_2 != 0)
  718. goto <bb 16>; [INV]
  719. else
  720. goto <bb 15>; [INV]
  721. <bb 15> :
  722. if (xTicksToWait_33(D) == 0)
  723. goto <bb 16>; [INV]
  724. else
  725. goto <bb 17>; [INV]
  726. <bb 16> :
  727. iftmp.1_35 = 1;
  728. goto <bb 18>; [INV]
  729. <bb 17> :
  730. iftmp.1_34 = 0;
  731. <bb 18> :
  732. # iftmp.1_20 = PHI <iftmp.1_35(16), iftmp.1_34(17)>
  733. if (iftmp.1_20 == 0)
  734. goto <bb 19>; [INV]
  735. else
  736. goto <bb 22>; [INV]
  737. <bb 19> :
  738. __asm__ __volatile__(" mov %0, %1
  739. msr basepri, %0
  740. isb
  741. dsb
  742. " : "=r" ulNewBASEPRI_69 : "i" 16 : "memory");
  743. <bb 20> :
  744. <bb 21> :
  745. goto <bb 21>; [INV]
  746. <bb 22> :
  747. vTaskSuspendAll ();
  748. uxCurrentEventBits_37 = pxEventBits_27->uxEventBits;
  749. xWaitConditionMet_40 = prvTestWaitCondition (uxCurrentEventBits_37, uxBitsToWaitFor_30(D), xWaitForAllBits_38(D));
  750. if (xWaitConditionMet_40 != 0)
  751. goto <bb 23>; [INV]
  752. else
  753. goto <bb 25>; [INV]
  754. <bb 23> :
  755. uxReturn_48 = uxCurrentEventBits_37;
  756. xTicksToWait_49 = 0;
  757. if (xClearOnExit_41(D) != 0)
  758. goto <bb 24>; [INV]
  759. else
  760. goto <bb 32>; [INV]
  761. <bb 24> :
  762. _3 = pxEventBits_27->uxEventBits;
  763. _4 = ~uxBitsToWaitFor_30(D);
  764. _5 = _3 & _4;
  765. pxEventBits_27->uxEventBits = _5;
  766. goto <bb 32>; [INV]
  767. <bb 25> :
  768. if (xTicksToWait_33(D) == 0)
  769. goto <bb 26>; [INV]
  770. else
  771. goto <bb 27>; [INV]
  772. <bb 26> :
  773. uxReturn_46 = uxCurrentEventBits_37;
  774. xTimeoutOccurred_47 = 1;
  775. goto <bb 32>; [INV]
  776. <bb 27> :
  777. if (xClearOnExit_41(D) != 0)
  778. goto <bb 28>; [INV]
  779. else
  780. goto <bb 29>; [INV]
  781. <bb 28> :
  782. uxControlBits_42 = uxControlBits_28 | 16777216;
  783. <bb 29> :
  784. # uxControlBits_18 = PHI <uxControlBits_28(27), uxControlBits_42(28)>
  785. if (xWaitForAllBits_38(D) != 0)
  786. goto <bb 30>; [INV]
  787. else
  788. goto <bb 31>; [INV]
  789. <bb 30> :
  790. uxControlBits_43 = uxControlBits_18 | 67108864;
  791. <bb 31> :
  792. # uxControlBits_19 = PHI <uxControlBits_18(29), uxControlBits_43(30)>
  793. _6 = &pxEventBits_27->xTasksWaitingForBits;
  794. _7 = uxBitsToWaitFor_30(D) | uxControlBits_19;
  795. vTaskPlaceOnUnorderedEventList (_6, _7, xTicksToWait_33(D));
  796. uxReturn_45 = 0;
  797. <bb 32> :
  798. # xTicksToWait_14 = PHI <xTicksToWait_49(24), xTicksToWait_33(D)(26), xTicksToWait_33(D)(31), xTicksToWait_49(23)>
  799. # uxReturn_15 = PHI <uxReturn_48(24), uxReturn_46(26), uxReturn_45(31), uxReturn_48(23)>
  800. xAlreadyYielded_52 = xTaskResumeAll ();
  801. if (xTicksToWait_14 != 0)
  802. goto <bb 33>; [INV]
  803. else
  804. goto <bb 41>; [INV]
  805. <bb 33> :
  806. if (xAlreadyYielded_52 == 0)
  807. goto <bb 34>; [INV]
  808. else
  809. goto <bb 35>; [INV]
  810. <bb 34> :
  811. _8 = 3758157060B;
  812. *_8 ={v} 268435456;
  813. __asm__ __volatile__("dsb" : : : "memory");
  814. __asm__ __volatile__("isb");
  815. <bb 35> :
  816. uxReturn_57 = uxTaskResetEventItemValue ();
  817. _9 = uxReturn_57 & 33554432;
  818. if (_9 == 0)
  819. goto <bb 36>; [INV]
  820. else
  821. goto <bb 40>; [INV]
  822. <bb 36> :
  823. vPortEnterCritical ();
  824. uxReturn_59 = pxEventBits_27->uxEventBits;
  825. _10 = prvTestWaitCondition (uxReturn_59, uxBitsToWaitFor_30(D), xWaitForAllBits_38(D));
  826. if (_10 != 0)
  827. goto <bb 37>; [INV]
  828. else
  829. goto <bb 39>; [INV]
  830. <bb 37> :
  831. if (xClearOnExit_41(D) != 0)
  832. goto <bb 38>; [INV]
  833. else
  834. goto <bb 39>; [INV]
  835. <bb 38> :
  836. _11 = pxEventBits_27->uxEventBits;
  837. _12 = ~uxBitsToWaitFor_30(D);
  838. _13 = _11 & _12;
  839. pxEventBits_27->uxEventBits = _13;
  840. <bb 39> :
  841. xTimeoutOccurred_62 = 1;
  842. vPortExitCritical ();
  843. <bb 40> :
  844. # uxReturn_16 = PHI <uxReturn_57(35), uxReturn_59(39)>
  845. uxReturn_64 = uxReturn_16 & 16777215;
  846. <bb 41> :
  847. # uxReturn_17 = PHI <uxReturn_15(32), uxReturn_64(40)>
  848. _65 = uxReturn_17;
  849. <bb 42> :
  850. <L45>:
  851. return _65;
  852. }
  853. xEventGroupSync (struct EventGroupDef_t * xEventGroup, const EventBits_t uxBitsToSet, const EventBits_t uxBitsToWaitFor, TickType_t xTicksToWait)
  854. {
  855. uint32_t ulNewBASEPRI;
  856. uint32_t ulNewBASEPRI;
  857. uint32_t ulNewBASEPRI;
  858. BaseType_t xTimeoutOccurred;
  859. BaseType_t xAlreadyYielded;
  860. struct EventGroup_t * pxEventBits;
  861. EventBits_t uxReturn;
  862. EventBits_t uxOriginalBitValue;
  863. EventBits_t D.6469;
  864. int iftmp.0;
  865. long unsigned int _1;
  866. long int _2;
  867. long unsigned int _3;
  868. long unsigned int _4;
  869. long unsigned int _5;
  870. long unsigned int _6;
  871. long unsigned int _7;
  872. struct List_t * _8;
  873. long unsigned int _9;
  874. volatile uint32_t * _10;
  875. long unsigned int _11;
  876. long unsigned int _12;
  877. long unsigned int _13;
  878. long unsigned int _14;
  879. long unsigned int _15;
  880. int iftmp.0_20;
  881. int iftmp.0_33;
  882. int iftmp.0_34;
  883. EventBits_t _59;
  884. <bb 2> :
  885. pxEventBits_27 = xEventGroup_26(D);
  886. xTimeoutOccurred_28 = 0;
  887. _1 = uxBitsToWaitFor_29(D) & 4278190080;
  888. if (_1 != 0)
  889. goto <bb 3>; [INV]
  890. else
  891. goto <bb 6>; [INV]
  892. <bb 3> :
  893. __asm__ __volatile__(" mov %0, %1
  894. msr basepri, %0
  895. isb
  896. dsb
  897. " : "=r" ulNewBASEPRI_60 : "i" 16 : "memory");
  898. <bb 4> :
  899. <bb 5> :
  900. goto <bb 5>; [INV]
  901. <bb 6> :
  902. if (uxBitsToWaitFor_29(D) == 0)
  903. goto <bb 7>; [INV]
  904. else
  905. goto <bb 10>; [INV]
  906. <bb 7> :
  907. __asm__ __volatile__(" mov %0, %1
  908. msr basepri, %0
  909. isb
  910. dsb
  911. " : "=r" ulNewBASEPRI_61 : "i" 16 : "memory");
  912. <bb 8> :
  913. <bb 9> :
  914. goto <bb 9>; [INV]
  915. <bb 10> :
  916. _2 = xTaskGetSchedulerState ();
  917. if (_2 != 0)
  918. goto <bb 12>; [INV]
  919. else
  920. goto <bb 11>; [INV]
  921. <bb 11> :
  922. if (xTicksToWait_32(D) == 0)
  923. goto <bb 12>; [INV]
  924. else
  925. goto <bb 13>; [INV]
  926. <bb 12> :
  927. iftmp.0_34 = 1;
  928. goto <bb 14>; [INV]
  929. <bb 13> :
  930. iftmp.0_33 = 0;
  931. <bb 14> :
  932. # iftmp.0_20 = PHI <iftmp.0_34(12), iftmp.0_33(13)>
  933. if (iftmp.0_20 == 0)
  934. goto <bb 15>; [INV]
  935. else
  936. goto <bb 18>; [INV]
  937. <bb 15> :
  938. __asm__ __volatile__(" mov %0, %1
  939. msr basepri, %0
  940. isb
  941. dsb
  942. " : "=r" ulNewBASEPRI_62 : "i" 16 : "memory");
  943. <bb 16> :
  944. <bb 17> :
  945. goto <bb 17>; [INV]
  946. <bb 18> :
  947. vTaskSuspendAll ();
  948. uxOriginalBitValue_36 = pxEventBits_27->uxEventBits;
  949. xEventGroupSetBits (xEventGroup_26(D), uxBitsToSet_37(D));
  950. _3 = uxOriginalBitValue_36 | uxBitsToSet_37(D);
  951. _4 = uxBitsToWaitFor_29(D) & _3;
  952. if (uxBitsToWaitFor_29(D) == _4)
  953. goto <bb 19>; [INV]
  954. else
  955. goto <bb 20>; [INV]
  956. <bb 19> :
  957. uxReturn_43 = uxOriginalBitValue_36 | uxBitsToSet_37(D);
  958. _5 = pxEventBits_27->uxEventBits;
  959. _6 = ~uxBitsToWaitFor_29(D);
  960. _7 = _5 & _6;
  961. pxEventBits_27->uxEventBits = _7;
  962. xTicksToWait_45 = 0;
  963. goto <bb 23>; [INV]
  964. <bb 20> :
  965. if (xTicksToWait_32(D) != 0)
  966. goto <bb 21>; [INV]
  967. else
  968. goto <bb 22>; [INV]
  969. <bb 21> :
  970. _8 = &pxEventBits_27->xTasksWaitingForBits;
  971. _9 = uxBitsToWaitFor_29(D) | 83886080;
  972. vTaskPlaceOnUnorderedEventList (_8, _9, xTicksToWait_32(D));
  973. uxReturn_42 = 0;
  974. goto <bb 23>; [INV]
  975. <bb 22> :
  976. uxReturn_39 = pxEventBits_27->uxEventBits;
  977. xTimeoutOccurred_40 = 1;
  978. <bb 23> :
  979. # xTicksToWait_16 = PHI <xTicksToWait_45(19), xTicksToWait_32(D)(21), xTicksToWait_32(D)(22)>
  980. # uxReturn_17 = PHI <uxReturn_43(19), uxReturn_42(21), uxReturn_39(22)>
  981. xAlreadyYielded_47 = xTaskResumeAll ();
  982. if (xTicksToWait_16 != 0)
  983. goto <bb 24>; [INV]
  984. else
  985. goto <bb 31>; [INV]
  986. <bb 24> :
  987. if (xAlreadyYielded_47 == 0)
  988. goto <bb 25>; [INV]
  989. else
  990. goto <bb 26>; [INV]
  991. <bb 25> :
  992. _10 = 3758157060B;
  993. *_10 ={v} 268435456;
  994. __asm__ __volatile__("dsb" : : : "memory");
  995. __asm__ __volatile__("isb");
  996. <bb 26> :
  997. uxReturn_52 = uxTaskResetEventItemValue ();
  998. _11 = uxReturn_52 & 33554432;
  999. if (_11 == 0)
  1000. goto <bb 27>; [INV]
  1001. else
  1002. goto <bb 30>; [INV]
  1003. <bb 27> :
  1004. vPortEnterCritical ();
  1005. uxReturn_54 = pxEventBits_27->uxEventBits;
  1006. _12 = uxReturn_54 & uxBitsToWaitFor_29(D);
  1007. if (uxBitsToWaitFor_29(D) == _12)
  1008. goto <bb 28>; [INV]
  1009. else
  1010. goto <bb 29>; [INV]
  1011. <bb 28> :
  1012. _13 = pxEventBits_27->uxEventBits;
  1013. _14 = ~uxBitsToWaitFor_29(D);
  1014. _15 = _13 & _14;
  1015. pxEventBits_27->uxEventBits = _15;
  1016. <bb 29> :
  1017. vPortExitCritical ();
  1018. xTimeoutOccurred_57 = 1;
  1019. <bb 30> :
  1020. # uxReturn_18 = PHI <uxReturn_52(26), uxReturn_54(29)>
  1021. uxReturn_58 = uxReturn_18 & 16777215;
  1022. <bb 31> :
  1023. # uxReturn_19 = PHI <uxReturn_17(23), uxReturn_58(30)>
  1024. _59 = uxReturn_19;
  1025. <bb 32> :
  1026. <L30>:
  1027. return _59;
  1028. }
  1029. xEventGroupCreate ()
  1030. {
  1031. struct EventGroup_t * pxEventBits;
  1032. struct EventGroupDef_t * D.6439;
  1033. struct List_t * _1;
  1034. struct EventGroupDef_t * _8;
  1035. <bb 2> :
  1036. pxEventBits_5 = pvPortMalloc (28);
  1037. if (pxEventBits_5 != 0B)
  1038. goto <bb 3>; [INV]
  1039. else
  1040. goto <bb 4>; [INV]
  1041. <bb 3> :
  1042. pxEventBits_5->uxEventBits = 0;
  1043. _1 = &pxEventBits_5->xTasksWaitingForBits;
  1044. vListInitialise (_1);
  1045. <bb 4> :
  1046. _8 = pxEventBits_5;
  1047. <bb 5> :
  1048. <L3>:
  1049. return _8;
  1050. }