「再入国」の問題を回避する体系的な方法はありますか? (組み込みシステム)[閉じた

StackOverflow https://stackoverflow.com/questions/2132253

質問

Cを使用してARMコアにシステムを構築しています(つまり、組み込みシステム)。問題は、すべての再入国バグが削除されると確信するように、正式な方法で再突入の問題を回避するにはどうすればよいですか。これは実用的な願いではないかもしれませんが、どのシステムにとっても確かに重要だと思います。

議論のためだけに、UML図を描くか、完全な状態マシンを持っていることは良いスタートになると思います(ただし、システム全体が開発された後にそれを生成する方法は?)。 State Machine / UML図を使用して分析を行う方法に関する提案はありますか?

役に立ちましたか?

解決

@Arexanderによって言及されているように、WebPartはまだWebPartギャラリーに残ります。WebPartギャラリーのWebPartを探してそこからそれを削除するための特徴考えられるイベントにコードを書く必要があります。次のことは、イベントで書かれる必要があるサンプルコードです。

int itemToDelete = 0;
SPList list = parentSite.GetCatalog(SPListTemplateType.WebPartCatalog);
foreach (SPListItem item in list.Items)
{
    if (item["Web Part"].ToString().ToLower() == "name.webpart")
    {
        itemToDelete = item.ID;
        break;
    }
}
if (itemToDelete > 0)
{               
    SPListItem item = list.GetItemById(itemToDelete);
    item.Delete();
}
list.Update();
.

他のヒント

あなたが何かを疑うなら、クイック修正:

int some_func(int x, int y)
{
    static volatile int do_not_enter_twice = 0;
    assert(!(do_not_enter_twice++));

    /* some_func continued */

    do_not_enter_twice--;
    return whatever;
}

より長い答え:
いくつかのツールを使用してaを作成します グラフを呼び出します そこから手動で続けます。

計算できるツール 巨大 コールグラフはです DMSソフトウェアリエンジニアリングツールキット およびそのcフロントエンド。 Cフロントエンドは、Cコードを解析するために使用されます。 DMSには、制御およびデータフロー分析、ポイントツー分析、およびコールダイレクトとコールインディレクトスルーポインターの事実を計算するための機械が組み込まれています

DMSは、cソースコードシステムのコールグラフを構築するために使用されています 3500万 Cコードの行(= 250,000関数)、そしてそのコールグラフから情報を抽出します。このような大きなグラフを構築する際の重要な問題は、ポイントツー情報を実用的に正確に計算することです(これを完全に行うことには強い理論の制限があります)。

あなたの場合、抽出する情報は、他の著者が示すように、「サイクルはありますか?」です。このコールグラフで。

この規模では、これを手作業でやりたくないので、制作ビルドの準備をするたびにやり直す必要があります。したがって、チェックを機械化することは非常に理にかなっています。

これはあなたがあなたのサンプルデータに求める出力を生成します。

Option Explicit
Sub GenerateCalendar()

  Dim DateCrnt As Date
  Dim DayOfWeekCrnt As Long
  Dim HoursToPlace As Long
  Dim RowDestCrnt As Long
  Dim RowSrcCrnt As Long
  Dim RowSrcLast As Long
  Dim SrcWork() As Variant

  ' Assume source data starts in row 2 of columns A and B of Worksheet Calendar 1
  With Worksheets("Calendar 1")
    ' Find last used row in column A
    RowSrcLast = .Cells(Rows.Count, "A").End(xlUp).Row
    SrcWork = .Range(.Cells(2, "A"), .Cells(RowSrcLast, "B")).Value
  End With

  ' SrcWork is now a 2D array containing the data from Calendar1.
  ' Dimension 1 holds the rows.  Dimension 2 holds to columns.

  ' Initialise control variable for SrcWork
  RowSrcCrnt = 1
  DateCrnt = SrcWork(RowSrcCrnt, 1)
  HoursToPlace = SrcWork(RowSrcCrnt, 2)
  RowSrcCrnt = 2

  ' Assume output data is to be placed in in Worksheet Calendar 2 in columns
  ' A and B starting at row 2
  RowDestCrnt = 2

  With Worksheets("Calendar 2")
    Do While True
      ' DateCrnt identifies the next date to output.
      ' HoursToPlace identifies the unplaced hours
      With .Cells(RowDestCrnt, 1)
        .Value = DateCrnt
        .NumberFormat = "ddd d mmm yyy"
      End With
      If HoursToPlace > 8 Then
        .Cells(RowDestCrnt, 2).Value = 8
        HoursToPlace = HoursToPlace - 8
      Else
        .Cells(RowDestCrnt, 2).Value = HoursToPlace
        HoursToPlace = 0
      End If
      RowDestCrnt = RowDestCrnt + 1
      If HoursToPlace = 0 Then
        ' No more hours to place from last row of SrcWork
        If RowSrcCrnt > UBound(SrcWork, 1) Then
          ' There are no used rows in SrcWork.  Finished
          Exit Do
        End If
        ' Extract next row from source data.
        DateCrnt = SrcWork(RowSrcCrnt, 1)
        HoursToPlace = SrcWork(RowSrcCrnt, 2)
        RowSrcCrnt = RowSrcCrnt + 1
      Else
        ' More hours to place. Set DateCrnt to the next weekday.
        Do While True
          DateCrnt = DateAdd("d", 1, DateCrnt)   ' Add 1 day to DateCrnt
          DayOfWeekCrnt = Weekday(DateCrnt)
          If DayOfWeekCrnt >= vbMonday And DayOfWeekCrnt <= vbFriday Then
            ' Have week day
            Exit Do
          End If
        Loop
      End If
    Loop
  End With

End Sub
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top