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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构+ P7 p  W3 H$ @8 |1 K
4 ?4 d' p4 v! C3 o# q* o. [
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256/ f" t- N! g( P- i

% @; x) `4 t; e其他程序段。。。。。
7 J: g6 `2 F4 O' N  W 2 C) Q2 p" H& D) E1 t" ~2 C1 g
   free(x_d);
" m. C( h! [* Q+ m; }. w; S+ @5 O5 E* L7 R' d9 r0 y. S- p) Z
使用DSP侧单独调试功能,验证动态申请没有问题,7 E; f' k7 ^8 A" h; o; x

, ^- Y6 B& G4 e6 n) D0 c但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
. w  T) k: x+ i

' ?! C3 y% H2 M0 `/ O* T6 u. [5 G! M2 d1 m

+ a& Z$ v" H5 x1 c
- |& e7 t4 Z& k1 n; M: i/ P* o& ~
- m( K& r5 X. ~7 l
8 |& t3 I9 z- _8 B* {& A# t# y2 b! r% y- `! _8 m8 t+ e8 k% _6 p" ]

" K1 s1 g, \* g, M0 N; g* @/ m( A8 a8 n: O9 ~' _8 G
( y) h' K  }( a3 U4 k4 E
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
# j: T$ |* a  I; D8 }* L我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下2 d) q3 @3 f9 f+ S% s6 ^
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)1 Y' r. ]4 E) {9 B, y
# C, y0 Y8 t' Z/ I
是不是需要在DSP.CFG中进行配置- r' S5 H3 O' r5 v: I: g
我现在的配置为: l2 h  n4 R0 |% A2 t1 p% T0 X

. ]; {6 ]" _& k. Z  S/*+ @# j& Q# T; Z3 t( B" m) K, K
*  ======== Operating System Configuration ========4 F  a0 B1 u1 k" g! C9 U* F
*/$ |/ F. n7 w3 f: ?1 {1 l

7 ~: w* s0 C3 o0 ]4 f2 j( ?  c' B/* no rts heap */  ^5 G! x0 v- }9 C% n3 ]
Program.heap = 0;# x) E: c' s3 \* J: q3 V
Program.argSize = 100;  /* minimum size */+ a2 q4 \& e8 N2 `
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
/ g+ c2 u4 D6 P2 M
& T( _* a- m% `: u/* create a default heap */
! n, p  g# M5 S" i' ]: U4 uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');, v; @. g% ?% n6 j
var heapMemParams = new HeapMem.Params();3 u( }  M( a* e+ G# p
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大0 b7 |" f0 Z1 V, h) c) W

, _8 B4 e# {# x7 U( T3 E- |
var Memory = xdc.useModule('xdc.runtime.Memory');
- Z+ q2 h( B: m- ~" s  CMemory.defaultHeapInstance = HeapMem.create(heapMemParams);# P1 R; r; O! ~3 Z/ h. x

4 H9 S) z% r* [/* configure System module */
2 ?; L# r* `9 ]4 X( dvar SysMin = xdc.useModule('xdc.runtime.SysMin');- X7 ]' I& W. G6 x
SysMin.bufSize = 0x1000;; f- j9 Q# H, [9 G8 Y" d# k; ]
SysMin.flushAtExit = false;: E" s# c( D- L. F! O) Y8 `
, \( h$ h; S' I- b7 Q& V
var System = xdc.useModule('xdc.runtime.System');
2 r& E$ o5 V! D* x2 JSystem.SupportProxy = SysMin;
& C; z6 m3 @' ~; r) R6 y' }
4 _$ m2 N) R' e! C/* configure SysBios to use the lower half of Timer 1 */3 j$ k3 e- o. N3 G/ T: W
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
6 X  D: c: ]& ?var Clock = xdc.useModule('ti.sysbios.knl.Clock');( t9 u) ^& s0 e' j8 x/ f
Timer.timerSettings[1].master = true;
+ q5 {+ U3 k! ?* Y6 vTimer.defaultHalf = Timer.Half_LOWER;
1 U" {, _5 S0 c( p- Y  EClock.timerId = 1;9 @6 d2 |$ N; c
2 V6 d5 C  E% k5 \

* t" \9 R: W" ~/*8 a$ _4 q# F4 @5 [: _0 H! v
*  ======== Miscellaneous Configuration ========
* n( p/ z5 O: A1 a */  g. f" l; v! W

$ {. M; l2 T$ x; V" C7 u( o/* set default diags mask */2 |- F& c* b6 Q% m% D
var Diags = xdc.useModule('xdc.runtime.Diags');
4 F* A, G: M# F6 L% P/ Z: svar Defaults = xdc.useModule('xdc.runtime.Defaults');
2 T! p. z2 Q- N2 s7 z- g
; N$ _+ ^2 z5 F4 P7 UDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
, U7 |! D6 j( V( u6 X: t/ Y! |Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
2 m# T! I' O: ^7 O4 F# zDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;: }0 Z1 e; e* q8 a
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
4 `7 K$ h, D4 B3 L% {( @7 NDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
- ]8 |$ t# O; h' kDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;( j* {5 a! N& b
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
: F1 ]  D/ n8 ~) S3 _& iDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
% {1 |! p" f* B$ k. _Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;+ j% q5 g  a3 N/ @- I6 O. F
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
$ `/ ^  T* {- I: I) y8 IDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
& [( j, q" F3 @! }0 E( ], WDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
' D. o* v9 ]  D( F  S5 l; I% [# CDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
6 N4 z2 i# U. b; l( [8 VDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;& o& F/ O& h# v9 O# l

7 D+ s" m* E6 W. L# ^/* override diags mask for selected modules */
# z) f/ P3 H2 |, Nxdc.useModule('xdc.runtime.Main');
0 ?. N$ N& G. y3 J8 n- QDiags.setMaskMeta(1 u% \1 Z6 u6 l9 H
    "xdc.runtime.Main",& {' \+ O8 P6 Y% l( Q; Z2 r% ]+ F% _- m
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
9 M* z3 r8 C1 U* S    Diags.RUNTIME_ON) `1 E2 T6 W+ Z$ D( g3 m, F
);6 S3 r' j: d( p  g6 B
0 w6 U- T  G' y$ w9 Q; T
var Registry = xdc.useModule('xdc.runtime.Registry');3 A$ N7 F0 M& _% Q+ b5 }
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;/ u( w( f$ [& e# Z' I) U
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;- W. u- h) }& `3 V- V2 I5 L( N
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;9 i/ W( Z- l. g5 u- {$ m; _  ]
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
8 L5 K6 P4 {: ~. E9 d0 b/ m
# E4 x# S9 P9 R/* create a logger instance */
; K' y4 |& U( V3 Ovar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');# M) g, i3 o* ~
var loggerBufP = new LoggerBuf.Params();- `+ R+ Z8 F3 u1 G2 @2 @
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
9 n; w& m2 s2 k% r# W1 dloggerBufP.bufType = LoggerBuf.BufType_FIXED;
- b% D, k: D- J% ~3 e0 x' b7 P  U# ]. ~. J$ l
var appLogger = LoggerBuf.create(loggerBufP);
( N7 ~8 {7 _6 ~( }0 t8 A* RappLogger.instance.name = "AppLog_Core1";
1 [3 ?6 c3 k6 s  i! |5 y8 _Defaults.common$.logger = appLogger;
3 x3 P# ?% C& K! S* N  oMemory.defaultHeapSize = 0x8192;   
  d" }# G* C& N# LIdle.idleFxns[0] = "&LEDStatus";
  c0 `# @) c( D) K, i% ?9 A) i+ lCache.initSize.l2Size = Cache.L2Size_32K;
: G- ]8 R# g* u5 ~0 B: i% K- n; T9 O  q# B
回复 支持 反对

使用道具 举报

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 */( |/ X3 |0 S( P% F4 ?1 ^* w9 q
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ @1 ~" w+ [* h. ?- m4 I
var heapMemParams = new HeapMem.Params();& m* {( ?* H. b" c1 N
heapMemParams.size = 0x4000;
1 a/ e* G; Q8 o) s) t
3 u  I7 I7 }. jvar Memory = xdc.useModule('xdc.runtime.Memory');
/ J3 Z5 ]* y5 k1 P$ |; q; Z, M: bMemory.defaultHeapInstance = HeapMem.create(heapMemParams);4 H; d3 a8 P/ }8 p% U
4 T8 c6 r+ W/ i
我大约calloc  每次共计大小为5K*16bits,7 ?4 p! L- L* u, v
而默认配置才0x4000、需要改大。
: E- C( c4 Q4 A3 H
" r" A; b9 }* [: V: L
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
: E8 q$ o! {! x5 `Program.heap = 0;* r1 {/ e& O" t3 y: W8 ^* |
Program.argSize = 100;  /* minimum size */
& R( ?9 @3 a6 m' ZProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-27 13:03 , Processed in 0.041567 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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