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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
; w% T6 b6 w+ R8 W3 G9 ~4 S" b) r) \' m9 |) i
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2564 C6 G9 y' \8 o% i  @  @# H

4 W3 `4 |& u5 w. D2 d" \其他程序段。。。。。3 ~2 W. _* y% k7 u, x+ U5 L
' ?( g% {- e/ X; f3 a! `
   free(x_d);
; I- Y6 Q4 |; W# t) D, u+ \5 b5 \6 k; [. g+ L# a0 d
使用DSP侧单独调试功能,验证动态申请没有问题,  Z: c+ `' w- |8 }8 f! X% k

5 P& ?/ [* @" t/ b* ^但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。) Q1 ^1 k! \- a( I  p1 {
  N: e5 u$ ~" N# o/ {1 g1 y
/ |! P  {+ [/ B: v
/ n2 S4 ?; A- j1 l1 Y8 w3 y! @, d

$ m, ^$ T8 j# H0 v
/ b7 e) I: t5 k  o% Q' G" D" E; J

! X: h5 {/ M- {. r9 X! C! n3 l0 A2 a" o. j
2 Q$ {0 Q! u, P9 V2 Q

% U/ n& `7 k; U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
. _& ], ]0 [$ G5 L. H: Q. F& R) M我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
: B# G& B) G" q) _(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
) o2 m% s0 ]7 x0 P; \
0 J( j2 T$ k! z2 v
是不是需要在DSP.CFG中进行配置
) [2 S3 b$ i! p* S' L我现在的配置为
, z* j) N0 t) g9 ]/ n) @7 w4 {) _4 F% c  T9 X! Y9 H6 a8 I7 P
/*
0 P! c1 R* G6 ^6 E *  ======== Operating System Configuration ========% h! W1 n6 B. n1 V$ B1 {; N
*/
- }! u* }" T7 e% z! }, z. a5 N4 @9 L
& S* K. _7 Z4 n, @2 e/* no rts heap */4 w( U7 H1 u9 r9 R
Program.heap = 0;
% u* x) y( `! w( e, e* K0 {1 o5 ~Program.argSize = 100;  /* minimum size */
( [. z9 D5 ]8 C3 Z' }- CProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大) A& J6 a2 E: y5 n+ X6 Z) T% b# z. H  d
9 A# v! b8 p0 q4 L* \
/* create a default heap */
, L" l. E6 B6 g1 R6 |5 ~var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 I4 Y' y/ G- d* Tvar heapMemParams = new HeapMem.Params();8 W+ y3 R1 s0 O+ a5 I
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大0 N/ l" n/ _3 w0 i8 n3 N2 Q3 @
$ @0 m+ e. q9 A1 X
var Memory = xdc.useModule('xdc.runtime.Memory');9 n7 s2 {" B: O- Z* {
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);3 `/ C& w# k( ]4 `

+ G+ {2 [' n' d/* configure System module */+ ?, _* w' o0 H, O
var SysMin = xdc.useModule('xdc.runtime.SysMin');1 {: r9 \9 g6 A5 W) v& C9 h0 a+ o+ X
SysMin.bufSize = 0x1000;0 w5 t) P: Y7 [" l4 J2 }
SysMin.flushAtExit = false;
/ o6 h' }4 Y" u& D& ^
+ a" H" U! J5 i) U$ W  \var System = xdc.useModule('xdc.runtime.System');5 D+ w$ i0 o  L" u3 @  ]4 O
System.SupportProxy = SysMin;
0 {' c  n/ }7 z. v: M  X1 Q) t1 x1 C2 x2 c" j
/* configure SysBios to use the lower half of Timer 1 */
3 a9 ?; \& r3 P) W1 }+ Nvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');& |% i0 M! f) D
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
' A2 z1 X  q) kTimer.timerSettings[1].master = true;  G  u8 G$ D/ o% L
Timer.defaultHalf = Timer.Half_LOWER;: I5 L; D# n# C% \. \
Clock.timerId = 1;! b& O: H+ o1 ?& L

' A- M. |1 j+ M  f
1 h" E6 R8 [! v/ h! \/ _1 |$ x% P1 u/*
2 v2 z0 p/ f( ~1 |3 u& ~/ O *  ======== Miscellaneous Configuration ========
6 W2 W( D1 d* F! V( Y  N% a */1 [2 S, E1 Y$ S

' w* k9 z. g5 ~* R* h, Y8 `/* set default diags mask */
5 T3 e3 Q  |$ B+ T, Evar Diags = xdc.useModule('xdc.runtime.Diags');
! l* i, Y) c- @# Q: L: `var Defaults = xdc.useModule('xdc.runtime.Defaults');
+ p  I8 i) A* r$ x7 B* F, f7 c9 K( C/ t
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;% C1 c$ G8 q  \
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
( V$ l9 u$ n. O+ j$ \' aDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
  `) I/ ?8 }( @  jDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
/ J0 I; C; c: e, RDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */; v* s: F5 |" K2 A- S/ K
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;% l) U: _. |( X( H" R
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;+ R8 b; p- m1 c
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
* Q# v0 e) L: f- z/ w0 i5 _$ F2 ^Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;! ~4 F' i) z: `+ C$ x$ H
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;( C. a* Q- [7 O5 F
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;8 T" b! `( h5 f) B" ?
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
. J! G+ \+ J0 A# u! kDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;$ l; _# ^, I' H) [# Z) k* {. ~5 k
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;% B+ X8 b% v& d& w; k/ W0 q

6 p6 {) b) Z' z% g; c# }/* override diags mask for selected modules */; E) }  V  p& Y5 @- d$ ^
xdc.useModule('xdc.runtime.Main');
  W/ |) a# U, rDiags.setMaskMeta(2 p  m* g, Z# t  l0 A% {
    "xdc.runtime.Main",
9 d8 ~7 ~; }( x8 j) C; g) r( @    Diags.ENTRY | Diags.EXIT | Diags.INFO,
. _! \0 a- a* z+ ]+ H    Diags.RUNTIME_ON1 p% }& t' D+ h; x; N
);
. ^2 X( U/ {/ Z5 N$ B
* T# P/ C- R. e, v* S0 J: R; ovar Registry = xdc.useModule('xdc.runtime.Registry');
7 ~9 y, j) F  U5 k( s: P4 `Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
4 @% `' t& h5 I* Z, oRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
0 _9 `0 g* E; B9 B+ T3 v5 ZRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;. ?( I5 ~7 P$ J: `2 ?2 E
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
4 V1 o3 x9 D  [, z; t/ z
. v4 Z$ F7 L3 j) n" o/* create a logger instance */7 e/ Y: j1 [) {) m% @, V8 r4 N6 ~& V( a
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');' ^+ @$ _: u8 U$ k% L7 o# Q
var loggerBufP = new LoggerBuf.Params();
8 `! ~, j3 k0 o( C5 a4 _loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */' D5 h  V+ ], Z" F5 ~2 V
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
5 L  U' L) u( p; d$ q9 N" d( L0 d* D% W
var appLogger = LoggerBuf.create(loggerBufP);
- q7 r4 q% q/ bappLogger.instance.name = "AppLog_Core1";
7 O; i! D0 m- ODefaults.common$.logger = appLogger;- p, \/ U( p* n0 [4 _% L3 v' {9 x7 C
Memory.defaultHeapSize = 0x8192;   
( S/ {, V( z; H1 tIdle.idleFxns[0] = "&LEDStatus";
+ E; C1 k' T8 m4 }4 YCache.initSize.l2Size = Cache.L2Size_32K;
4 |0 n1 w. F  z$ U
- ^8 n/ t! D0 Y7 f
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
( o& U& j8 d) g; Zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( N7 D/ V3 \) ~: A$ C  N0 L
var heapMemParams = new HeapMem.Params();$ m, J1 c+ D# A& ~9 A7 Q  L9 e6 i' H8 ]
heapMemParams.size = 0x4000;3 A, l8 u* s7 ]# w5 ?+ \4 p
$ K9 N: [% x4 {2 A2 i9 u
var Memory = xdc.useModule('xdc.runtime.Memory');% o  z5 t6 y/ C; T
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
% [0 h5 b3 w, }7 x  d5 U8 K3 n, |  A
我大约calloc  每次共计大小为5K*16bits,7 ]* q5 a# w) C1 Z( t
而默认配置才0x4000、需要改大。
6 V* n  Y# F8 S9 S2 a# x# Q! L
# X. K$ I* m+ r8 Y; W$ P
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
/ z7 G" h. {7 l5 Z! WProgram.heap = 0;4 g6 B3 m* B3 n5 ?3 @, X4 t
Program.argSize = 100;  /* minimum size */
1 I* h0 t. U# M8 M/ d8 ^Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-21 07:00 , Processed in 0.041647 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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