From 7a623479dd866f0b2b0d9556af32a69b1cc37422 Mon Sep 17 00:00:00 2001 From: Richard Barry Date: Sun, 14 Nov 2010 21:00:36 +0000 Subject: [PATCH] Start of new Win32 emulator project. Currently working but not well tested, and does not include a method for shutting down the generated processes. --- Demo/WIN32-MSVC/FreeRTOSConfig.h | 97 +++++++++++++ Demo/WIN32-MSVC/WIN32.sln | 20 +++ Demo/WIN32-MSVC/WIN32.suo | Bin 0 -> 36864 bytes Demo/WIN32-MSVC/WIN32.vcxproj | 166 ++++++++++++++++++++++ Demo/WIN32-MSVC/WIN32.vcxproj.filters | 79 +++++++++++ Demo/WIN32-MSVC/main.c | 196 ++++++++++++++++++++++++++ 6 files changed, 558 insertions(+) create mode 100644 Demo/WIN32-MSVC/FreeRTOSConfig.h create mode 100644 Demo/WIN32-MSVC/WIN32.sln create mode 100644 Demo/WIN32-MSVC/WIN32.suo create mode 100644 Demo/WIN32-MSVC/WIN32.vcxproj create mode 100644 Demo/WIN32-MSVC/WIN32.vcxproj.filters create mode 100644 Demo/WIN32-MSVC/main.c diff --git a/Demo/WIN32-MSVC/FreeRTOSConfig.h b/Demo/WIN32-MSVC/FreeRTOSConfig.h new file mode 100644 index 000000000..01a8bd564 --- /dev/null +++ b/Demo/WIN32-MSVC/FreeRTOSConfig.h @@ -0,0 +1,97 @@ +/* + FreeRTOS V6.1.0 - Copyright (C) 2010 Real Time Engineers Ltd. + + *************************************************************************** + * * + * If you are: * + * * + * + New to FreeRTOS, * + * + Wanting to learn FreeRTOS or multitasking in general quickly * + * + Looking for basic training, * + * + Wanting to improve your FreeRTOS skills and productivity * + * * + * then take a look at the FreeRTOS books - available as PDF or paperback * + * * + * "Using the FreeRTOS Real Time Kernel - a Practical Guide" * + * http://www.FreeRTOS.org/Documentation * + * * + * A pdf reference manual is also available. Both are usually delivered * + * to your inbox within 20 minutes to two hours when purchased between 8am * + * and 8pm GMT (although please allow up to 24 hours in case of * + * exceptional circumstances). Thank you for your support! * + * * + *************************************************************************** + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation AND MODIFIED BY the FreeRTOS exception. + ***NOTE*** The exception to the GPL is included to allow you to distribute + a combined work that includes FreeRTOS without being obliged to provide the + source code for proprietary components outside of the FreeRTOS kernel. + FreeRTOS is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. You should have received a copy of the GNU General Public + License and the FreeRTOS license exception along with FreeRTOS; if not it + can be viewed here: http://www.freertos.org/a00114.html and also obtained + by writing to Richard Barry, contact details for whom are available on the + FreeRTOS WEB site. + + 1 tab == 4 spaces! + + http://www.FreeRTOS.org - Documentation, latest information, license and + contact details. + + http://www.SafeRTOS.com - A version that is certified for use in safety + critical systems. + + http://www.OpenRTOS.com - Commercial support, development, porting, + licensing and training services. +*/ + + +#ifndef FREERTOS_CONFIG_H +#define FREERTOS_CONFIG_H + +/*----------------------------------------------------------- + * Application specific definitions. + * + * These definitions should be adjusted for your particular hardware and + * application requirements. + * + * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE + * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. + *----------------------------------------------------------*/ + +#define configUSE_PREEMPTION 0 +#define configUSE_IDLE_HOOK 1 +#define configUSE_TICK_HOOK 0 +#define configCPU_CLOCK_HZ ( ( unsigned portLONG ) 47923200 ) +#define configTICK_RATE_HZ ( ( portTickType ) 100 ) +#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 5 ) +#define configMINIMAL_STACK_SIZE ( ( unsigned portSHORT ) 50 ) /* In this simulated case, the stack only has to hold one small structure as the real stack is part of the win32 thread. */ +#define configTOTAL_HEAP_SIZE ( ( size_t ) 0 ) /* This parameter has no effect when heap_3.c is included in the project. */ +#define configMAX_TASK_NAME_LEN ( 16 ) +#define configUSE_TRACE_FACILITY 0 +#define configUSE_16_BIT_TICKS 0 +#define configIDLE_SHOULD_YIELD 1 + +/* Co-routine definitions. */ +#define configUSE_CO_ROUTINES 0 +#define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) + +/* Set the following definitions to 1 to include the API function, or zero +to exclude the API function. */ + +#define INCLUDE_vTaskPrioritySet 1 +#define INCLUDE_uxTaskPriorityGet 1 +#define INCLUDE_vTaskDelete 0 +#define INCLUDE_vTaskCleanUpResources 0 +#define INCLUDE_vTaskSuspend 1 +#define INCLUDE_vTaskDelayUntil 1 +#define INCLUDE_vTaskDelay 1 + + +#endif /* FREERTOS_CONFIG_H */ diff --git a/Demo/WIN32-MSVC/WIN32.sln b/Demo/WIN32-MSVC/WIN32.sln new file mode 100644 index 000000000..3f819af17 --- /dev/null +++ b/Demo/WIN32-MSVC/WIN32.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual C++ Express 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WIN32", "WIN32.vcxproj", "{C686325E-3261-42F7-AEB1-DDE5280E1CEB}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C686325E-3261-42F7-AEB1-DDE5280E1CEB}.Debug|Win32.ActiveCfg = Debug|Win32 + {C686325E-3261-42F7-AEB1-DDE5280E1CEB}.Debug|Win32.Build.0 = Debug|Win32 + {C686325E-3261-42F7-AEB1-DDE5280E1CEB}.Release|Win32.ActiveCfg = Release|Win32 + {C686325E-3261-42F7-AEB1-DDE5280E1CEB}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Demo/WIN32-MSVC/WIN32.suo b/Demo/WIN32-MSVC/WIN32.suo new file mode 100644 index 0000000000000000000000000000000000000000..39aba2fe49eb4b534e6e23b94ccd30ef088b9c2d GIT binary patch literal 36864 zcmeHQ33wdEm2MduZ17?nF5>_eMu2TRV`*f`H$)mqU~Jg}37aGn#As$DjWwDX&mmjJ zb_^th5FoIzfen`raM%UIIzZS30{*-qgw1X+$9~KAZE(U7j%FRa_3FJ>RjmUrP5$MMy;I**GQtJQQOe;X6O^M3_e+o_sNn=f z8H2=8fWt?Q91%Aa1Nl2b=+z1~?N?1}Fub1(*dm8*o109KgAN^8hmd zGXa$V7hpEP4Oj?h08{|TdmhAd0n-6hfNH=zzMdl`8j45lBrNG{fRK2p^rWEtz zQy_&Te#Yjf`LD>=3@wUZNh)2+awUv7rCg5R5NMM3lOkK*-?9SmQ-*SUG06IdlmM{T z0e2FVbf7gzg?%Vh#*}c}a_l*+KY3f0EXM|8%7I)mK#qUr*@irfIsVy(lmQ(7yhj

