📄 control.lst
字号:
174 1 config();
175 1 os_create_task (POLLED);
176 1 os_create_task (CLOCK); /* start clock task */
177 1 os_create_task (WAITFRAME);
178 1
179 1
C51 COMPILER V7.02b CONTROL 01/18/2005 21:45:44 PAGE 4
180 1 os_delete_task (INIT); /* stop init task (no longer needed) */
181 1 }
182 /******************************************************************************/
183 /* Task 2 'clock' */
184 /******************************************************************************/
185 void Getstate (void)
186 {
187 1 AreaState[0]=state0;
188 1 AreaState[1]=state1;
189 1 AreaState[2]=state2;
190 1 AreaState[3]=state3;
191 1 AreaState[4]=state4;
192 1 AreaState[5]=state5;
193 1 AreaState[6]=state6;
194 1 AreaState[7]=state7;
195 1 }
196 void clock (void) _task_ CLOCK
197 {
198 1 unsigned int count;
199 1 count=0;
200 1 while (1)
201 1 {
202 2 if(count%INTEVAL_GETSTATE==0)
203 2 {
204 3 Getstate();
205 3 lrun=!lrun;
206 3 }
207 2
208 2 /*
209 2 if(count%INTEVAL_GETANALOG==0)
210 2 {
211 2 os_send_signal (GETANALOG);
212 2 }
213 2 */
214 2
215 2 os_wait (K_TMO, INTEVAL_TICK, 0);
216 2 count++;
217 2
218 2 }
219 1 }
220
221 void waitframe (void) _task_ WAITFRAME
222 {
223 1 while (1)
224 1 {
225 2 if(istart==iend)
226 2 {
227 3 os_wait (K_TMO, INTEVAL_TICK*4, 0);
228 3 if(istart==iend)
229 3 {
230 4 os_send_signal (POLLED);
231 4 os_wait (K_SIG,0,0);
232 4 }
233 3 else
234 3 istart=iend;
235 3 }
236 2 else
237 2 {
238 3 istart=iend;
239 3 }
240 2
241 2 }
C51 COMPILER V7.02b CONTROL 01/18/2005 21:45:44 PAGE 5
242 1 }
243 /******************************************************************************/
244 /* Task 1 'command': command processor */
245 /******************************************************************************/
246 void SendError(unsigned char ErrCode)
247 {
248 1
249 1 switch(ErrCode)
250 1 {
251 2 case 1:
252 2 break;
253 2 case 2:
254 2 break;
255 2 default:
256 2 ;
257 2 }
258 1
259 1 }
260 void SendGetState(void)
261 {
262 1 unsigned char i,j;
263 1 unsigned short crcResult;
264 1 i=0;
265 1
266 1 if((RegStart+RegNum>LEN_STATE_AREA)||(RegNum==0))
267 1 SendError(1);
268 1 else
269 1 {
270 2 frameSend[i++]=Address;
271 2 frameSend[i++]=FUN_GetState_S2M;
272 2 frameSend[i++]=RegNum;
273 2
274 2 for(j=0;j<RegNum;j++)
275 2 frameSend[i++]=AreaState[RegStart+j];
276 2 crcResult=crc(frameSend,i);
277 2 frameSend[i++]=crcResult/256;
278 2 frameSend[i++]=crcResult%256;
279 2
280 2 //putchar(i);
281 2 for(j=0;j<i;j++)
282 2 {
283 3 putchar(frameSend[j]);
284 3 }
285 2 }
286 1
287 1 }
288 void polled (void) _task_ POLLED {
289 1 unsigned char i=0;
290 1 unsigned short crcResult;
291 1 while (1) {
292 2 os_wait (K_SIG,0,0);
293 2 i=0;
294 2 frameRecv[i]=(unsigned char) _getkey();
295 2 if(frameRecv[i]==Address)
296 2 {
297 3
298 3 frameRecv[++i]=(unsigned char) _getkey();
299 3 switch(frameRecv[i])
300 3 {
301 4 case FUN_GetState_M2S:
302 4 SysFun=FUN_GetState_M2S;
303 4
C51 COMPILER V7.02b CONTROL 01/18/2005 21:45:44 PAGE 6
304 4 frameRecv[++i]=(unsigned char) _getkey();
305 4 RegStart=frameRecv[i]*256;
306 4 frameRecv[++i]=(unsigned char) _getkey();
307 4 RegStart+=frameRecv[i];
308 4
309 4
310 4 frameRecv[++i]=(unsigned char) _getkey();
311 4
312 4 RegNum=frameRecv[i]*256;
313 4 frameRecv[++i]=(unsigned char) _getkey();
314 4 RegNum+=frameRecv[i];
315 4 frameRecv[++i]=(unsigned char) _getkey();//crc high
316 4 frameRecv[++i]=(unsigned char) _getkey();//crc low
317 4
318 4 i++;
319 4
320 4
321 4
322 4 crcResult=crc(frameRecv,i);//crc 校验
323 4 if(crcResult==0)
324 4 {
325 5 Send485();
326 5 SendGetState();//如果成功,发送数据
327 5 os_wait (K_TMO,50, 0);
328 5 Recv485();
329 5 }
330 4 break;
331 4 }
332 3 }
333 2 os_send_signal (WAITFRAME);
334 2 }
335 1 }
336
337
338
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 818 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 46 9
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -