ƕ��ʽ�����ģʽ������ -pg电子下载


�����ծ�����֧�����ǵĺ�����ҵ��

10Ԫ 50Ԫ





��֤�룺  ��֤��,�������?����ˢ����֤�� ����



  pg电子下载 ����    
   
 
     
   
ƕ��ʽ�����ģʽ������
 
���ߣ� ����
  1786  次浏览      19
 2021-11-17
 
�༭�ƽ�:
������ҫ����ƕ��ʽ�豸�ij�����������ܣ��۲���ģʽ�լ�ְ����ģʽ���龰ʵ���լ�ʾ����ϣ��������ѧϰ����������
���������� �ǹ�autosar ���ɻ���������alice�༭���ƽ���

ƕ��ʽ�ı�ǩ��ϊ�� ���䣬ƫӳ�����ײ㣬��դ���ţ��������c���ԣ����ϊ��������ӧ���߼��򵥡� ������aiotʱ���ĵ�������������ı䡣 оƭ��������դ��������ҵ���߼�ҳ�𽥱�ø��ӣ�����ڴ����ч�ʶ��ԣ�����ĸ��ÿ���ֲ��ҫ��խ��խ�ߣ��ի�ø��̵���ŀ���� �͸��ߵŀ�ά���ԡ� ������aiotʱ��ƕ��ʽ�豸�ij�����������ܡ�

���ģʽ

���ģʽ�ı�ǩ���߼����� ���߶ˣ��ܹ��ȡ���aiotʱ�������ģʽ��ƕ��ʽ�ܲ��������ļ𻨣����ģʽ������ϊ������ij�����ƶ����⣬����ǰ�˵ij��ϳ��ԣ��ܽ���˴������������ ���� �� ��ч ����취��

ƕ��ʽ��ҫ��c���կ�������������̣������ģʽ�����ڸ߼����ԣ�������󣩣�ŀǰ�������������ģʽ���鼮����ʹ��java ���ԣ�c������ʵ�����ģʽ�����ģʽ�������޹أ����ǽ������ķ�����java����ʵ�֣�c����ͬ������ʵ�֡�ͬ���ģ�java����ա��������ҫ��ģʽ�����������⣬c����աҳ����������������ģʽ�ǻ��б�ҫѧϰ�ġ�

ģʽ���壺���ģʽ����ծ����ijщ���������ч����취���������е����ⶼ��ƥ�䵽��ӧ�����ģʽ����ˣ�����һζ��׷�����ģʽ����ʱ���ֱ�ӵĵ�����������ч���е�����û�к��ʵ�ģʽ�����ծ�������һщ���ԭ���翪��ԭ�򣨶���չ���ţ����޸ĺرգ�

�۲���ģʽ

�龰

�ڶ���֮�䶨��һ��һ�զ����������һ������״̬�ı��ʱ�����������ķ��󶼻��զ��յ�֪ͨ��

ʵ��

��������ṩͳһ��ע��ӿڣ��լ�ע�ắ�� ���ɹ۲��߱���ʵ����observer_intf �ӿڣ�ȼ��ʹ��ע�ắ�������ӵ���ӧ�������б��у�����״̬�����ı䣬����֪ͨ�б��е����ж���

������״̬�����ı䣬��֪ͨ�����й۲��ߣ��۲��߱���ҳ���������������ƿ�ѡ�����֪ͨ

ʵ����ƕ��ʽ����͹��ŀ��

  • �豸���ķֲ�

������·��ģ���դ��·�������޷����ƣ��ʲ����ۡ��������裬�紫��������ͨ��ij���������ý���͹���ģʽ���ֻ���ӳ����֧�ֿ��������դ�����ƹ��ġ�ƭ�����裬��оƭ�ڲ������裬ͨ��ж������������ر�ʱ�����ù���ģʽ�����ƹ��ġ�

  • �豸���ѷ�ʽ
    • ��������ϵͳij����ʱ�¼�����ʱ��ϵͳ���������ѵ����¼�
    • ��������ϵͳ����˯�ߣ����ⲿ�¼����ѣ��紮�ڽ��յ�һ�����ݣ���������⵽�仯��ͨ������֪ͨоƭ
  • ϵͳ����˯�ߵ�����
    • �����������շ�������
    • ��������ҫ����������
    • ӧ�ò�״̬���ڿ��у�����ҫ�������¼���
  • ���ڹ۲���ģʽ��pm���ʵ��

