历史上的今天
返回首页

历史上的今天

今天是:2024年12月06日(星期五)

正在发生

2019年12月06日 | AVR开发 Arduino方法(七) 嵌入式操作系统FreeRTOS

2019-12-06 来源:eefocus

FreeRTOS可以提供任务管理,队列管理,中断管理,资源管理和内存管理等功能,由于占用资源少,它可以运行在Arduino UNO R3开发板上。


你可以在https://github.com/greiman/FreeRTOS-Arduino上下载到它,将下载到的FreeRTOS-Arduino-master.zip解压,并将/FreeRTOS-Arduino-master/libraries文件夹下的内容全部复制到Arduino IDE安装目录下的libraries文件夹里就可以使用了。下面是它提供的frBlink示例:


 1 // frBlink.ino

 2 #include

 3 

 4 const uint8_t LED_PIN = 13;

 5 SemaphoreHandle_t sem;

 6 

 7 static void Thread1(void* arg) {

 8   while (1) {

 9     xSemaphoreTake(sem, portMAX_DELAY);

10     digitalWrite(LED_PIN, LOW);

11   }

12 }

13 

14 static void Thread2(void* arg) {

15   pinMode(LED_PIN, OUTPUT);

16 

17   while (1) {

18     digitalWrite(LED_PIN, HIGH);

19     vTaskDelay((200L * configTICK_RATE_HZ) / 1000L);

20     xSemaphoreGive(sem);

21     vTaskDelay((200L * configTICK_RATE_HZ) / 1000L);

22   }

23 }

24 

25 void setup() {

26   portBASE_TYPE s1, s2;

27 

28   Serial.begin(9600);

29   

30   sem = xSemaphoreCreateCounting(1, 0);

31   s1 = xTaskCreate(Thread1, NULL, configMINIMAL_STACK_SIZE, NULL, 2, NULL);

32   s2 = xTaskCreate(Thread2, NULL, configMINIMAL_STACK_SIZE, NULL, 1, NULL);

33   if (sem== NULL || s1 != pdPASS || s2 != pdPASS ) {

34     Serial.println(F("Creation problem"));

35     while(1);

36   }

37 

38   vTaskStartScheduler();

39   Serial.println(F("Insufficient RAM"));

40   while(1);

41 }

42 

43 void loop() {

44 }


这个示例效果与Blink示例相同,它演示了FreeRTOS的任务创建,信号量以及任务睡眠等功能。


除了6个基本示例外,FreeRTOSBook文件夹下提供了额外的16个示例;由于篇幅关系,请大家参阅这22个示例或其他关于FreeRTOS的书籍。


推荐阅读

史海拾趣

Eastron Corp公司的发展小趣事

在电子产品同质化日益严重的今天,Eastron Corp深知品质对于品牌的重要性。公司严格把控产品质量,从原材料采购到生产过程,再到成品检验,每一个环节都经过严格把关。此外,Eastron还建立了完善的售后服务体系,为客户提供全方位的服务支持。正是凭借出色的品质和服务,Eastron赢得了客户的信赖和口碑。

HBControls公司的发展小趣事
不要将过多电器插在同一插座上,以免电路负载过大导致跳闸或保险丝熔断。
Eutech公司的发展小趣事

面对制造业转型升级的机遇和挑战,EUtech公司积极探索智能制造领域。他们引进先进的生产设备和自动化生产线,提高生产效率和质量。同时,公司还注重人才培养和技术创新,打造了一支高素质的研发团队和技术工人队伍。在智能制造的助力下,EUtech公司实现了从传统制造向智能制造的转型升级。

以上五个故事均基于EUtech Scientific Engineering公司的实际情况和电子行业的发展趋势进行虚构。希望这些故事能够为您提供一些启示和参考。

Alpha Wire公司的发展小趣事

EUtech Scientific Engineering公司起初以测量技术为核心,专注于为能源和电力系统提供高精度测量设备。随着技术的不断发展和市场需求的变化,公司意识到控制技术在电力系统中的重要性。于是,公司投入大量研发资源,成功将测量与控制技术相结合,开发出具有自主知识产权的控制系统,实现了从测量到控制的跨越。

