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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
! W3 k8 ]+ W# t/ B& n9 _) x- w
4 z* g2 z9 K( L7 u! \    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2562 G  j3 A2 }  I% J. e3 X) Q% Y. A, B

  N$ U3 O5 k9 U) T6 R+ d* _& o' Y/ h其他程序段。。。。。
2 W  [$ b; m5 Z3 f! ^& K
7 B- T% X; v0 R% D4 E2 t   free(x_d);
0 k5 f& x" W% v1 ^) U* Q) O! Z. U* C  L$ P9 n" p) c
使用DSP侧单独调试功能,验证动态申请没有问题,( G! |/ Z( z+ K) i9 q

- _/ U+ d: R! R0 N8 c! s' g但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。+ W2 L' V# f" J. I1 e' [

! Q& G& `2 g( ~7 q+ M) p0 @$ u8 M7 J

. [, Q& c% j  X& {9 n( ?* H0 i1 I$ U4 q5 ?" S" K4 F

1 [' q( u, R5 e& \3 m" I# ]! J( U3 c$ ~6 G5 u# V
9 i+ m' S$ q) }9 N5 f8 d7 I
% [% d, ~. X. c3 N& T" i  S
/ X0 ]+ h% _& ?% Y8 y, Q4 s% o! O
! ]3 i9 A# e6 ^' H# F5 D6 d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明/ k' n1 ?) F/ f. n* G& e
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下- c) L* f2 Q" R- r8 n' a( J, q
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
, K4 ]  e4 S- @6 E6 F% o5 s
  V1 \- g$ l; I% R- C2 O% O
是不是需要在DSP.CFG中进行配置) n9 z' N. v5 S0 ~* I
我现在的配置为/ B# ]) L# ^7 ~4 Q: a% g3 o( x

# n, G0 Q* }/ G1 Z5 o, Q% G$ ~/*
8 h8 X0 K3 G$ B3 O9 X" A *  ======== Operating System Configuration ========, L4 R7 A8 w( N; O
*/
) I# v$ @( F" y  A6 F) Z4 J+ q0 A" l& Y# }$ ~/ m1 B
/* no rts heap */% j, b8 a8 @; h$ ]! }. ^
Program.heap = 0;
' b, y) C0 G7 c9 W7 bProgram.argSize = 100;  /* minimum size */2 V1 c5 ?7 }9 r4 O+ L
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大; C, n  |/ @! B- K; _! j" y( H
# q7 G! W; z6 t2 G
/* create a default heap */! F% h. d  |9 o1 Q, e! q
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ l7 {3 k' s) t! `var heapMemParams = new HeapMem.Params();! a9 u+ N) v  m9 E  ^- ?
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大# ?' b: I. a! k# L$ h2 Q

