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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构% @- Y6 I- Q4 ]# C
8 \- ~/ n" Q2 H$ |9 v9 ?# @+ o( ~
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
9 Z0 K/ W! v5 _1 l1 e/ m3 p' m+ ^5 y$ @
其他程序段。。。。。% j" ]1 w! F! z4 O& U
% D+ J2 q) \1 w5 s* J1 E
   free(x_d);. A  x. ]7 A$ k/ ?# c9 C! S
2 c" ]3 U/ }- G
使用DSP侧单独调试功能,验证动态申请没有问题,9 K5 q5 P4 \3 I( t2 M2 \
3 _* T, Y9 I0 p$ s
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。2 |( ~  {1 G9 P5 g
/ A# ~/ [  y; \* {* D

( j! u7 p' \% {& I5 i! [
, v5 O! U7 Q- D; i- ^7 p. w4 i" a' R( f& W. h# b* e
; _. x8 u. n$ P

) Z) o0 ~/ ]! r5 B" b$ n7 t/ [" e9 c* n' }

' c" W7 k2 E2 r  V  _! h
' B" w& Z- ?- _0 C5 ~- M2 ]$ x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
8 m8 ^+ i: z) AProgram.heap = 0;) l( ?; u" U& x
Program.argSize = 100;  /* minimum size */
+ Q1 a3 m/ y6 o6 |! CProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
- h7 h8 f/ [  |' L  ivar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% _5 G+ O" R0 t1 l8 Q8 d% T7 k! lvar heapMemParams = new HeapMem.Params();+ H9 T7 f3 t8 F( G$ U
heapMemParams.size = 0x4000;# U; [7 L$ K, [/ L: r5 O  W
. v& E4 T& E2 v+ G
var Memory = xdc.useModule('xdc.runtime.Memory');
" Q5 O! V0 F0 }Memory.defaultHeapInstance = HeapMem.create(heapMemParams);2 D8 U; A! A% L( j/ U2 m4 Y  j2 `

# @! n9 u: A8 A. u8 |; N我大约calloc  每次共计大小为5K*16bits,
4 H- z7 ~1 |" {7 L  X6 `/ ?1 m; ?, ~4 O而默认配置才0x4000、需要改大。
9 H6 z4 [! E) k+ j+ r. E- A( s) L4 P
" m. c/ H5 r& R; P8 p% I7 k, q
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明! E0 u1 Q4 `2 ?. q7 t$ m
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下# ]: B7 b) o+ P) w/ ^, x" {
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
) W" m2 ?/ F! S6 \0 p

+ R9 N- i2 l+ P7 n是不是需要在DSP.CFG中进行配置) ]9 t* Z& J' q  E2 ?1 q) F
我现在的配置为
  f1 j7 I+ \: J
0 k8 m* W# [$ g& j$ t7 O/*' J- i# ?+ p8 x8 m0 l, z/ J8 f1 [: ^) R
*  ======== Operating System Configuration ========
2 G: @$ a' K9 l( j/ Z' G0 t */) F8 ]3 G- o$ u& P
) B9 A; o, f5 O3 E0 j* O. S5 T
/* no rts heap */+ \4 @. ]$ }' n5 Z+ \9 S6 J# }
Program.heap = 0;
& y6 z1 ?0 v  Y- TProgram.argSize = 100;  /* minimum size */  ]; A/ m) F9 K3 G( @1 w/ R' B
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
8 ?# I1 X  a' i' S  ~; D, m! x7 T
/* create a default heap */
. \. u+ C1 P. o$ I5 M% [" _+ Kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 i1 b3 v+ T# O7 I, e) Zvar heapMemParams = new HeapMem.Params();
$ v& }0 ^2 ?6 [0 e) t1 xheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大8 v3 `% z2 e/ Y6 r1 f

: n( e3 r! h9 W
var Memory = xdc.useModule('xdc.runtime.Memory');" d/ X9 v  a; P5 b
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);( `6 O! d: s" \0 I2 H

/ P- C8 @4 F/ ^+ a. n, O) R  E# u/* configure System module */
5 b" A$ D: A. Rvar SysMin = xdc.useModule('xdc.runtime.SysMin');& f( X, i: @1 M
SysMin.bufSize = 0x1000;: }5 E1 D8 D- z- j$ R0 T# e& ]+ c
SysMin.flushAtExit = false;( }6 X# j7 K3 Q/ y; c' I+ W
) c; }. l* W$ z; S8 O# x# k
var System = xdc.useModule('xdc.runtime.System');* T) r; Z) t: Y: j
System.SupportProxy = SysMin;" h: y( a/ \( m. p0 |5 @6 I
* C% b7 Q7 ^* [' l1 ]9 P
/* configure SysBios to use the lower half of Timer 1 */
6 n- d) o8 u  |1 V+ [6 Mvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');& f8 g0 f1 Q# a) I" Q! e3 ]" n
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
5 |$ i7 R$ ]' uTimer.timerSettings[1].master = true;! D, `+ J7 X4 ~' d9 }/ _
Timer.defaultHalf = Timer.Half_LOWER;2 W8 r0 g5 Y9 }
Clock.timerId = 1;8 v) C9 H) B. z5 c6 D
+ n+ ]9 l+ D# Q