pm����ṩ�ľӿ�

  1. struct pm

  2. {

  3. struct pm * next;

  4. const char * name;

  5. void (*init)( void );

  6. void (* deinit ( void );

  7. void * condition;

  8. };

  9. static struct pm pm_list;

  10. static uint8_t pm_num;

  11. static uint8_t pm_status;


  12. int pm_register ( const struct pm* pm , const char * name)

  13. {

  14. struct pm* cur_pm = &pm_list;

  15. while (cur_pm->next)

  16. {

  17. cur_pm = cur_pm->next;

  18. }

  19. cur_pm->next = pm;

  20. pm->next = null ;

  21. pm->name = name;

  22. pm_num ;

  23. }


  24. void pm_loop ( void )

  25. {

  26. uint32_t pm_condition = 0 ;

  27. struct pm* cur_pm = pm_list.next;

  28. static uint8_t cnt;


  29. /*check all condition*/

  30. while (cur_pm)

  31. {

  32. if (cur_pm->condition){

  33. pm_condition |= *(( uint32_t *)(cur_pm->condition));

  34. }

  35. cur_pm = cur_pm->next;

  36. }

  37. if (pm_condition == 0 )

  38. {

  39. cnt ;

  40. if (cnt>= 5 )

  41. {

  42. pm_status = ready_sleep;

  43. }

  44. }

  45. else

  46. {

  47. cnt = 0 ;

  48. }

  49. if ( pm_status == ready_sleep)

  50. {

  51. cur_pm = pm_list.next;

  52. while (cur_pm)

  53. {

  54. if (cur_pm->deinit){

  55. cur_pm-> deinit ();

  56. }

  57. cur_pm = cur_pm->next;

  58. }

  59. pm_status = sleep;

  60. enter_sleep_mode ();

  61. }

  62. /*sleep--->wakeup*/

  63. if (pm_status == sleep)

  64. {

  65. pm_status = normal;

  66. cur_pm = pm_list.next;

  67. while (cur_pm)

  68. {

  69. if (cur_pm->init){

  70. cur_pm-> init ();

  71. }

  72. cur_pm = cur_pm->next;

  73. }

  74. }

  75. }

����ʹ��pm�ӿ�

����

  • pm ��դ�������ե����γ�ģ�飬��������������ʱ��ֻ��ʵ�ֽӿڣ�ע�ἴ��
  • ͨ������ε������������ը��ӽ�ӧ�ò�������ע���߼�
  • ������ԣ����ժܷ����ӡ��ϵͳ��ǰϊ����˯��������ģ��
  • ͨ�������ֶλ��֣�ӧ�ÿ���ʵ��ϵͳ����˯��

ְ����ģʽ

�龰

����ʵ�����у�һ���¼�(����)��ҫ��������������ǻܳ����ij������籨�����̣���˾ա�������� ����ա���������������˶ա���������������˶�������ֱ�����󣬽��������ݽ������񣬲����ž��к˶ԣ��˶�������жͻ����������с��һ����������ſ�ֱ����������������χ���������������ܾ������õ���׼���������������������ƶ��龰���кܶ࣬������һ��wifiģ�飬ͨ��atָ�ҫ��ģ����ȷ����wifi �� ��ҫ��һ����˳�����η�������ָ�� �� ����������ģʽ ������ ��ҫ���ӵ�wifi�������룬ÿ����һ������ָ�ģ�鶼���������ý��������������ҫ�жͻ������ȷ�ԣ���ѡ���ƿ�����һ��ָ����߽����ش���

�ܽ������ǣ�һϵ��������ҫ�ϸ���ʱ�������δ�����˳���߼�������ͼ��ʾ ��

�ڴ���ϵͳ������£������߼����ժ����׵���������ʱ��ʵ�֣�ʵ�����£�

�����������£�ϊ�˱�֤ϵͳ��ʵʱ�ԣ��޷�ʹ��������ʱ��һ��ʹ�ö�ʱ�¼����״̬����ʵ�֣�

��ϵͳʵ����ȣ������ʵ�ָ��ӹ��ӣ�ϊ�˱���������ֻ��ͨ��״̬�ͷ�ʱ����ʵ��˳����ʱ���߼������կ�����ʵ�ֹ����൱��ɢ�����ڵ�������ĵ�����ɢ����3�������д������������µĺ���ǣ��޸ģ���ֲ�ij��㡣��ʵ�ʵ�ӧ���у����ƶ��߼��൱�࣬�����������ķ���ȥʵ�֣����ᵼ��ӧ�ó����ǿ��ϡ�

ʵ��

���է��֣�������龰�������ص㣺

  • ����˳��ִ�у�ֻ�е�ǰ����ִ������(�н��ۣ��ɹ�����ʧ��)������ִ����һ������
  • ǰһ�������ִ�н����ӱ�쵽��һ�������ִ�����
  • ������һщ���ԣ��糬ʱʱ�䣬��ʱʱ�䣬���դ���

ͨ��������ϣ�����ǿ��գ��������һ��ģ�ͣ�������ϊ�ڵ㣬 ÿһ������ڵ��������ԣ��糬ʱ����ʱ�����ԣ�����������������ִ�н��������ҫ����˳��ִ��һϵ������ʱ�����ν�����ڵ㴮��һ���������������у�����������ĵ�һ���ڵ㿪ʼ���у����еľ�������� ok , busy ,error ������ok, ��ʾ�ڵ��ѵ���������������ɾ����error ��ʾ���г�������������ֹͣ���у����д���ص����������û������ƿ����������ȥ��busy��ʾ���������ڵȴ�ӧ�𣬻��ߵȴ���ʱ��������������������ϵľڵ㶼ִ���꣬���гɹ��ص���

node���ݽṹ����

node�ڴ��

ʹ���ڴ�صı�ҫ�ԣ�ʵ������£�ͬһʱ�䣬���������������լ��������ľڵ����ƚ����ޣ����������൱��ġ�����һ��֧��atָ���ģ�飬����֧�ּ�ʮ��atָ���ִ��һ�����ò��������ܾ�ֻ��ʹ��3-5��ָ���ȫ����̬����ڵ㣬�������ĵ����ڴ���դ����˶�̬�����dz�ҫ�ġ�

��ʼ��node�ڴ�أ��ڴ�������нڵ㶼�����ӵ�free_list��������ڵ�ʱ����ȡ����һ�����нڵ㣬���뵽used_list , ���ҽ��뵽����������������ijһ���ڵ�ִ���꣬���ᱻ�զ����գ�����������ɾ��������used_list��ɾ����ȼ�����ӵ�free_list��

ְ�������ݽṹ����

ְ������ʼ��

ְ�������ӽڵ�

ְ����������

ְ������ӧ��

ְ����������

  1. int resp_chain_run ( resp_chain_t * chain)

  2. {

  3. resp_assert (chain);

  4. if (chain->enable)

  5. {

  6. shadow_resp_chain_node_t * cur_node = chain->node.next;

  7. /*maybe ans occur in handle,so cannot change state direct when ans comming*/

  8. if (chain->is_ans)

  9. {

  10. chain->is_ans = false ;

  11. chain->state = resp_status_ans;

  12. }

  13. switch (chain->state)

  14. {

  15. case resp_status_idle:

  16. {

  17. if (cur_node)

  18. {

  19. uint16_t retry = cur_node->init_retry;

  20. if (cur_node->handle)

  21. {

  22. cur_node->param_type = resp_param_input;

  23. chain->state = cur_node-> handle (( resp_chain_node_t *)cur_node ,cur_node->param);

  24. }

  25. else

  26. {

  27. resp_log ( "node handle is null ,goto next node" );

  28. chain->state = resp_status_ok;

  29. }

  30. if (retry != cur_node->init_retry)

  31. {

  32. cur_node->retry = cur_node->init_retry> 0 ?(cur_node- >init_retry -1 ): 0 ;

  33. }

  34. }

  35. else

  36. {

  37. if (chain->resp_done)

  38. {

  39. chain-> resp_done (( void *)resp_result_ok);

  40. }

  41. chain->enable = 0 ;

  42. chain->state = resp_status_idle;

  43. timerstop (&chain->timer);

  44. chain->timer_is_running = false ;

  45. }

  46. break ;

  47. }

  48. case resp_status_delay:

  49. {

  50. if (chain->timer_is_running == false )

  51. {

  52. chain->timer_is_running = true ;

  53. timersetvaluestart (&chain->timer , cur_node->duration);

  54. }

  55. if ( timergetflag (&chain->timer) == true )

  56. {

  57. chain->state = resp_status_ok;

  58. chain->timer_is_running = false ;

  59. }

  60. break ;

  61. }

  62. case resp_status_busy:

  63. {

  64. /*waiting for ans or timeout*/

  65. if (chain->timer_is_running == false )

  66. {

  67. chain->timer_is_running = true ;

  68. timersetvaluestart (&chain->timer , cur_node->timeout);

  69. }

  70. if ( timergetflag (&chain->timer) == true )

  71. {

  72. chain->state = resp_status_timeout;

  73. chain->timer_is_running = false ;

  74. }

  75. break ;

  76. }

  77. case resp_status_ans:

  78. {

  79. /*already got the ans,put the param back to the request handle*/

  80. timerstop (&chain->timer);

  81. chain->timer_is_running = false ;

  82. if (cur_node->handle)

  83. {

  84. cur_node->param_type = resp_param_ans;

  85. chain->state = cur_node-> handle (( resp_chain_node_t *)cur_node , chain->param);

  86. }

  87. else

  88. {

  89. resp_log ( "node handle is null ,goto next node" );

  90. chain->state = resp_status_ok;

  91. }

  92. break ;

  93. }

  94. case resp_status_timeout:

  95. {

  96. if (cur_node->retry)

  97. {

  98. cur_node->retry--;

  99. /*retry to request until cnt is 0*/

  100. chain->state = resp_status_idle;

  101. }

  102. else

  103. {

  104. chain->state = resp_status_error;

  105. }

  106. break ;

  107. }

  108. case resp_status_error:

  109. {

  110. if (chain->resp_done)

  111. {

  112. chain-> resp_done (( void *)resp_result_error);

  113. }

  114. chain->enable = 0 ;

  115. chain->state = resp_status_idle;

  116. timerstop (&chain->timer);

  117. chain->timer_is_running = false ;

  118. cur_node->retry = cur_node->init_retry> 0 ?(cur_node->init_retry -1 ): 0 ;

  119. chain_node_free_all (chain);

  120. break ;

  121. }

  122. case resp_status_ok:

  123. {

  124. /*get the next node*/

  125. cur_node->retry = cur_node->init_retry> 0 ?(cur_node->init_retry -1 ): 0 ;

  126. chain_node_free (cur_node);

  127. chain->node.next = chain->node.next->next;

  128. chain->state = resp_status_idle;

  129. break ;

  130. }

  131. default :

  132. break ;

  133. }

  134. }

  135. return chain->enable;

  136. }

��������

  • ���岢��ʼ��������
  • �������к���������ѭ���е���
  • ���խڵ����ӳ�������������
  • �ֱ�ʵ�ֽڵ�������

����

  • ʵ����������� ˳����ʱ����
  • �θ�̶ȵļ���ӧ�ó̵�ʵ�֣��û�ֻ��ҫʵ����ӧ�ĵ������� �� ���ýӿ����ӣ����ɰ�ʱ��ҫ��ִ��
  • ����ϊ�գ�����ϊ���� ������ϊӧ�𡣣���ijщ���ϣ��������ҳ�����������������˵��lapэ�飬��ʱ��ҫͨ���жϲ��������ͣ�

 

 

 

 
   
1786 �����       19
 
�������

 
����ĵ�

 
��ؿγ�

���»�ƻ�
[�ػ�]
[�ػ�]
[�ػ�]
[�ػ�]
 
��������
����fpga���칹�����ڶ�ý���е�ӧ��
����linux�ں˼ܹ�������������
linux�ں�ϵͳ�ܹ�����
dz��ƕ��ʽc�ż�����
���̼�ͨ�ţ�ipc������
���¿γ�
   
�ɹ�����
ij������ ƕ��ʽ�����ܹ�
�к���ҵij�о��� ƕ��ʽ��������ָ��
ij�����ͨ ƕ��ʽ�����߼����ʵ��
���� ƕ��ʽ�����ܹ���ơ��߼�ʵ��
ij��ҵ ����ipd��ƕ��ʽ��������
   
 
 
 
 
 
"));
网站地图