|bLWx*W)DF-M6IQ}UIN&y`I9Jd_*^4-kw&-;`Oj420XKE{**9REyH25|f{Eyq98 zgArB&Pm_i#U-?(y`4_c3UqK_=@8;}E!~MYtfjjUM*!X0bqsMF zuvWV!pQf~Q58`zIjwIH91LCUz8@21rh`$Qh0(fqP^7^Bf|Dpa{cl+mD*0yOiZuKjC zgS z#5gwH7!D+2$yj^Jy(*kc`yhYf*QY|!WVkIH38#A9O{6r5JAu&o%hg0E!S|X|u|$aVJWkceimCo8$eR{* z4u~jih}SF4s^sYb=LL|m3)3NgC<90XgI#_;C*_ni3@yMD$4H{IqvWFu4ng`k!Oi#2 z1pXaxE(4Dt1%y>fV~q}cCw%EL;m*F-6?+RQKcI9Wa6(y zJA^<(7g{BT_TZdsMaK-(e?H2iJa&rz5b~}8Fu2S6&;H{`dvxHK-oWOP<+TCfjYT4% z07oxTj^z+hJ8lBI@C5!aP&X|!uw3f9)HTzPu;j$35>#8hL)A*ij|u#x(IcWSsL#eR zQd+)) zKk-sWaf+Yz%PH)5g#7q>(Pos0oOSaD;P3bN=bS7{%*5Y_wr5{a4_~ddMGUifJ{d4u zt3P!yr}aM(d0R9Bd@2`4fU_NKttiwLhMEU`z?=ZT>A^Yw@*Pc->#rAiuRmi*W1|fE zO{7>}9IH%)%6*h_M@ikna{OKGt)5?9>8YxBReGu`Tys4Q^ISFcwH2yEXv_4qV?W(P;THu;nKexiQptic)RaseG zwZP-?dTKnLO*;mcF{wK?qWvRkD{~I>t7D0?t+b65Wr^x%RFp-kpXX{wsA_n3s^J;( zz~ZZicZjKK%z7^5@L+bGhg1!o)T;OD)H$yTPv&Dztj9gC`fL;C$RMPv8ShGU_A_Fo zc4f{ZX%luk^Nv^jRs%`fBIQEh9mo>h&_+V)_@dV%1dCAcJ6q3<8K73>G-|)K$Q1;3 zz2%n-I4!#D=?@*8>1!}%I4XNk2QTREP$?a+j)dH$E<(T80KD)BmV-a|=T$w6#qrOj zrL?o1Xn(8KS-nf0(>w4+3|!U=eT?*S#`mEwmMSY$PIh5TG(*4hn(n$$-vF@1F+%7w z6W;jY!wv$}kh>1X`eaki7faCxm_Lub(sTWf{hmM8KC<_XU(GoF^bbX;*}r!AsAFgA zjZ>A2(ZYUkGxd1llrs!50KW?KxeVk;TVl{GjoeL7woxvXVWd&Z?*b1{@^xWcQnN3| zUxli{)5AsIQ7-Ettz7XE$AhBQj$GtYQydo&T*dq5HFL}OR4xo4&&I)I-AofmOycc8 z-hrxhDl^Aka>A6iclBQJUk|?3dHT<8rXnY%G5uGSRz_a(p;pw7Q)-J9MZb|*^kV%` z`>BG^=;F|9M8`xyu}^gh_<_C^gVc?o7&>k5!L1W}lvm%||GIzE55C7aU8h{6Kx+WK zN@>-tz9iOD?$u;Q=U}!!S&HTqY3+Udrf1)rJ-*}Di%)D@J!$3)8Ub0fvQ?Q`_!I7S zB-e8DCA}CyjT^1`GMD_zww^OtN323!J0ujE*<>xWm5>UerPz?S4+$N5OR+ViP0zNX z{zR_=X9nRj60`}gf)f@iwinH96af{?iY5k4{b?Lhz~7CsZMz!uyfV+k*t=LcFTGQ zs*CW{i?|uB-L3Koy-t*$tOU5%uD`^r7kc zl~1j0E9i7O|K>Bg<@`&dyCo6!M|=$-KNk~%t|07g{Pct(v3NIDAqz6Er&Ih! z`&-(P^n=9J(ao7N0nVl+%(k!&g{(iHgCfUL@kNj`2kku}SuRy&%ZG_SEm*#3&(qgE zU46%qE013w{ToJ=f%bPCC2$;xu}#m$&`HB}XeWASLK=4V!AOxTDRu17do5aqKCgq| zEv^#iQqP&xwUX4=53&3(%21`0}sh7Fz@2x{jzcbD0 z?&PTUqflmca?M%vi>s*FE7^$kn&%&H?{CIYMp`( zB=$okpyyc4!SFv9)&7DLa{FK2Oda0oee%HMN2V&vo0OTOQm+_refZ_b)D`PvD& z+#?$T>Xc&L{Mk##&2UdGLxcHfXOw1)dUFd|Ut#}U2~`Q|bZlSi+~VnML~?K2O7KMr zd?Dl*-7LE1Q-`}UU%qmo|ETM~vX}GaGv1$rixw_CAY^*qbnN1}-S6oIj6d#Sr4(k6 z`wZp&!)7>{gm;UpLdKOYkw5d7_2*nGc_Z_Au4~p`uD@x9RuD+J$n1jwJ5L>eHAqtk z(MiZ{1vIXNQMLj^(|cFe`^3j{rtNQ-(!SySgE!3z&xIZ=yFtc~1+?|^>p6E1$@sIg z^Npi2uC+h)w%&ItzcTwjet+YvM-GqsX3H?t-%RQ8$~W5n zv-Im7q^-bFb=_4*sfZ$Pz4>19l-Vrt8n%b(i3XUytPKDnm))a~O- zq@*;~zTegEdqK)C-KJZwu1vR@c4u)`k$bb|!(OgaE>b2^FR0GIptyM6uY%@ z?eJG>`SL{)|GCKE6#ok3eMT$L4!>Ca%ZFXmpZ;~(tNC;4Pq@kZVeOK(*tJMs2iOXb z<;eJNaqmXJw*WT*ZU*q3ZzH}HaGQ4h9WCaw+mZe;;7-8b0lo{k3vf5!9>BeT`vBVk zI{-TYy8!nC9ssa!z6W4gLmi&i@V;Qc|F1~@)NoxaO$SldFSPRBMEsVPeh2ZdwDfz3 z-`CQ=M$AQVw#RP}|Bsgb2=T{S`ge$bucbdl{6{UFi`K)YXT|xSsr!!sG-U5V>xVl$ z-)c-+@B*IjPD zrRH*{{E3cGD#@Z`xs{!%RD9u_Imtk0s5{^4h}}v@rtQ`WbBZ%Q&+UknIHASsbCg(# zG3vtlOfGzcM}x?r_Fvk`9}ip3B2fNuRyh+uUbD#B_vlMVJ*8dQ;jiv{D|dqUd8TMO zz$yN3BJUV7E`lBYc_LfhUn&1-PdUYZ3-Z3Am1u{b`?#$F_dlP73}pbP_`ia@l+O&e zX!^IVzi<~F_l;+A_$qb1Q0z(3ca!`)>;3$;9@iSE`3~0VVA0fXBcDYh zrDY9vEH=U=(F%`g6Rb%O)|}SkPnVr$JLjPfk7;-<_UNvsCmaaBJ*Ib)+?SlM$NWim zci-u)K&*R?wqP4d%;`?HaiW>yDKF2j1=7-^@7(A&qA!f+L%gcZ#vI(U+=A;`JmE;? zNbssQAy-!eC?SHKf86!VYkI-NNot-k;qxx!j^QnqBhEpygnBq@j2pYhz zvu##E&cFSse=iD@^Pe653L6WU?SBr+lb%5(u`C zIMBbSp>dQt#s4GZZ3Hmbx4-oWD5U-00AAYL4D?P8-TIt3t2rFIHqAa?asGG%W>xOT z5PsW%Ic>@HG%A2# zRU1J)d#d1N&LWn%#M!odD;b-MbDucdB5ij68aLN2EZz3}7tK~9!sQnq}$gR>TdK$JA9oXf4sG_?-Zh?ib@ho z6m^vuU=w+jr$inQQE11TQ%8HsIO?CZGG_tqB}Drn)7cj z^k)UO4)dlsrI&99Vdf56@ol_YH0rEpuA$l=HL8CZ^{>s2IH%Bao0;B7v9DY|{3gDO zH>v}Qqjpv+_#;IJERJ8yN?i6HhWvYQ#9>46{lpuf1&_+#TxZ`3lfN^BI;=OTe(*?l zF>`tD$;Y;B``wlsUDw^({EyF`?Vaz&geWy^8EdE6jQiq+?k!Jy=CZTI_bgiA-{q3EC}-cklT66BEw)^uVDP7fqV}+*Yk6jkV&=69&e#WtV6% z_NMz@a)xXw;Vj%7K6OZyUGgjSHv#c3WBOpEgt;4SJ3B5uC!Bj1>CCt~q&< ztLsqPtaE3*chP}Ki!L6&^V-Xn=A<7tM-2VO_U}~w;jE>v-Ffi&yXG!=_0UJ|iNRd$ zFZS(j5bQJfF2HOT+(i$1zTusG+bQc_?fFSlY}wDJ z$k|5P@}>V951g)l@vA;of%2DA@kD?aRaUvhv)>}(el!OA`djaS1b)-V7NuJMeuBr& z@k`G{?lM__&Jb)Rr}h5>^4=qh%l_C|ZWp%s==sCTo`_E0`R6a}{ovxOIwvl9nM>YA zHc(07xw8CUAQ2i!vHS}qDf5Gex#>3_7Of5ZaK}f7OIIzJ>`&J0I&{wox#$lnrO=%C z-LVd&xZ=(O5mXiR??J9Fa{M`_KbEnCaMXrfe|dE6=Sv@$lzMpLL*w?H3CWPv1G1BK z*^%i5rqCH04~p6T;VuW`(GsbTN^O;U*2UMQA9Q4;59JPXNvnD1iTDQQ(5$HB^F}#2 z4{HAYOeV{WUjKEqfNuCYKaJo#r+LiFaU;igZi`gxg`I@aKl=S4&Nlj9OW{8^TTkLY zaL8T5x%>;(-ya@WA9!5d(?+UAFJj3^*)k0B+qgt3{y)L!_lI(SHM;NPG}_9L*oiN{ z4r{yOsSM5cYs_-QiSF>#kH0o^{<58mHz!`}+VR2<0BioWZzeK#U4?8x$k#*=BruP*0SqRmEtIQ2dH{i$NU zKQ;RO9PU6fdZu||wiPo7za+sKPs}7IgJ%ch`#FE@=YK}m|DA2Y%4c!u-(DW$;R_o{kS9`Oy(I2nHIM67=GN{GVr4?%#@w~(iEr&gR`~3&RyAb6$#n1H;r}!)F z&wrTgO08O!5jo;!%N+fC$a>4rzc({;lSc@ds|3Y;8fGvF;-Qpu7M75kM}oQI z&7x*!I$Or_t}&M^S>7M*|7^ddb^i~~y3uE29mk1hnw)nfKpX?G-hWx>I+)<{;=iJv IYsLEi0Ga20X8-^I literal 0 HcmV?d00001 diff --git a/Demo/WIN32-MSVC/WIN32.vcxproj b/Demo/WIN32-MSVC/WIN32.vcxproj new file mode 100644 index 000000000..789455967 --- /dev/null +++ b/Demo/WIN32-MSVC/WIN32.vcxproj @@ -0,0 +1,166 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {C686325E-3261-42F7-AEB1-DDE5280E1CEB} + RTOSDemo + + + + Application + false + MultiByte + + + Application + false + MultiByte + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + .\Debug\ + .\Debug\ + true + .\Release\ + .\Release\ + false + + + + .\Debug/WIN32.tlb + + + + + Disabled + ..\..\Source\include;..\..\Source\portable\MSVC-MingW;..\Common\Include;.;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0400;WINVER=0x400;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + .\Debug/WIN32.pch + .\Debug/ + .\Debug/ + .\Debug/ + Level4 + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c09 + + + .\Debug/RTOSDemo.exe + true + true + .\Debug/WIN32.pdb + Console + MachineX86 + + + true + .\Debug/WIN32.bsc + + + + + .\Release/WIN32.tlb + + + + + MaxSpeed + OnlyExplicitInline + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + true + .\Release/WIN32.pch + .\Release/ + .\Release/ + .\Release/ + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c09 + + + .\Release/WIN32.exe + true + .\Release/WIN32.pdb + Console + MachineX86 + + + true + .\Release/WIN32.bsc + + + + + + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/WIN32-MSVC/WIN32.vcxproj.filters b/Demo/WIN32-MSVC/WIN32.vcxproj.filters new file mode 100644 index 000000000..99f5959de --- /dev/null +++ b/Demo/WIN32-MSVC/WIN32.vcxproj.filters @@ -0,0 +1,79 @@ + + + + + {19ff1a34-36de-4c48-9d10-3fb1fa0d1fa4} + h;hpp;hxx;hm;inl + + + {38712199-cebf-4124-bf15-398f7c3419ea} + ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe + + + {af3445a1-4908-4170-89ed-39345d90d30c} + + + {f32be356-4763-4cae-9020-974a2638cb08} + *.c + + + {a60060e3-3949-4f60-b025-cb84164ae9ed} + + + {34567deb-d5ab-4a56-8640-0aaec609521a} + cpp;c;cxx;rc;def;r;odl;idl;hpj;bat + + + + + Demo App Source + + + FreeRTOS Source\Source + + + FreeRTOS Source\Source + + + FreeRTOS Source\Source + + + FreeRTOS Source\Source + + + FreeRTOS Source\Source + + + + + Header Files + + + Header Files + + + FreeRTOS Source\Include + + + FreeRTOS Source\Include + + + FreeRTOS Source\Include + + + FreeRTOS Source\Include + + + FreeRTOS Source\Include + + + FreeRTOS Source\Include + + + FreeRTOS Source\Include + + + FreeRTOS Source\Include + + + \ No newline at end of file diff --git a/Demo/WIN32-MSVC/main.c b/Demo/WIN32-MSVC/main.c new file mode 100644 index 000000000..b5b7d497b --- /dev/null +++ b/Demo/WIN32-MSVC/main.c @@ -0,0 +1,196 @@ +/* + FreeRTOS V6.1.0 - Copyright (C) 2010 Real Time Engineers Ltd. + + *************************************************************************** + * * + * If you are: * + * * + * + New to FreeRTOS, * + * + Wanting to learn FreeRTOS or multitasking in general quickly * + * + Looking for basic training, * + * + Wanting to improve your FreeRTOS skills and productivity * + * * + * then take a look at the FreeRTOS books - available as PDF or paperback * + * * + * "Using the FreeRTOS Real Time Kernel - a Practical Guide" * + * http://www.FreeRTOS.org/Documentation * + * * + * A pdf reference manual is also available. Both are usually delivered * + * to your inbox within 20 minutes to two hours when purchased between 8am * + * and 8pm GMT (although please allow up to 24 hours in case of * + * exceptional circumstances). Thank you for your support! * + * * + *************************************************************************** + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation AND MODIFIED BY the FreeRTOS exception. + ***NOTE*** The exception to the GPL is included to allow you to distribute + a combined work that includes FreeRTOS without being obliged to provide the + source code for proprietary components outside of the FreeRTOS kernel. + FreeRTOS is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. You should have received a copy of the GNU General Public + License and the FreeRTOS license exception along with FreeRTOS; if not it + can be viewed here: http://www.freertos.org/a00114.html and also obtained + by writing to Richard Barry, contact details for whom are available on the + FreeRTOS WEB site. + + 1 tab == 4 spaces! + + http://www.FreeRTOS.org - Documentation, latest information, license and + contact details. + + http://www.SafeRTOS.com - A version that is certified for use in safety + critical systems. + + http://www.OpenRTOS.com - Commercial support, development, porting, + licensing and training services. +*/ + +#include +#include +#include "task.h" +#include "queue.h" + +/* Task priorities. */ +#define mainSTDOUT_TASK_PRIORITY tskIDLE_PRIORITY + +/* Stack sizes. */ +#define mainSTDOUT_TASK_STACK_SIZE ( configMINIMAL_STACK_SIZE * 4 ) + +/* File scope variables. */ +static volatile unsigned long ul1 = 0, ul2 = 0; +static xQueueHandle xStdoutQueue = NULL; + +/* Task function prototypes. */ +static void prvTask1( void *pvParameters ); +static void prvTask2( void *pvParameters ); +static void prvStdoutTask( void *pvParameters ); + +/* Create a queue on which console output strings can be posted, then start the +task that processes the queue - printf()'ing each string that is received. */ +static void prvStartStdoutTask( void ); + +/* Post a message for output by the stdout task. Basically queues the message +pointed to by pcTextToPrint for output to stdout in a thread safe manner. */ +void vMainConsolePrint( const char *pcTextToPrint, portTickType xTicksToWait ); + +volatile unsigned long ulIdleCount = 0UL, ulT1Count = 0UL, ulT2Count = 0UL, ulTicks = 0UL; +/*-----------------------------------------------------------*/ + +int main( void ) +{ + prvStartStdoutTask(); + xTaskCreate( prvTask1, "t1", 100, NULL, 0, NULL ); + xTaskCreate( prvTask2, "t2", 100, NULL, 0, NULL ); + vTaskStartScheduler(); + + /* Should never get here unless there was not enough heap space to create + the idle and other system tasks. */ + return 0; +} +/*-----------------------------------------------------------*/ + +void vMainConsolePrint( const char *pcTextToPrint, portTickType xTicksToWait ) +{ + if( xStdoutQueue != NULL ) + { + xQueueSend( xStdoutQueue, &pcTextToPrint, xTicksToWait ); + } +} +/*-----------------------------------------------------------*/ + +static void prvStartStdoutTask( void ) +{ +const unsigned long ulQueueLength = 20; + + /* Create the queue on which starings for output will be stored. */ + xStdoutQueue = xQueueCreate( ulQueueLength, ( unsigned portBASE_TYPE ) sizeof( char * ) ); + + if( xStdoutQueue != NULL ) + { + /* Create the task that processes the stdout messages. */ + xTaskCreate( prvStdoutTask, "stdout task", mainSTDOUT_TASK_STACK_SIZE, NULL, mainSTDOUT_TASK_PRIORITY, NULL ); + } +} +/*-----------------------------------------------------------*/ + +static void prvStdoutTask( void *pvParameters ) +{ +char *pcString; + + /* Just to remove compiler warnings. */ + ( void ) pvParameters; + + for( ;; ) + { + /* This task would not have been created if the queue had not been created + successfully too. Also, because of the FreeRTOSConfig.h settings using + portMAX_DELAY in this case means wait forever, so when this function returns + we know there is a string to print. */ + xQueueReceive( xStdoutQueue, &pcString, portMAX_DELAY ); + printf( "%s", pcString ); + //fflush( stdout ); + } +} +/*-----------------------------------------------------------*/ + +static void prvTask1( void *pvParameters ) +{ +const char *pcTask1Message = "Task 1 running\r\n"; +const portTickType xTicksToDelay = 1000 / portTICK_RATE_MS; + + /* Just to remove compiler warnings. */ + ( void ) pvParameters; + + for( ;; ) + { +// ul1++; + vMainConsolePrint( pcTask1Message, 0 ); + vTaskDelay( xTicksToDelay ); + ulT1Count++; + } +} +/*-----------------------------------------------------------*/ + +static void prvTask2( void *pvParameters ) +{ +const char *pcTask2Message = "Task 2 running\r\n"; +const portTickType xTicksToDelay = 500 / portTICK_RATE_MS; + + /* Just to remove compiler warnings. */ + ( void ) pvParameters; + + for( ;; ) + { +// ul2++; + vMainConsolePrint( pcTask2Message, 0 ); + vTaskDelay( xTicksToDelay ); + ulT2Count++; +// taskYIELD(); + } +} +/*-----------------------------------------------------------*/ + +void vApplicationIdleHook() +{ +const unsigned long ulMSToSleep = 5; + + /* Sleep to reduce CPU load, but don't sleep indefinitely if not using + preemption as as nothing will cause a task switch. */ + #if configUSE_PREEMPTION != 0 + { + SleepEx( INFINITE, TRUE ); + } + #else + { + SleepEx( ulMSToSleep, TRUE ); + } + #endif + + ulIdleCount++; +}