关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7818|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
' j8 L6 u- F8 w' J6 F
4 ]* Z! ~3 o0 x; ]) W+ f+ a# K+ a    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256" p; s* a2 d$ g' V- g  Z9 d# U

- j+ p  {# U6 e; r0 p其他程序段。。。。。! S, n$ i2 F& c7 ]+ t/ ?: i

2 ?/ c5 x: r; |0 g- p   free(x_d);
- ^# r% J7 s5 n' G3 X4 _; @( r( c, F: @, [- ^) r9 S
使用DSP侧单独调试功能,验证动态申请没有问题,
6 v. j+ T3 H5 X' ~5 Y/ P+ U; H% F8 r
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
4 d1 W4 G. ]0 ~) C

+ N7 `2 {, C, {2 k* F' n) D. h  n, E
$ d5 _' U( W4 g" {7 Y4 l7 V# r8 y& {
4 k+ Z, ?! n3 z/ w5 L
3 D, q+ i  i1 j2 b$ i  m
% S9 y$ \. h& `. {, p& m
% ]% L" Q' n+ h1 C! d' D1 A
2 y3 z6 k3 p7 F# k6 S; c$ @
' n) g6 K- ]  c" \0 {% i( k  ]

: `9 {' f# O7 }3 C" ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
' _8 |  L, Z8 R8 LProgram.heap = 0;
$ W* ]+ {9 H" @9 c- D1 ~Program.argSize = 100;  /* minimum size */9 E# c4 y8 P# `3 J
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */# m4 Y2 M4 [8 R/ C! g
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
: G9 ~8 L; `+ \+ hvar heapMemParams = new HeapMem.Params();3 ]4 ^; B0 H- \3 ^9 O9 T4 G
heapMemParams.size = 0x4000;
% s  R6 N1 H2 k; w  U* }" s9 ~" U4 ^* Z1 n7 B1 `. t6 U& u  ?4 z+ U
var Memory = xdc.useModule('xdc.runtime.Memory');7 ~4 n0 n! ]* z$ ^' C2 D& p+ N- f
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);0 |0 m3 v% v9 D/ r. r$ J

7 h% u1 X" R6 _; m9 }: o+ M; N我大约calloc  每次共计大小为5K*16bits,
: w# J& b% Y" n2 Q而默认配置才0x4000、需要改大。
) F: c* r! P+ e* t: m' R' R: D0 q* y
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明7 y- }  Z$ z9 Y/ K/ q* K  A0 A9 ~
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下% f3 X. ?1 r. F. ?3 R& G
(不过疑惑的是,为何单独DSP仿真就没有问题呢?); R& x1 ]" j3 W

