讨论实现单片机程序架构(STC15W204S单片机)
来源:互联网 发布:机顶盒打开软件下载 编辑:程序博客网 时间:2024/06/06 01:05
对于单片机来说,大家都不陌生,而且从大学开始的时候,我们这一代就开始从郭天祥的51单片机,虽然说这本书作为入门级别是非常好,但是如果真的要出来工作的时候,确实需要吸收好多知识才能胜任工作,之前看过一篇文章叫
《浅谈单片机应用程序架构》,我就开始想着如何实现里面的功能代码,这位大神没有直接给出源代码,但是都十分详细地描述了如何实现,大家可以先看下:
但是在实践中遇到过不小的问题:比如可能因为keil的原因,里面使用结构体数组的时候会出现莫名bug,
TaskComps[i].Timer = TaskComps[i].ItvTime; //TaskComps[i].ItvTime会出现无法赋值给TaskComps[i].Timer
开始初始化:
// 任务结构
{
uint8 Run; // 程序运行标记:0-不运行,1运行
uint8 Timer; // 计时器
uint8 ItvTime; // 任务运行间隔时间
void (*TaskHook)(void); // 要运行的任务函数
} TASK_COMPONENTS; // 任务定义
对应的是Run=0,Timer=8,ItvTime=8,函数名operation();
开始运行到函数:
仿真的数值是:
再运行:
仿真数值:
TaskComps[i].Timer = TaskComps[i].ItvTime; //TaskComps[i].ItvTime会出现无法赋值给TaskComps[i].Timer
考虑下是否是keil优化级别,但是貌似也没有关系。
考虑keil的优化级别,所以决定来个一个局部静态变量来存储TaskComps[i].ItvTime;
void core(void)
{
unsigned char core_num;
static unsigned char ItvTime;//局部静态变量
for(core_num=0;core_num<TASKS_MAX;core_num++)
{
if(TaskComps[core_num].Timer)
{
TaskComps[core_num].Timer--;
if(TaskComps[core_num].Timer==0)
{
ItvTime=TaskComps[core_num].ItvTime;
TaskComps[core_num].Timer=ItvTime;
TaskComps[core_num].Run=1;
}
}
}
}
这样就可以解决得了:
TaskComps[i].Timer = TaskComps[i].ItvTime;
TaskComps[i].ItvTime赋值给TaskComps[i].Timer
0 0
- 讨论实现单片机程序架构(STC15W204S单片机)
- 讨论单片机
- 单片机程序架构(一)时间片轮询
- 单片机程序架构--时间片轮询法
- 单片机程序架构--时间片轮询法
- 单片机架构
- 单片机程序
- 单片机程序
- 嵌入式单片机程序架构之顺序结构
- 嵌入式单片机程序架构之时间片轮询法
- 51单片机j基础C程序架构
- (单片机)显示温湿度程序
- STC51单片机实现蓝牙无线下载程序
- 一个单片机C 程序 出租车计价器实现
- STC12单片机实现自动下载程序
- 单片机
- 单片机
- 单片机
- mysql 学习---->数值计算、逻辑判断、范围选择、位运算
- java_web转发和重定向的区别
- 输入流和输出流
- dao层的实现类中的配置BaseDao,所有的DaoImpl可以继承此类
- 修改SCAN IP后不能通过SCAN IP连接实例
- 讨论实现单片机程序架构(STC15W204S单片机)
- [144]Binary Tree Preorder Traversal
- Configure FTP with IIS Manager Authentication in IIS 7
- Android开发中,fragment无法找到Layout文件问题的原因与解决
- URAL 1156 Two Rounds (DFS二分染色 + 分组背包)
- Canvas Scaler
- 最大子序列和问题的解(共4种,层层推进)
- linux配置JAVA环境
- ECharts Y 轴 倒置