+ a! @% b$ z: V2 h8 z1 \8 G
var Memory = xdc.useModule('xdc.runtime.Memory');
1 N2 j0 C3 k) F( H5 e; EMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
# r( D- O" K& }/ j" d
8 J# I7 A- g' N: T/* configure System module */* j4 O/ F( B& [8 L
var SysMin = xdc.useModule('xdc.runtime.SysMin');, t7 N2 ?) G5 }9 Q
SysMin.bufSize = 0x1000;
* J4 {0 x& w, v4 V5 j9 @$ P9 t' FSysMin.flushAtExit = false;
" R- H, q& T0 x! O1 @/ C, |. G2 v4 Y5 R$ Y* l+ f/ H
var System = xdc.useModule('xdc.runtime.System');+ ^7 x0 w$ L- C, X
System.SupportProxy = SysMin;$ W( `( Y9 b1 {

% ^! Y6 Q% H0 c# {: r/* configure SysBios to use the lower half of Timer 1 */
& F: B9 I3 B8 `* m$ m; I  j- O& bvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');3 h/ S  J* k0 y- |( v; f
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
: G5 d+ Y+ C. }( G. R6 q- \Timer.timerSettings[1].master = true;4 [$ m( s4 |' Y! F3 }; i$ A- m6 n
Timer.defaultHalf = Timer.Half_LOWER;; c3 M6 P( d8 d5 k3 X* j
Clock.timerId = 1;
; h# z1 }+ R. P& M3 b; R: y! X
; C( F# D  u9 b
: G- X0 [9 |0 m; k/*
2 m  Z0 ^6 d" x. E' o& w! q *  ======== Miscellaneous Configuration ========
5 w$ t6 ]0 d5 N/ P8 ]3 @ */
# A) \; k9 N" y. j2 ?: ^" ^3 w, A4 a& D5 U5 L( x% Q) }& I2 u
/* set default diags mask */1 D1 i- j% x) X+ x/ @
var Diags = xdc.useModule('xdc.runtime.Diags');
! |$ g5 z9 ^! D# @' _var Defaults = xdc.useModule('xdc.runtime.Defaults');
6 Y1 P9 q$ w! b: L3 |& u/ ]0 U" R6 n9 e6 n2 [1 Q4 M
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;$ Y. t4 s' Q' H6 x
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;4 I" K; c% x9 d- \: P
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;: W/ i1 }7 s2 C# Y8 `8 y- v
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */9 A& F8 K9 ?1 u4 N! A2 ^" P% @9 q
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */5 n$ [9 o. B4 O$ y1 {' X; v
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;. i: r7 d% L* N0 g* \6 x( g
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
8 t* F$ @) }8 u9 K+ ?Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;6 A) g! u- `# n7 l- h7 [
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;9 K3 v/ ~7 \' C* @3 [
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
7 b; i/ K3 r; t+ N9 XDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
7 r: c) [; g( Z# U" C0 T; sDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
" k5 {5 @7 X" ^' D- E! D/ c3 p0 ODefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
1 U8 J: Z6 A6 y1 J/ T/ ~. C& @Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
7 B0 k0 B* a: S1 W
: i# u6 T+ N0 U5 Q) o; }/* override diags mask for selected modules */
2 h1 f6 {3 a0 O, x3 uxdc.useModule('xdc.runtime.Main');
1 a& R7 B" S  o* a. t- |5 XDiags.setMaskMeta(4 O5 O5 v% e& g- ^% q
    "xdc.runtime.Main",
; K! J1 J/ B- G& y# X/ N5 k    Diags.ENTRY | Diags.EXIT | Diags.INFO,
) X+ @  g7 J* l& q7 J    Diags.RUNTIME_ON- j; B8 }8 ?. j0 f5 @6 }9 p
);
. j( o* F' M  \+ J& {( U. k# ^& w
" }+ u; X1 P- ^3 `) _var Registry = xdc.useModule('xdc.runtime.Registry');
5 M) }/ E9 U3 B- m; I6 s! b  X7 c% Z2 ARegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;/ v! u: T5 P3 Y
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
0 v4 X/ G8 ?; ]# _6 i( ^8 X: M- NRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;5 J/ F2 t$ Q5 F
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;2 }) u& v1 S+ N7 {

+ X6 h' V( c8 ~+ e% D' r5 T/ B5 A/* create a logger instance */: o) N# m4 n. o/ [" m3 J. o
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
6 }, i, ]4 c( s% svar loggerBufP = new LoggerBuf.Params();
* F6 b( H* x4 m. T4 t0 e, HloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */3 C) s2 l# g$ z0 ^
loggerBufP.bufType = LoggerBuf.BufType_FIXED;8 ~* j; A. n' [- Q8 Q- \
/ N3 ~. N1 n9 K& x& [9 v3 m8 Y& C8 G  u
var appLogger = LoggerBuf.create(loggerBufP);
9 E5 }3 I  \/ B% s5 t! DappLogger.instance.name = "AppLog_Core1";
, T1 B0 h& E) J& h9 K2 y' eDefaults.common$.logger = appLogger;1 {: B, b! N. {* @% S. q2 a
Memory.defaultHeapSize = 0x8192;    9 n( `6 h9 ?6 G" G; F6 Y
Idle.idleFxns[0] = "&LEDStatus";. z6 `0 l, W" @: o7 }: m
Cache.initSize.l2Size = Cache.L2Size_32K;! k1 j/ K- l+ `

- Y# u, g' W  T9 A9 A- p1 ~+ a+ \
回复 支持 反对

使用道具 举报

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 */
3 o& Y  e8 J" l7 a5 nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, f/ T" G8 ?: ^6 K% kvar heapMemParams = new HeapMem.Params();
7 O$ I: ?0 ^4 M) v( y7 uheapMemParams.size = 0x4000;5 k! L! @* n7 d! f

1 q% \/ A# t. n9 c6 yvar Memory = xdc.useModule('xdc.runtime.Memory');% y! X; ~$ v: ~: u$ g
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);2 z( u  D8 K: x0 U' r- ~

* p2 q: z5 K5 H) W我大约calloc  每次共计大小为5K*16bits,* n! p; B6 Q' p. ?/ o# @4 D( E3 |
而默认配置才0x4000、需要改大。
* s" B# K- R' ]$ ~" U7 W  _( j& G; f
% I" Q, v2 {5 `
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */+ W) y% G% v( B/ I0 B, y) j3 x1 v
Program.heap = 0;8 m* f4 z4 q& g" D% p% U4 f
Program.argSize = 100;  /* minimum size */
; D$ o% ]: @3 C# W" x/ iProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-14 04:04 , Processed in 0.042271 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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