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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构6 b" j/ z" ]" }2 C4 z: x- e
& z" i6 \+ v. U
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256% O; L4 D( ]- n: @

8 E; |: K/ C. @# Q其他程序段。。。。。
8 n6 _# K$ P' I$ |) ~. i6 @: @ 8 |& G* E. [6 X* U$ p# T
   free(x_d);  T8 D% U2 s& r" T* S
" z( |0 H& r. ^$ y2 F$ w
使用DSP侧单独调试功能,验证动态申请没有问题,: o9 C/ S8 g; g9 _

4 g+ t1 v: R# A4 m$ V: w' f1 {但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。3 Z8 `9 X+ ]5 ^) T
6 t! g. v) `# r0 B5 [+ k6 v

( w+ a/ h4 n" l$ @! K
8 S, Z/ z3 `' ?( U1 p
8 g  Z/ l5 ~$ a! B4 |4 f; H2 C
4 o& E: D; H# x: i4 O3 |* y+ W: D0 ?2 I+ ?

7 U- x$ z' ~7 e. T7 P, ?6 P: q. Z  N* Y. i3 A8 |% |- H9 e
+ m) E2 o9 m' L( _3 L

* I3 i) O) g) M$ R# R# h
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
4 y' W* z' M" c- W1 K5 |" ^我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下0 u4 B& b0 M& m1 \, A3 I) R
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)) \/ \! C+ P( U5 K# G5 j
2 `7 _5 o! Q. n; X& H, X7 r1 N
是不是需要在DSP.CFG中进行配置
. P! X1 |2 O8 |) |- ?我现在的配置为
/ V" V1 n* g# h$ y% s7 ?; _1 N
- ]9 k0 h) j1 h% D+ I& E! w+ o/*
$ U' [4 |6 q: u6 }/ y *  ======== Operating System Configuration ========
* ?% e/ w6 Q/ n" v */' V7 Y: _4 T! K4 E  ~" n3 X
+ \8 H( N+ ?5 h, n6 S1 E
/* no rts heap */. N. N3 s) D: D' I
Program.heap = 0;
4 s- J8 l3 K+ X' SProgram.argSize = 100;  /* minimum size */
* z# k" q% z2 K; @; P4 y, a) EProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大7 B3 G7 _3 e3 A7 y, g

* I9 Z1 Q2 t7 O/ L* y: g* m% d5 C& ?/* create a default heap */
/ G* o5 R% O( D  ?5 M; E) ]var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');, w7 c$ T4 G0 @5 s$ [
var heapMemParams = new HeapMem.Params();) W7 c) ^; D) @7 y9 _# M
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
& z. K0 K- d0 \3 I0 e$ h
+ e9 d( ~6 y: K' f2 a  d. N: i/ R' m( {
var Memory = xdc.useModule('xdc.runtime.Memory');
- e+ E( y# D" n& hMemory.defaultHeapInstance = HeapMem.create(heapMemParams);  t2 L6 c5 U- }% J1 K5 n
( K: d' N/ z; ]6 I7 ~* K
/* configure System module */
( v  K$ e2 z: V9 w/ Vvar SysMin = xdc.useModule('xdc.runtime.SysMin');6 [  P/ i- A, ?9 N/ m7 l0 ^
SysMin.bufSize = 0x1000;
9 h7 ]8 m7 F! }* Y4 lSysMin.flushAtExit = false;
6 `1 c- s/ a1 G
# m9 @5 I5 p4 J' w1 L$ H6 w8 {var System = xdc.useModule('xdc.runtime.System');
6 q. U  I$ @/ v+ zSystem.SupportProxy = SysMin;5 `& M. B- `* p9 @% m

. ^2 [$ k/ p5 |. R+ V& l/* configure SysBios to use the lower half of Timer 1 */
# z: P1 r+ K4 V" n: W- svar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
& S% p+ g' m( D$ h- c1 f$ j: T# @var Clock = xdc.useModule('ti.sysbios.knl.Clock');
$ |) q  _  v6 N- u' \" G* {Timer.timerSettings[1].master = true;
, _" o- C# G# iTimer.defaultHalf = Timer.Half_LOWER;
2 K4 F3 N, i0 a( R! VClock.timerId = 1;+ L7 r6 f$ g/ g( _
$ ?! v# q4 k3 I  D" X  G% i$ ^

* w4 ]' E3 k& w/*: D5 `# h8 ~# ~5 h- x9 r
*  ======== Miscellaneous Configuration ========
# H" `- F8 f$ L. ~$ }1 h */$ O5 J' q0 ?, s2 O3 `

3 n) P& ?1 u- R9 P8 R/ }& V/* set default diags mask */1 B2 _7 k& O# S9 z2 M) M
var Diags = xdc.useModule('xdc.runtime.Diags');- ?, ^; ~7 _. b( N; a  W  k
var Defaults = xdc.useModule('xdc.runtime.Defaults');
; B, h$ _2 i7 C8 m
+ |0 n2 \0 H0 W6 ^, Y, @/ }Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;7 u4 P1 q6 e) c* E
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;; B+ A; `1 x8 j
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
# k6 n. m3 r; @& y& ZDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
9 q0 u) ~: r1 J  iDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
2 w* o: @% L& T- L6 [Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;0 Q: h( J7 p4 u# h7 f
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
, e4 p# s4 I0 _) y- ]Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
5 Z% L" ]( {% n7 sDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;; i; K  u- r! k  Y" m' F
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
* ]- I3 ~9 v0 pDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
' w% S) E3 C9 p2 M: q, [& x4 `  sDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
6 k8 c! ]( v5 YDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
8 l% ^$ ~" U- w' ~& sDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
, l4 ~* F1 }% t8 m3 c% n& b! S
* e& x- U% F; v/ X% B3 K/* override diags mask for selected modules */0 k  {# L# R3 H
xdc.useModule('xdc.runtime.Main');0 j" ^& H  |, b6 P4 g4 K; e' h
Diags.setMaskMeta(
# p4 Q4 ^$ O& U2 [3 j( }0 h% ?# W2 q8 r    "xdc.runtime.Main"," Z! ]( j# B; O5 W& ?9 _
    Diags.ENTRY | Diags.EXIT | Diags.INFO,- {' B2 {" ]# P* l( A1 q
    Diags.RUNTIME_ON' j; B% S2 p8 e* s- x( s; y
);! @, ?" n& _; I" L% X

! a" r; D' G4 T9 m- i# D9 Evar Registry = xdc.useModule('xdc.runtime.Registry');1 Y4 D5 p/ a, K+ i0 }/ \; T
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;9 Z9 U2 W+ z; K# c
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
! P* @% m. x% K- |" {3 aRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
3 t. X' q) ?  {+ N7 WRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;$ O) n  P# u) n# E' \2 g1 J& w

! d  f9 x# v+ P& d+ l8 P+ ^/* create a logger instance */4 W; e+ e2 I8 C5 q6 G; J2 ]3 l
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');3 o! P: M% E; n. \& Z
var loggerBufP = new LoggerBuf.Params();
1 t) z1 J4 S5 dloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
) u4 N& ~1 s6 HloggerBufP.bufType = LoggerBuf.BufType_FIXED;
" [) Q8 J+ @4 C8 A: ?5 p! [6 r
0 b& T. h; Y) t. J' ovar appLogger = LoggerBuf.create(loggerBufP);( y0 e- _4 Y9 n# L7 C
appLogger.instance.name = "AppLog_Core1";- O: ^4 F; K  o( h  u! ?
Defaults.common$.logger = appLogger;
) b  j. t2 f0 {1 KMemory.defaultHeapSize = 0x8192;   
7 p+ M* d# z/ d1 k" BIdle.idleFxns[0] = "&LEDStatus";
: ?4 [& L, i3 t" }7 v+ S1 q  q0 pCache.initSize.l2Size = Cache.L2Size_32K;
3 p2 }) L) A  R8 w
2 f2 M1 p' P' k: _; v7 A( J! p
回复 支持 反对

使用道具 举报

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 */
, ^9 u7 T) W4 r, k# ~/ Uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');) ~: i) W7 S* w6 z
var heapMemParams = new HeapMem.Params();
. a; g; y" U, I; C7 a  [$ k0 x) o" {" WheapMemParams.size = 0x4000;
4 ?  F% I, z4 |' G) q
8 u6 s& g3 D9 {3 `/ Xvar Memory = xdc.useModule('xdc.runtime.Memory');
( X0 c. s5 C  x% [+ N$ wMemory.defaultHeapInstance = HeapMem.create(heapMemParams);- ]( B3 [( a5 K* N# a, i
& s7 g$ ], c9 P1 f" T
我大约calloc  每次共计大小为5K*16bits,
. S+ X6 G5 I1 e* B: k  u而默认配置才0x4000、需要改大。
6 Y& L8 Y* h% @+ Z: x% ^# l" w1 Z+ Q, l! k$ [( g7 R7 N6 X  |
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
, `4 H; Y  w" ]9 wProgram.heap = 0;' h' a3 B# \8 R$ H. q9 k: ^
Program.argSize = 100;  /* minimum size */# @0 |2 _# m4 D! ^
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-30 22:19 , Processed in 0.040901 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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