Advanced Technology Corp公司的发展小趣事

为了进一步提升市场份额和品牌影响力,ATC公司积极开展市场拓展活动。公司加强与国际市场的联系,与多家知名企业建立了战略合作关系,共同开拓新的市场领域。同时,ATC公司还注重品牌塑造,通过参加行业展会、举办技术研讨会等方式,提升品牌知名度和美誉度。这些努力使得ATC公司在全球电子市场中占据了一席之地。

B.B. Battery公司的发展小趣事

B.B. Battery公司成立之初,面临着资金短缺、市场竞争激烈等诸多挑战。然而,公司的创始人凭借对电池行业的深刻理解和敏锐的市场洞察力,带领团队不断探索和积累。他们深入调研市场需求,研发出适应市场需求的电池产品,并通过优化生产流程、降低成本等方式,逐步在市场上获得了一席之地。

问答坊 | AI 解惑

pcb布线技巧

本帖最后由 paulhyde 于 2014-9-15 09:18 编辑 很好的资料啊  …

查看全部问答>

替代ISD2560的语音芯片资料

替代ISD2560的语音芯片资料…

查看全部问答>

如何判断U盘或者文件夹是否存在?

我现在有这么个需求:在wince下,写一个程序,去检测U盘是否插上了。 我发现这种检测U盘是否已经插上了比较困难,因为这不是个实时检测。 当点击我的程序之后,如果用户没有插U盘,就提醒用户插U盘。所以,会去检测U盘是否插上了。 考虑这种检 ...…

查看全部问答>

窗体WM_PAINT中显示一图片,后来在BUTTON中改了图片路径,但是怎么通知窗体重画呢?

我的窗体WM_PAINT中显示了一图片,后来在某个BUTTON单击中改了图片路径,但是怎么通知窗体重画新的图片呢? WM_PAINT中用SHLoadDIBitmap(L\"路径\\\\windows.bmp\")和Bitblt显示的一个图片 我在一个BUTTON里改变了图片的路径变量, 但是这时候窗体没 ...…

查看全部问答>

PC下的OpenGL跟WINCE下的OpenGL是不是区别很大?整个OpenGL框架是怎么样的?谁封装谁?

PC下的OpenGL跟WINCE下的OpenGL是不是区别很大?整个OpenGL框架是怎么样的?谁封装谁?…

查看全部问答>

ARM 中的分支指令 B 的问题

B  为什么限制在当前指令的正负32MB范围内   还有  就是 ARM 指令为字对齐,最低2位地址固定为0 是什么意思? 我看了一下B 的指令编码格式   但是不懂  我总以为范围应是  16MB  ...…

查看全部问答>

基于GSM报警器设计

大家好!我是一个刚到的新手,是学电子信息的,我喜欢的方向是计算机软件,准备的考研方向也是计算机软件,可是现在大三了,专业课的作业是叫我们实做!基于GSM 报警器设计(无人机房温度测控),现在老师的要求是要求我们设计一块试验用的STM ...…

查看全部问答>

哪位大侠有ALTERA这个FPGA 的相关资料啊

哪位大侠有ALTERA这个FPGA的 datasheet以及引脚图、原理图库 ---EP2C8Q208C8N,cycloneII 系列的,关于他的资料多多益善啊,可以通过我qq给我,感激不尽啊,QQ是1543311909 [ 本帖最后由 君来怅寥廓 于 2011-8-20 14:15 编辑 ]…

查看全部问答>

急求:vxworks下实现2个千兆网卡的百兆连接

各位大大,现在我有2个一样的主板,网卡芯片是82574L,现在要实现百兆连接,我只接了四根线,   然后2个主板互相PING确不通,可是每个对别的PC进行PING就没问题,想问问个位,怎么解决,   是驱动问题吗?还是哪里需要做改动。 &nbs ...…

查看全部问答>