历史上的今天
今天是:2024年09月25日(星期三)
2019年09月25日 | stm32 Ctext-M3内核最简单的多任务RTOS
2019-09-25 来源:eefocus
RTOS 实时操作系统,我做的是一个多任务的操作系统,可以同时运行多个任务,我这里设置的最大任务数是32个,
估计跑30多个任务的嵌入式设备很少吧,32个任务够用了。
OS我把它叫做HesOS,主要功能如下,比较简单。
1--实现多任务调度
2--实现任务调度锁
3--实现临界区保护
4--实现读取cpu使用率(这个功能比较重要的)
5--实现us延时(用于模拟如IIC总线模拟)
对于一般的嵌入式应用有这些功能,差不多够用了。
移植HesOS也非常简单,不会像其它的OS一样比较庞大,修改的地方也比较多,使用起来也复杂。
HesOS不管是移植和使用都是非常简单的,类似于PC的线程使用。
主函数初始化:系统一共跑了10个任务。

部分任务定义:

打印cpu使用量任务:

不能在所有任务里串口打印,因为串口打印非常的占用cpu,除非使用dma传输。
说一下移植,只需要实现以下代码
_uint32 fac_us;
//SysTick定时器
void set_systick(_uint32 ms)
{
fac_us=SystemCoreClock/1000000; //不论是否使用OS,fac_us都需要使用
SysTick->LOAD = ms * SystemCoreClock/1000-1;
NVIC_SetPriority(SysTick_IRQn,(1<<__NVIC_PRIO_BITS)-1);
SysTick->VAL = 0;
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk|
SysTick_CTRL_TICKINT_Msk|
SysTick_CTRL_ENABLE_Msk;
}
/*延时us
这里裁剪的原子哥的
*/
void delay_us(_uint32 nus)
{
_uint32 ticks;
_uint32 told,tnow,tcnt=0;
_uint32 reload=SysTick->LOAD; //LOAD的值
ticks=nus*fac_us; //需要的节拍数
told=SysTick->VAL; //刚进入时的计数器值
while(1)
{
tnow=SysTick->VAL;
if(tnow!=told)
{
if(tnow told=tnow; if(tcnt>=ticks)break; //时间超过/等于要延迟的时间,则退出. } }; } //滴答中断必须调用以下代码,是关于任务调度的 void SysTick_Handler() { if(now_task!=0) //如果当前任务不为空则执行任务调度 { //任务调度 tran_delay(); } } 把工程下的HesOS.lib加入工程,HesOS系统文件只有这3个
史海拾趣
|
请教下各位大虾,本人正学习LCD,遇到汉字取模的问题。 比如汉字“请”字,在书上取模写的为: 0x20,0x22,0xEC,0x00,0x20,0x22,0xAA,0xAA, 0xAA,0xBF,0xAA,0xAA,0xEB,0xA2,0x20,0x00, 0x00,0x00,0x7F,0x20,0x10,0x00,0xFF,0x0A, 0x0A,0x0A,0x4 ...… 查看全部问答> |
|
职位:中科院某所工程师 职责:(以下各项优先级从高到低,即你的能力以能胜任前面职责为优) 1 vxworks裁剪 2 BSP PowerPC系列开发 3 串口、网络驱动开发 4 多任务应用编程 5 ...… 查看全部问答> |
|
有几个问题这几天老被困扰,也许问得比较幼稚,但还请知道的人停下来,帮解惑一下.... 在还一个还没有OS的裸机上,我们用光盘安装系统过程中或者用其他的类似在光盘上的硬盘分区软件进行操作时, 可以用键盘来输入。 1.我的意思是键盘的驱动程序也被固化在BIOS上,还是在有输入时,软件上的实现每次都调用BIOS中断? 2.接1所继续的 ...… 查看全部问答> |
|
提供H.264/H.263/MPEG4/MPEG2/MPEG1视频解码器 在200MHz的ARM9开发板上测得: H.264 QCIF 60fps MPEG4 CIF 60fps H.263 CIF 70fps MPEG2 CIF 75fps MPEG1 CIF 80fps 有SDK源代码提供,欢迎到 http://www.cyansoft.com.cn/product.htm 下载评测。… 查看全部问答> |
|
进入CE后,点击右下角的Date/Time properties后,选中Automatically adjust clock for daylight saving后,点击Apply后,为什么一点反应都没有啊?在XP上选择同样的时区后,应用夏令时,时间却有改变啊!… 查看全部问答> |




