RTOSとC言語を使用して組込みソフトの製品を開発しています。
getter, setterを使って下記のように、
TaskA, TaskB間でデータの受け渡しをしたいのですが、
getter, setterを使用する際、
コピー処理が発生してCPUを無駄に使うのと
スタックを無駄に消費してしまいます。
サイズの非常に大きなデータを
getter, setterでやり取りをするため、
RAMが溢れ、スタックサイズを削減する必要性に迫られています。
getter, setterを使って、
dataへのポインタを返すことで、
コピー処理の削減、スタック使用の削減
をすることはできないでしょうか?
その場合、ポインタ経由で
dataを書き換えられてしまうため、
セマフォで排他制御ができなくなるので、
どうしていいか悩んでいます。
アドバイスいただけないでしょうか?
C
1 2int data[1000]; 3 4 5void getter(int *pData) 6{ 7 セマフォ取得 8 memcpy(pData, data, sizeof(data)); 9 セマフォ開放 10} 11 12 13void setter(int *pData) 14{ 15 セマフォ取得 16 memcpy(data, pDate, sizeof(data)) 17 セマフォ開放 18} 19 20 21 22int TaskA(void) 23{ 24 while(1){ 25 int tmp[1000]; 26 getter(tmp); 27 28 tmp[45] = 10; //一部のデータを更新 29 30 setter(tmp): //データを反映 31 } 32} 33 34 35int TaskB(void) 36{ 37 while(1){ 38 int tmp2[1000]; 39 getter(tmp2); 40 41 //tmp2を使う制御 42 } 43} 44
~~
回答2件
あなたの回答
tips
プレビュー