3 a6 z- \) E3 K* a% U$ ], m是不是需要在DSP.CFG中进行配置! `2 P. n3 z# K9 G: ~
我现在的配置为7 I2 n' Q, z' x- e, k8 A( ?2 d
6 b! l! l/ Z* f: H0 R0 n
/*
" r$ p, W, h3 S4 Q. y! \ *  ======== Operating System Configuration ========
$ k+ B& }; R1 i- C( Q  Z: e2 X */
5 L! D7 N3 ?8 r) e  @7 C% ^8 \5 H& p5 b2 C) `! B
/* no rts heap */! {; |7 c; T6 x3 @
Program.heap = 0;
: o/ P3 i" C" q9 g" UProgram.argSize = 100;  /* minimum size */. K8 y( a# R! ^
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
5 g7 g3 e6 l! X% B4 A$ E# a9 b/ a+ Z; D+ e3 E( g2 t) K" t6 s& h
/* create a default heap */  m$ P7 M  e6 {
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& o  p) Q7 s2 _: E% U
var heapMemParams = new HeapMem.Params();% `6 J" E* e! r5 q9 q0 r& Y0 t' o
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
& J' j: V  G% [6 C1 f2 x2 \
( b( q7 b6 q  b# A7 K: o) |3 H! b
var Memory = xdc.useModule('xdc.runtime.Memory');
# @, _) v4 H5 H* EMemory.defaultHeapInstance = HeapMem.create(heapMemParams);2 S9 A2 P% P) ?# O7 }

7 e4 u0 ~2 M4 s$ G! U9 |/* configure System module *// ^$ U/ B6 E5 [7 ?+ a1 T7 G
var SysMin = xdc.useModule('xdc.runtime.SysMin');
$ v1 Y- O6 l* P, L3 a8 xSysMin.bufSize = 0x1000;* Y2 r4 i' `1 x
SysMin.flushAtExit = false;
) V4 [3 _+ ~5 f0 m' Z' @5 E" A; H3 Z1 r; y6 q) a
var System = xdc.useModule('xdc.runtime.System');. w" o8 C- L0 W9 K7 r
System.SupportProxy = SysMin;
1 ]3 U. s; i2 F/ k0 s+ J! V- [- [9 ?3 }6 k; P3 [( D2 G
/* configure SysBios to use the lower half of Timer 1 */: z/ H. |; ], V0 |0 _$ {- f
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
0 d4 ^; ?3 P! Y; D* @7 G: Ovar Clock = xdc.useModule('ti.sysbios.knl.Clock');
7 I* t7 ?2 s* _: l6 H) RTimer.timerSettings[1].master = true;* Q" d: j. \# k; p" M! _
Timer.defaultHalf = Timer.Half_LOWER;
- I* a  a6 v- P! qClock.timerId = 1;( ?, J6 f# P4 ]8 a' z) y7 U5 X8 ?
7 h; v# W5 R6 z$ B9 u# p
* m5 e2 j! Z2 k- `- ^% i% {. a
/*
7 M) ~3 G0 d+ T8 A+ | *  ======== Miscellaneous Configuration ========
- |( T7 W( \( F1 x7 n */) @2 A2 |' o+ L
- q4 ?" U# p: u/ S3 j
/* set default diags mask */7 q% F, P# E9 I) {. X( P" E
var Diags = xdc.useModule('xdc.runtime.Diags');
4 O* R5 F! j6 Q! nvar Defaults = xdc.useModule('xdc.runtime.Defaults');  F2 c- z  }1 x
  ]8 @7 V7 X& y* ?( i) Q6 [( o
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;& m7 Q, a" E2 ?* V- t+ i
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
: D1 Y' d3 M. _/ [4 g0 ^Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;, w+ p- _- o7 K2 @% {) J! l7 _6 P
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */3 i7 l3 N1 k' l* E/ \
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */& p  x3 J! y" L' H5 l
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;3 h7 o. B! o; K- F
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
2 W9 t1 X; F5 Q5 }Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;% L$ C: O, f6 r/ l  _. y
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;! Q; C( B5 g4 Y: o5 F7 r
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
+ `: @  P! Q0 N. ?; {4 DDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
2 c, }, X. `' C5 iDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;$ v8 I  N( c  `
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;4 d5 r# e3 |% a4 y
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
. F9 c3 ^' _  A& ~5 q
$ Y0 z6 [- A! D. m9 V% z/* override diags mask for selected modules */7 T& g2 k+ H8 x. J* Y
xdc.useModule('xdc.runtime.Main');3 I/ P  r" [% Q7 X' W3 g
Diags.setMaskMeta(
  y- ]: y2 b; t) O1 h+ B0 t    "xdc.runtime.Main",
1 a- u! ~7 t* t. W6 p2 u+ _) @    Diags.ENTRY | Diags.EXIT | Diags.INFO,, K$ E" s" W6 R' I7 `/ l
    Diags.RUNTIME_ON
0 F, O" n$ n: D1 Y/ }% V$ y);0 G0 K2 v* E5 F7 C' r  a
* ]9 ?5 F9 G4 e( H. }* v. ?8 X; W
var Registry = xdc.useModule('xdc.runtime.Registry');
6 I& e6 C& y5 s2 P) M0 B" eRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
% n. o( @8 l0 f" P- aRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;# E/ P$ N, {! |  n, s
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
* `1 [9 ^9 P* c" ARegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
1 A, T# F# u: i8 D, P# G( A+ x+ X
/* create a logger instance */$ M4 y  z- U9 V5 b  v
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
1 q, _+ m  f; j/ X: uvar loggerBufP = new LoggerBuf.Params();8 H2 \% ~& a1 {( D1 ?5 n) o. y
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory *// n& C4 n9 G5 t. O
loggerBufP.bufType = LoggerBuf.BufType_FIXED;* ?4 `. w2 G  V7 D( n7 M! U+ R

$ v# v; c8 C) Lvar appLogger = LoggerBuf.create(loggerBufP);
  G" |7 u- ]! Q7 @% Q; l1 sappLogger.instance.name = "AppLog_Core1";
$ ~# N3 L* T0 a1 P# u4 A; j4 ADefaults.common$.logger = appLogger;+ `; v- `% v2 L! B! a6 @
Memory.defaultHeapSize = 0x8192;   
4 a1 T4 S; X. Q* a) gIdle.idleFxns[0] = "&LEDStatus";
4 R& q/ e3 t% p7 j$ h, z, T" kCache.initSize.l2Size = Cache.L2Size_32K;
: R% G9 V: Z4 }0 K; F' [5 r+ ]
, ?* L; h& G# S$ ^0 X$ y% O/ \2 P
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-2-27 00:35 , Processed in 0.043763 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表