, Y' V! o$ W) n% r1 v, ^, e- n( g/*
0 g# H/ U+ o! j! P *  ======== Miscellaneous Configuration ========
0 o) |% M" D4 w7 q */1 I- O: B1 {4 T9 }
! f/ P; Z! F5 n9 k$ ?
/* set default diags mask */0 B8 n/ u- [9 v+ r( o. Q* u: y
var Diags = xdc.useModule('xdc.runtime.Diags');
& Z' V( _  L0 c; Zvar Defaults = xdc.useModule('xdc.runtime.Defaults');
  }- V. d. l" t' r& U- \* J4 [$ H$ }$ \( r' j. B9 S& U
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
# g! E( X4 N8 j% h8 {9 H. yDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;9 M0 Q' T% d0 x3 A* f! {# u
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
5 _! o' n+ N9 p3 t% F- U7 _3 \6 _Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
9 A6 x# M. u# ^' gDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   *// {, A+ ^: s3 g5 G8 W
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;- v, e9 i% J' T, S8 l: q
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;3 ]; g1 r' o" }! M, K1 }5 X8 H
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
7 D; E9 J' K& B. r/ gDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
& M4 |" S4 f6 M* I( lDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
" y4 p) m( ?2 e! C: U9 PDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
; M+ H3 H8 q% M5 [9 XDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;! A  V+ g' E+ v( m3 B* l4 S
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;0 W) D1 ?) Y: k: v- k1 @. @
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;. z& p7 d0 w- d7 {& G/ U5 F

* F2 g, N" V: l9 r9 z1 ^0 s/* override diags mask for selected modules */$ H7 `# U" B/ R# Y
xdc.useModule('xdc.runtime.Main');
6 X1 n1 d4 G, m0 {# C- x) ZDiags.setMaskMeta(
  ?$ b- u9 [; d% ~5 Q2 w8 Z    "xdc.runtime.Main",
& x6 t4 ~; }! T( Q    Diags.ENTRY | Diags.EXIT | Diags.INFO,
/ |: G. T) q8 ~- ^$ M  U& R    Diags.RUNTIME_ON+ F" `0 I: S3 \1 O6 i* a: \
);
& O  [( N. C/ B4 H. ?! T
. e# W) w" Q! Q  P7 bvar Registry = xdc.useModule('xdc.runtime.Registry');
' l3 N' x# W2 }% MRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;! V* `! |8 z$ }7 K9 x( g  Z
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;  n4 v/ n! T5 h2 h2 ?* G
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;" m$ e6 c4 G. l1 E+ w% [
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;& Z9 s6 M) K/ v( h
; H$ F/ B9 Y/ p" V, g- G# e: K* t
/* create a logger instance */" e& W% U" s: V& `! e- ~  K
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
. X; v* r- v3 W& P8 g# v: L& ivar loggerBufP = new LoggerBuf.Params();4 s# p# m6 |+ g- K: P
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */1 K1 o8 J1 Z$ m, U. }7 R
loggerBufP.bufType = LoggerBuf.BufType_FIXED;  R9 P# s0 }+ m& F# l
" Y9 j+ V9 x+ [9 t6 M
var appLogger = LoggerBuf.create(loggerBufP);
( i2 g  B9 \/ Z$ e0 UappLogger.instance.name = "AppLog_Core1";, b( E$ d+ q* `) e* q+ p' L
Defaults.common$.logger = appLogger;
% H. S1 V% P4 V3 ^/ `Memory.defaultHeapSize = 0x8192;   
: O% r6 }  g7 }+ nIdle.idleFxns[0] = "&LEDStatus";
/ ^. e* R8 g- z! L! A+ VCache.initSize.l2Size = Cache.L2Size_32K;# I0 R; V4 k2 T: L& b& L
" P" E$ y+ A/ ?4 X8 ?5 O
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-22 12:52 , Processed in 0.043535 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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