关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构) z' w  b8 ]1 H( A( h! D
2 N( u/ x/ ?7 b
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
8 y" \5 w5 z6 K0 S9 b
* u, s9 w4 z  g6 t$ |$ T+ ^3 M  g其他程序段。。。。。) D' }3 @! M4 i/ v9 h6 m7 d5 j

/ D, Z6 T' b) ~! f  x+ a   free(x_d);% p; h$ v1 Q2 f. X4 F5 ~
% x& i: n, P% f& ?  F/ a' K
使用DSP侧单独调试功能,验证动态申请没有问题,9 S& @: U4 d5 X1 w0 _( ~( R
  L! @  L$ F  H9 K0 _; L3 t$ o1 n
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
5 Z6 W% N/ e1 B( M

, \4 x+ @! D/ h' n, s6 a' Y) E4 s( b$ E
9 M8 }2 h, [4 S

" P& `+ }( i! T8 [4 l
9 Y' S) a+ E! r& G2 P% h
* g/ D, h7 n" H6 n5 E  n& p* Y
& f4 f  z& H/ v
6 F3 g& m' j" `, ~7 V0 w- Q4 `! M  `; K9 I

4 C; K# }5 z, c: w4 B
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明$ L4 @3 e( M1 ^" u7 G& Z
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下" x# k# Y7 ]# T2 @
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
& _4 q* k# a+ e
) x. q0 d- C. ^& `( n8 K
是不是需要在DSP.CFG中进行配置9 @* E# X' w' U  v* g
我现在的配置为
6 w) a- i9 u  B" ]" ?0 x' ~
8 q. i! {+ O5 P, S/*
5 E4 t2 @3 t+ W9 }" g; X1 B *  ======== Operating System Configuration ========( p; g. |7 l) T; E4 O+ ^1 n
*/
0 g; G6 k  u( E' y) o4 ^. \0 K8 S9 g/ O: f- D- d4 G
/* no rts heap */. K' \9 L+ x' F6 e
Program.heap = 0;
/ q; I) p# y' [4 GProgram.argSize = 100;  /* minimum size */
; a3 P4 x/ m9 S, sProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
0 D4 L" T- J$ i/ H" k9 [
8 T4 b. }! Y+ d7 x! o4 ?/* create a default heap */
3 Q0 @& ^  m- @var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
) H6 G' a; q) Rvar heapMemParams = new HeapMem.Params();7 }  c- l- H0 a8 E5 q( |
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大* X, Q3 O1 V" O; G
  S  w, s/ a5 V: U5 b0 V4 p/ m
var Memory = xdc.useModule('xdc.runtime.Memory');
: S5 I, M; h/ U' WMemory.defaultHeapInstance = HeapMem.create(heapMemParams);6 G) h2 ^% }' w: G$ H

# K' a) Z: V; P/* configure System module */
9 X% O# j6 H; D3 t" s% Avar SysMin = xdc.useModule('xdc.runtime.SysMin');
) L' B# O# W' p5 Z" y+ }. fSysMin.bufSize = 0x1000;
( y* j! }. u& O! J" gSysMin.flushAtExit = false;
7 X+ o1 x4 c6 `4 D. Z3 B
% |& T  x0 M3 \# kvar System = xdc.useModule('xdc.runtime.System');1 w, N: R+ f$ \3 |6 A7 k1 r/ l6 v
System.SupportProxy = SysMin;
0 ^) d$ g7 O  E' P9 k8 {# j, j) f9 w8 X6 @# i" E9 N7 u1 n+ Z& _
/* configure SysBios to use the lower half of Timer 1 */
! b- ]5 G1 Q/ N5 [0 M2 qvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
1 q- _+ |2 c% v9 P9 g8 xvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
; [8 X0 v; o( z9 U7 \) ~Timer.timerSettings[1].master = true;
# N2 h7 M* m1 e4 NTimer.defaultHalf = Timer.Half_LOWER;6 ^: |4 x& V2 [7 H/ t
Clock.timerId = 1;
, X7 h: D9 O9 a+ v! O
" w8 u% u4 z, _# D
( V& c. K+ Z% ^2 n8 [/*
" b; G* K" W/ ~5 N8 ~2 F9 Q3 i *  ======== Miscellaneous Configuration ========
( i2 Z5 i4 L- c */: D. T/ X7 ]8 ^' K4 A
0 y. Q- D4 s; o1 B, }
/* set default diags mask */4 x/ N1 _* c4 v2 Z0 Q% G  Z% v) ^; Z
var Diags = xdc.useModule('xdc.runtime.Diags');
6 D+ j: \# `4 p; Q/ Wvar Defaults = xdc.useModule('xdc.runtime.Defaults');
% Z) g1 y0 \. {* m1 w7 i. L' G/ q6 G& T6 @" @2 |! S" W; C$ x) B) O) h
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
% c# N; B- O5 }$ l) S, NDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
- z6 P2 Y4 A3 ?6 K9 T3 fDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;* e- T; e8 ]: r; X7 t; }8 m
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
# a) O6 I6 B( k0 gDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */- }3 f. S7 j2 d1 H
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;% `7 m1 _# d# p4 T0 W
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;8 F* _) a( v5 e, U! u' q
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
( j6 ^* M. T0 l% D8 G6 FDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;9 K/ A8 @- Y3 k: \7 b; B4 X3 ]
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;3 A% Q* f- ~, a7 U5 E( T# e1 O' i
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
3 f  U! T1 W% ADefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
1 h- W0 d: S% Z( K9 B/ v$ H9 q: SDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
9 b% W: {# A  v# ^9 l- d; Y8 ^Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;3 A3 b6 W0 \# G! m% q; {7 g

# w8 f0 {8 o6 K: f( T/* override diags mask for selected modules */( }: S/ E+ c+ ^  c0 \+ g! G; a( G
xdc.useModule('xdc.runtime.Main');# O0 _* u9 k1 M1 o  f4 n
Diags.setMaskMeta(
+ ]4 a8 ]/ d" @& f    "xdc.runtime.Main",' c2 \8 Q; s* b" a' J
    Diags.ENTRY | Diags.EXIT | Diags.INFO,7 {2 G5 W, s- G2 i; x# r( \
    Diags.RUNTIME_ON
/ |" J* B9 y" P( p* n; L);
6 t0 K2 v/ D% T. B1 B4 \" }9 B+ k" }) Q5 t- b: b( |4 L3 p
var Registry = xdc.useModule('xdc.runtime.Registry');+ F  I( l$ R6 ^
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;) A) G% ]2 }, F5 E* X
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
& J5 O4 r6 R0 j. ~3 [1 S- E" qRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;8 h( G. c8 g1 V& J8 {, I3 H
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
( g. I, k6 n/ {! n
5 f0 C+ e8 \' M' x/* create a logger instance */; M, w! R" _! c  m+ {: q( ?
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');, H3 u& z% s! b9 ^- t3 l
var loggerBufP = new LoggerBuf.Params();  ?7 [& X) _% g! }! `
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
9 m" }0 e4 G% i7 c* |* wloggerBufP.bufType = LoggerBuf.BufType_FIXED;
! [1 D% R8 a# {
+ j- `1 D$ A* B# A1 t- g" vvar appLogger = LoggerBuf.create(loggerBufP);
3 W8 i  N' g, ~& }4 [& mappLogger.instance.name = "AppLog_Core1";
3 R9 p1 M. k2 _+ \) \5 eDefaults.common$.logger = appLogger;
6 M* c, A  Y0 H# C+ \1 mMemory.defaultHeapSize = 0x8192;   
6 X+ ], z7 ]' {& h, k1 r2 e7 gIdle.idleFxns[0] = "&LEDStatus";
4 U4 O- i# F$ R+ d6 ^0 M: kCache.initSize.l2Size = Cache.L2Size_32K;
2 z+ R: r) \  ?% i. F: h
6 T( L% y: y$ H! p% j4 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 *// E6 D9 l5 L' Z. p9 F5 D. t
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& K# ^7 h' x/ V- T! N6 r, k, Evar heapMemParams = new HeapMem.Params();
- \% I3 M6 I9 A1 A" m& ?4 n% e2 ?heapMemParams.size = 0x4000;
+ }* j! P2 f/ V+ e) }
' @1 M& _) z6 B2 J0 R. w2 M: Evar Memory = xdc.useModule('xdc.runtime.Memory');
' g/ V7 J3 f! y# {: m$ vMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
- G, u" W1 [& }) W6 P# O$ w
; a! h7 v; S& W+ E$ w我大约calloc  每次共计大小为5K*16bits,
" t- z( V* w- ^5 p0 M3 l/ Y而默认配置才0x4000、需要改大。
/ J& g7 D# E1 O8 s. j3 E
$ U: p+ P, ~# w
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */8 w* K6 E' u3 ^9 K
Program.heap = 0;
, H' p  T! v. N- M4 P; M2 X" ], xProgram.argSize = 100;  /* minimum size */1 F- m4 Z  C' h$ j9 F. q9 Q' _$ @
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-8 14:07 , Processed in 0.040554 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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